2019-12-14
分类:
文章
•
2024-03-24 13:11:16
51单片机超声波HC-SR04测距程序
- List item
- #include “reg52.h”
- typedef unsigned char u8;
- typedef unsigned int u16;
- sbit Echo=P3^2;//回波
- sbit Trig=P1^1;//回波使能
- sbit led=P1^0;//测试led
- sbit LSA=P2^2;
- sbit LSB=P2^3; //138译码器管脚定
义
- sbit LSC=P2^4;
- u16 H_data;//计数出的数据u8
- shu[8];u8 code SmaGD[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- void delay(u16 i)
- {
- while(i–);
- }
- void DigDisplay(unsigned long H_data)//数码管整数显示
- {
- u8 i; shu[0] = SmaGD[H_data %100000000/10000000];
- shu[1] = SmaGD[H_data %10000000/1000000];
- shu[2] = SmaGD[H_data %1000000/100000];
- shu[3] = SmaGD[H_data %100000/10000];
- shu[4] = SmaGD[H_data %10000/1000];
- shu[5] = SmaGD[H_data %1000/100];
- shu[6] = SmaGD[H_data %100/10];
- shu[7] = SmaGD[H_data %10];
- for(i=0;i<8;i++)
- {
- switch(i)
- {
- case(0):
- LSA=0;LSB=0;LSC=0;break;//138第一位输出0
- case(1):
- LSA=1;LSB=0;LSC=0;break;//138第一位输出1
- case(2):
- LSA=0;LSB=1;LSC=0;break;//138第一位输出2
- case(3):
- LSA=1;LSB=1;LSC=0;break;//138第一位输出3
- case(4):
- LSA=0;LSB=0;LSC=1;break;//138第一位输出4
- case(5):
- LSA=1;LSB=0;LSC=1;break;//138第一位输出5
- case(6):
- LSA=0;LSB=1;LSC=1;break;//138第一位输出6
- case(7):
- LSA=1;LSB=1;LSC=1;break;//138第一位输出7 }
- P0=shu[i];
- delay(100);
- P0=0x00;
- }
- }
- void DS_Initial()//定时器0初始化
- {
- EA=1;
- ET0=1;//定时/计数器T0中断允许位
- TMOD=0X01;//使用定时器0,16位计数
- TR0=0;//T0运行控制位
- TH0=0;//高位清零
- TL0=0;//低位清零
- }
- void main()
- {
- // u8 mark;
- u16 i;
- Trig=0;//使能初始化
- DS_Initial();//定时器初始化
- while(1)
- {
- delay(200);//
- Trig=1; //
- delay(50);///信号使能
- Trig=0; //
- while(!Echo);//等待高电平的到来
- TR0=1;//打开定时器
- led=~led;
- while(Echo);//等待低电平
- TR0=0;//关闭定时器
- H_data=TH0*256+TL0;//合并定时器的值
- H_data/=58;//厘米为单位
- delay(20);
- TH0=0;//高位清零
- TL0=0;//低位清零
- for(i=80;i>0;i–)//给数码管显示的时间
- {
- DigDisplay(H_data);
- }
- }
- }