【Proteus仿真】51单片机+超声波测距+ 带报警按键可调
【Proteus仿真】51单片机+超声波测距+ 带报警按键可调
- Proteus仿真

Proteus仿真bug说明
在主程序while循环里面,在测量超声波返回信号时,有时候会收不到返回信号,代码会一直开在 while(!RX);这里,不是代码问题,是Proteus仿真器件的问题,只有停止仿真,然后再启动运行仿真试一试看,直到有测量值出现才正常。目前不知道是不是只在这个8.12版本出现的,好像以前在8.9版本上没有遇到过。
1 2 3 4 5 6 7 8 9 10 11
| void StartModule() //启动模块 { TX=1;//触发引脚发出11us的触发信号(至少10us) NOP();NOP();NOP();NOP();NOP(); TX=0; while(!RX);//当RX为零时等待 TR0=1; //开启计数 while(RX); //当RX为1计数并等待 TR0=0; //关闭计数 }
|
主程序代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| //#include <STC89C5xRC.H> #include <reg51.h> #include "LCD1602.h" #include "hcsro4.h" sbit Key_Up = P2^3; //上调报警时间按键 sbit Key_Down = P2^4;//下调报警时间按键 //#define Busy 0x80 //用于检测LCM状态字中的Busy标识
uchar Set_Distance = 30; void keyscan(); void Delay10us(); void main() { // delay\_ms(500); uchar i=0; TMOD=0x01; //设T0为方式1,GATE=1; TH0=0; TL0=0; //设定时器0初值为0; ET0=1; //允许T0中断 TR0=0;//关闭定时器 EA=1; //开启总中断 BEEP=1; LCD1602\_Init(); //初始化LCD1602 LCD1602\_write\_com(0x01); //清屏指令 while(1) { LCD1602\_set\_position(0,2); //指针设置到第二行第1列 LCD1602\_prints("Set\_Dis: "); LCD1602\_set\_position(0,10); LCD1602\_printc(Set_Distance/10 + 0x30);//显示报警距离十位 LCD1602\_printc(Set_Distance%10 + 0x30);//显示报警距离个位 /\* 下面两行是用来调试时,检测bug启用的\*/ LCD1602\_set\_position(0,15); LCD1602\_printc(i + 0x30);//在第一行15位置显示一个字符 /\*在Proteus仿真时,RX如果不能跳变,容易卡在这里\*/ StartModule(); //启动模块 Conut(); //计算距离 if(S < Set_Distance) //距离小于30cm时,蜂鸣器报警,发光二极管闪 { delay\_ms(S);//距离作为 延时参数,距离障碍物越近,报警频率越高 BEEP=0; LED=1; delay\_ms(S); BEEP=1; LED=0; } else { BEEP=1; } keyscan(); i++; i %= 245; } }
void Timer0() interrupt 1 //T0中断用来计数器溢出,超过测距范围 { flag=1; //中断溢出标志 }
void keyscan(){ if(Key_Up==0)//上调报警距离 { delay\_ms(120); if(Key_Up==0){ Set_Distance++; } } if(Key_Down==0)//下调报警距离 { delay\_ms(120); if(Key_Down==0) Set_Distance--; }
}
|
程序源码和仿真资源
本示例基于Proteus8.12平台。
1 2 3
| 链接:https://pan.baidu.com/s/1aGcJk2fkecGIhOMhpJdCLQ 提取码:yk06
|
| 往往都是事情改变人,人却改变不了事情。电影-《无间道》 |
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!