欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
超聲波仿真加單片機源程序 需8.6版本的proteus
[打印本頁]
作者:
a105865094
時間:
2017-12-2 16:06
標題:
超聲波仿真加單片機源程序 需8.6版本的proteus
仿真需要8.6版本的仿真proteus
超聲波仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
捕獲.JPG
(60.52 KB, 下載次數: 109)
下載附件
2017-12-2 16:04 上傳
51單片機源程序:
#include <REGX52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define smgport P0
uchar code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code smg_we[]={0xfe,0xfd,0xfb,0xf7};
uchar dis_smg[4] ={0x40,0x40,0x40,0x40};
sbit smg_w=P2^1;
sbit smg_d=P2^0;
sbit ECHO=P3^2;
sbit TR=P3^3; //觸發信號
uchar Flag;//測量標志位0.5秒觸發一次
/**************************************************
10us延時
**************************************************/
void Delay10Us(void)
{
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
}
/**************************************************
數碼位選函數
**************************************************/
void smg_we_switch(uchar i)
{
smgport=smg_we[i];
smg_w=1;
//smgport=smg_we[i];
smg_w=0;
}
void smg_d_switch(uchar dat)
{
smgport=dat;
smg_d=1;
smg_d=0;//所存
}
/**************************************************
關閉顯示用于消隱
**************************************************/
void smgalloff(void)
{
smgport=0;
smg_d=1;
smg_d=0;
smgport=0xff;
smg_w=1;
smg_w=0;
}
/**************************************************
數碼管顯示
**************************************************/
void smgDis(void)
{
static uchar i=0;
smgalloff();
smg_d_switch(dis_smg[i]);
smg_we_switch(i);
if(++i==4)i=0;
}
/**************************************************
距離測量
**************************************************/
void Measure(void)
{
uchar Err; //錯誤標記
unsigned long distance,pTime;//距離,時間變量
Err=0;
TR=1; //TR保持10us高電平觸發模塊測距
Delay10Us();
TR=0;
TH0=0;
TL0=0;
while(ECHO==0);//等待ECHO變為高
TR0=1; //啟動定時器,外部高電平觸發
while(ECHO==1)//等待超聲波回應獲超時
{
pTime=TH0*256+TL0;
if(pTime>40000)//時間超時
{
Err=1;
break;
}
}
TR0=0;//關閉定時器
pTime=TH0*256+TL0; //獲取時間
if(pTime<59)//測量距離小于2cm
{
Err=1;
}
if(Err==0)
{
distance=(pTime*173)/10000;//;pTime*346/1000000/2=pTime*0.0173 仿真的環境溫度為25度346m/s
if(distance>400)//仿真有效值只到331CM
{
Err=1;
}
else
{
dis_smg[0]=0;
dis_smg[1]=smg_du[distance/100]; //分離千位
dis_smg[2]=smg_du[(distance/10)%10];//分離百位
dis_smg[3]=smg_du[distance%10]; //分離個位
return;
}
}
dis_smg[0]=0; //錯誤時數碼管顯示Err
dis_smg[1]=0x79;
dis_smg[2]=0x50;
dis_smg[3]=0x50;
}
/**************************************************
定時器0初始化
**************************************************/
void Timer0Init(void)
{
TMOD|=0x09;//工作于16位模式,只有P32和TR0同時為1時開始計數
}
/**************************************************
定時器1初始化
**************************************************/
void Timer1Init(void)
{
TMOD|=0x10;//定時器1工作在方式1
TH1 = (65536-2000)/256;
TL1 = (65536-2000)%256; //2ms
TR1=1;
ET1=1;
EA=1;
}
void main(void)
{
TR=0; //關閉觸發
smgalloff();
Timer0Init();//定時器0初始化
Timer1Init();//定時器1初始化
while(1)
{
if(Flag)//每500ms測量一次
{
Flag=0;
Measure();//測量
}
…………
…………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png
(5.69 KB, 下載次數: 95)
下載附件
2017-12-3 00:42 上傳
全部資料51hei下載地址:
單片機超聲波仿真.zip
(106.37 KB, 下載次數: 226)
2017-12-2 16:05 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2017-12-3 00:43
好資料,51黑有你更精彩!!!
作者:
l6931639
時間:
2018-1-30 09:41
哈哈,我終于找到這個超聲波模塊了
作者:
XIONG111
時間:
2018-5-22 10:11
怎么下載不了
作者:
圓周
時間:
2019-6-10 09:35
那個圈是怎么放置的
作者:
duan19981103
時間:
2019-12-3 17:59
厲害
作者:
lry345
時間:
2020-10-8 20:22
仿真中為什么顯示不了距離
作者:
wifingtta
時間:
2023-2-25 13:00
用8.9運行,可以運行,程序也沒有問題,感謝
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1