|
寫一個(gè)簡(jiǎn)單地超聲波測(cè)距程序,數(shù)碼管顯示距離,單位厘米
單片機(jī)源程序如下:
- #include "reg51.h"
- unsigned char table[]=
- {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
-
- #define uint unsigned int
- #define uchar unsigned char
- sbit D1= P2^7;
- sbit Trig = P2^2;
- sbit Echo = P3^2;
- sbit SMG_q = P1^0;
- sbit SMG_b = P1^1;
- sbit SMG_s = P1^2;
- sbit SMG_g = P1^3;
- uint time = 0;
- uint timeH = 0;
- uint timeL = 0;
- uint succeed_flag;
-
- void display(uint da);
- void delay(uint z);
- void delay_20us();
-
- void main(void)
- {
- uint distance;
-
- Trig=0; //首先拉低脈沖輸入引腳
- EA=1; //打開總中斷0
- TMOD=0x10; //定時(shí)器1,16位工作方式
- while(1)
- {
- EA=0; //關(guān)總中斷
- Trig=1; //超聲波輸入端
- delay_20us(); //延時(shí)20us
- Trig=0; //產(chǎn)生一個(gè)20us的脈沖
- while(Echo==0); //等待Echo回波引腳變高電平
- succeed_flag=0; //清測(cè)量成功標(biāo)志
- EA=1;
- EX0=1; //打開外部中斷0
- TH1=0; //定時(shí)器1清零
- TL1=0; //定時(shí)器1清零
- TF1=0; //計(jì)數(shù)溢出標(biāo)志
- TR1=1; //啟動(dòng)定時(shí)器1
- delay(20); //等待測(cè)量的結(jié)果
- TR1=0; //關(guān)閉定時(shí)器1
- EX0=0; //關(guān)閉外部中斷0
- if(succeed_flag==1)
- {
- time=timeH*256+timeL;
- distance=time*0.0172; //厘米
- display(distance );
-
- if(distance<=150 && distance>=80)
- {
- D1=0;
- }
- else D1=1;
- }
-
- if(succeed_flag==0)
- {
- distance=9999;
- D1=1;
- delay(24);
- }
- }
- }
- void display(uint da)
- {
- SMG_q=0;
- P0=table[da/1000];
- delay(1);
- P0=0XFF;
- SMG_q=1;
-
- SMG_b=0;
- P0=table[da/100%10];
- delay(1);
- P0=0XFF;
- SMG_b=1;
-
- SMG_s=0;
- P0=table[da%100/10];
- delay(1);
- P0=0XFF;
- SMG_s=1;
- SMG_g=0;
- P0=table[da%10];
- delay(1);
- P0=0XFF;
- SMG_g=1;
- }
- void exter() interrupt 0 // 外部中斷0是0號(hào)
- {
- timeH =TH1; //取出定時(shí)器的值
- timeL =TL1; //取出定時(shí)器的值
- succeed_flag=1;//至成功測(cè)量的標(biāo)志
- EX0=0; //關(guān)閉外部中斷
- }
- //****************************************************************
- //定時(shí)器1中斷,用做超聲波測(cè)距計(jì)時(shí)
- void timer1() interrupt 3 //
- {
- TH1=0;
- TL1=0;
- }
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=125;y>0;y--);
- }
- void delay_20us()
- {
- uchar a ;
- for(a=0;a<100;a++);
- }
復(fù)制代碼
所有程序51hei提供下載:
超聲波測(cè)距—數(shù)碼管顯示距離(單位厘米)程序.rar
(28.34 KB, 下載次數(shù): 31)
2020-5-3 20:00 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|