freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于單片機的超聲波測距儀的設(shè)計畢業(yè)論文-資料下載頁

2025-06-27 20:05本頁面
  

【正文】 uint unsigned intdefine ulong unsigned longdefine led P0//數(shù)據(jù)端口void convert(uint dat)。//數(shù)據(jù)轉(zhuǎn)換函數(shù)聲明sbit trig=P2^6。sbit echo=P2^7。ulong time=0。//超聲波往返的時間uchar timer=0。//400ms定時ulong S=0。//距離值bit flag=0。//溢出標(biāo)記bit flag1=0。uchar code display[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0x7f}。 //數(shù)碼管驅(qū)動信號09, ,滅,點sbit wei4=P2^5。sbit wei3=P2^4。sbit wei2=P2^3。sbit wei1=P2^2。//數(shù)碼管位選sbit s2=P1^2。sbit s3=P1^3。sbit s4=P1^4。//s2加,s3減,s4確定,s1設(shè)置sbit alarm=P1^0。sbit red=P2^1。sbit green=P2^0。uchar buf[4]={0,0,0,0}。//數(shù)碼管顯示數(shù)據(jù)緩存,高低uint up=100。down=50。//上下限初始值void delay1m(uint x){ uint i,j。 for(i=0。ix。i++) //連數(shù)x次,約 x ms for(j=0。j120。j++)。 //數(shù)120 次,約1 ms}/********************************************************/void scan() //掃描數(shù)碼管{ wei4=wei3=wei2=1。wei1=0。led=display[buf[3]]。delay1m(4)。 wei4=wei3=wei1=1。wei2=0。led=display[buf[2]]amp。0x7f。delay1m(4)。 wei4=wei1=wei2=1。wei3=0。led=display[buf[1]]。delay1m(4)。 wei1=wei3=wei2=1。wei4=0。led=display[buf[0]]。delay1m(4)。} /********************************************************/void Conut()//計算出距離值{ if(flag1==0){flag1=1。buf[0]=buf[1]=buf[2]=buf[3]=11。} else if(flag1==1) { time=TH0*256+TL0。 TH0=0。TL0=0。 S=(ulong)(time*175)/1000。 //算出來是cm*10,擴大10倍方便顯示 if((S4000)||flag==1) //超出測量范圍或溢出測量失敗顯示“ ” { flag=0。 buf[0]=buf[1]=buf[2]=buf[3]=11。 } else { buf[0]=S/1000。if(buf[0]==0){buf[0]=11。} buf[1]=S/100%10。if((buf[0]==11)amp。amp。(buf[1]==0)){buf[1]=11。} buf[2]=S/10%10。 buf[3]=S%10。 } }}/********************************************************/void time0_interrupt() interrupt 1 //T0中斷用來計數(shù)器溢出,超過測距范圍{ flag=1。//中斷溢出標(biāo)志}/********************************************************/void time1_interrupt() interrupt 3 //T1中斷用來掃描數(shù)碼管和計400ms啟動模塊{ static num=1。//數(shù)碼管掃描用變量 TH1=(655354000)/256。//定時4ms TL1=(655354000)%256。 switch(num) { case 1:led=0xff。wei4=wei3=wei2=1。wei1=0。led=display[buf[3]]。break。 case2:led=0xff。wei4=wei3=wei1=1。wei2=0。if(buf[2]!=10){led=display[buf[2]]amp。0x7f。}else{led=display[buf[2]]。}break。 case 3:led=0xff。wei4=wei1=wei2=1。wei3=0。led=display[buf[1]]。break。 case 4:led=0xff。wei1=wei3=wei2=1。wei4=0。led=display[buf[0]]。break。 default:break。 } num++。if(num4){num=1。} timer++。 if(timer=100) //400ms 啟動一次模塊 { timer=0。 trig=1。 _nop_()。_nop_()。_nop_()。_nop_()。 _nop_()。_nop_()。_nop_()。_nop_()。 _nop_()。_nop_()。_nop_()。_nop_()。 //大于10us的高電平 _nop_()。_nop_()。_nop_()。_nop_()。 trig=0。 } }/********************************主函數(shù)****************************************************/void main(){ TMOD=0x11。 //設(shè)T0,T1均為方式1 TH0=0。TL0=0。 TH1=(655354000)/256。//定時4ms TL1=(655354000)%256。 ET0=ET1=TR1=EX0=EA=1。 //允許T0,T1中斷,開啟總中斷 IT0=1。PX0 = 1。//外中斷0優(yōu)先 trig=0。echo=0。 up*=10。down*=10。//擴大10倍方便顯示 while(1) { while(!echo)。 //當(dāng)echo為低電平時等待 TR0=1。 //echo=1時,即收到回響信號開啟計數(shù) while(echo)。 //當(dāng)echo為高電平,計數(shù)并等待 TR0=0。 //關(guān)閉計數(shù) Conut()。 //計算距離值 if((S=4000)amp。amp。(flag!=1))//距離沒有超出,時間沒有溢出 { if(Sup){alarm=red=0。green=1。} else if(Sdown){alarm=green=0。red=1。} else if((S=up)amp。amp。(S=down)){alarm=1。red=green=1。} } else{red=green=alarm=1。} }}//======================================距離上下限報警值調(diào)整函數(shù)==============================void extern0()interrupt 0{ TR0=TR1=0。TH0=TL0=0。red=green=alarm=1。 convert(up)。 do { scan()。 if(!s2)//加 { delay1m(3)。 if(!s2) { up++。 if(up2000){up=1000。} while(!s2)。 convert(up)。 } } else if(!s3)//減 { delay1m(3)。 if(!s3) { up。 if(updown){up=1000。} while(!s3)。 convert(up)。 } } }while(s4)。//確定 alarm=0。delay1m(500)。alarm=1。//蜂鳴器響一聲 convert(down)。 do { scan()。 if(!s2)//加 { delay1m(3)。 if(!s2) { down++。 if(downup){down=500。} while(!s2)。 convert(down)。 } } else if(!s3)//減 { delay1m(3)。 if(!s3) { down。 if(down100){down=500。} while(!s3)。 convert(down)。 } } }while(s4)。//確定 TR0=TR1=1。//開啟測距,計時}//==============================================數(shù)據(jù)轉(zhuǎn)換函數(shù)==========================================================void convert(uint dat){ buf[0]=dat/1000。if(buf[0]==0){buf[0]=11。} buf[1]=dat/100%10。if((buf[0]==11)amp。amp。(buf[1]==0)){buf[1]=11。} buf[2]=dat/10%10。 buf[3]=dat%10。} 36
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1