毕业设计 第 18 页
图8
4.4 LED显示电路
显示器是一个典型的输出设备,而且其应用是极为广泛的,几乎所有的电子产品都要使用显示器,其差别仅在于显示器的结构类型不同而已。最简单的显示器可以使LED 发光二极管,给出一个简单的开关量信息,而复杂的较完整的显示器应该是 CRT监视器或者屏幕较大的 LCD 液晶屏。综合本课题的实际要求以及考虑单片机的接口资源,采用串行方式显示的 LED 驱动输出设备。因为需要显示的距离在10m以内,并且只需要精确到cm,故采用3个LED数码管显示距离数值。
在单片机应用系统中,LED数码管的显示常用两种方法:静态显示和动态扫描显示。所谓静态显示驱动,就是给要点亮的LED通以恒定的电流,即每一位LED显示器各引脚都要占用单独的具有锁存功能的I/O接口,单片机只需要把要显示数字的段码发送到接口电路并保持不变即可。如果要显示新的数据,再发送新的字形段码。因此,使用这种方法单片机中CPU开销小,但这种驱动方法需要寄存器、译码器等硬件设备。当需要显示的位数增加时,所需的器件和连线也相应增加,成本也增加。而动态显示驱动就是给
毕业设计 第 19 页
欲点亮的LED通以脉冲电流,即采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮,这时LED的亮度就是通断的平均亮度。考虑各种因素,本设计选用动态驱动显示。LED数码管采用共阴极接法,数字的段码由译码器CD4511控制,数字的位码由74LS138控制。具体电路图如图9所示。
图9
4.5报警电路设计
考虑到本设计的实际需求,系统只需提供简单的嘀嘀声作为报警信号即可。所以,报警电路不需要复杂的设计,只需用NPN三极管控制蜂鸣器发声即可,具体电路如图10所示。
毕业设计 第 20 页
图10
5.软件系统设计
5.1 程序流程设计
主程序实现系统的功能,主程序的编写是在各个子程序的基础上实现的。主程序程序指导各个子程序依次工作,实现系统的测距功能。主程序开始时,要对系统进行初始化,初始化包括I/O端口的初始化、中断的初始化、定时器的初始化等等。在初始化完成后,由定时器T0产生40KHz脉冲信号。由单片机P1.6端口输出40KHz的脉冲信号,由TC4069驱动超声波换能器发射40KHZ的超声波,同时定时器T1开始计时。单片机用P1.7接收超声波回波信号,当接收到下降沿,即p1.7口输入是低电平时,定时器T1计时停止。单片机开始转入计算子距离。由单片机内部程序决定其最终显示距离。主程序的工作流程图如图11。
毕业设计 第 21 页
开始 参数初始化 发射超声波、启动定时器 N 是否收到回波? Y 数据处理计算距离 是否在报警距离? Y 报警 N 显示距离
图11
5.2汽车倒车报警器程序的程序清单 #include
#define uchar unsigned char
毕业设计 第 22 页
#define uint unsigned int
#define ulong unsigned long
uchar Disp_Tab []={0x1f,0x3f,0x5f}; //位表
uchar char code dispbit []={0x0f,0x1f,0x2f,0x3f,0x4f,0x5f,0x6f,0x7f,0x8f,0x9f}; //段表 sbit beep=P1^5; sbit JDQ=P1^4; sbit led1=P1^0; sbit led2=P1^1; sbit led3=P1^2; sbit TX=P1^6; sbit RX=P1^7;
uchar cout,xx,num1,num2,num3; uchar b;
ulong n,m;
void delay(uchar a) //短延时 100a us {
uchar i,j;
for(i=0;i
void bep(uchar b) {
uchar i=5;
while(i--) { beep=~beep; delay(b); }; }
void ldelay(uchar b) //长延时 10b ms {
uchar k;
for(k=0;k
/*发射超声波*/ void timer0() interrupt 1