|
本帖最后由 啵啵子 于 2022-11-3 21:41 编辑
仿真负责人:冀海博
实物已完成,程序调试完成,仿真完成并已有现象

 
- #include <REGX52.H>
- #include "lcd1602.H"
- #include "intrins.h"
- sbit Trig =P1^6 ;
- sbit Echo =P1^7 ;
- void Timer0Init(void) //10微秒@11.0592MHz
- {
- TMOD &= 0xF0; //设置定时器模式
- TL0 = 0xF7; //设置定时初始值
- TH0 = 0xFF; //设置定时初始值
- TF0 = 0; //清除TF0标志
- TR0 = 1; //定时器0开始计时
- }
- void delay_ms(unsigned int t)
- {
- unsigned char i, j, z;
- for(z = t;z>0;z--)
- {
- _nop_();
- i = 2;
- j = 199;
- do
- {
- while (--j);
- } while (--i);
- }
- }
- void Delay10us()
- {
- TMOD |= 0x01; //16位定时器/计数器,TH0、TH1全用
- TH0 = 0xFF;
- TL0 = 0xF6;
- TR0 = 1; //TR0为1时允许T0开始计数
- while(!TF0); //当T0溢出时退出while
- TF0 = 0; //TF0置0
- }
- float GetDistance(unsigned int time)
- {
- float distance;
- distance = (float)time * 0.017; //cm
-
- return distance;
- }
-
- unsigned int RunOnce()
- {
- unsigned int time;
- //10us高电平发送触发信号
- Trig = 0;
- Trig = 1;
- Delay10us();
- Trig = 0;
- //等待高电平信号接收
- while(!Echo);
- //T0清0重新计数(高电平持续时间)
- TH0 = 0;
- TL0 = 0;
- TR0 = 1;
- //等待高电平信号接收结束
- while(Echo);
- //关闭T0计数
- TR0 = 0;
- //高电平时间赋值,单位us
- time = TH0*256 + TL0; // TH0<<8 | TL0
- TH0 = 0;
- TL0 = 0;
- return time;
- }
- void main()
- {
- unsigned int time = 0;
- float distance;
- unsigned int juli=0;
- LCD_Init();
- // LCD_ShowChar(1,1,'A');
- // LCD_ShowString(2,3,"helloworld");
- while(1)
- { // LCD_ShowNum(0,0,555,4) ;
- time = RunOnce(); //计算超声波测距时 传感器接收到高电平的时间
- distance = GetDistance(time);
- juli = distance;
- LCD_ShowString(1,1,"Distance:");
- LCD_ShowNum(1,10,juli%100,2);
- LCD_ShowString(1,12,"cm");
- delay_ms(1000);
-
- }
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|