一、设计简介:
本设计是基于51单片机超声波测距仪数码管系统设计,主要实现以下功能:
1. 单片机型号:STC89C52/51、AT89C52/51、AT89S52/51 可通用。
2.产品自带单片机上电复位电路、手动复位电路(复位按键)、晶振电路(给单片机提供时钟周期)。
3.数码管显示超声波测到的距离。
4.当超声波测出的距离小于设定的距离时就会使得蜂鸣器报警。
5.可设置 报警距离,按下设置键后 就可以再按 加减键 就可以修改报警距离并具有掉电保存功能。
6.HC-SR04超声波传感器模块测距,测量范围:2cm--5m。
主要硬件组成:
51单片机+HC-SR04超声波传感器+数码管+按键+蜂鸣器
二、原理图
三、PCB图
四、程序源码
部分代码:
/******************小延时函数*****************/ void delay() { _nop_(); //执行一条_nop_()指令就是1us _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } /*********************超声波测距程序*****************************/ void send_wave() { c_send = 1; //10us的高电平触发 delay(); c_send = 0; TH0 = 0; //给定时器0清零 TL0 = 0; TR0 = 0;//关定时器0定时 while(!c_recive); //当c_recive为零时等待 TR0=1; while(c_recive)//当c_recive为1计数并等待 { flag_time0 = TH0 * 256 + TL0; if((flag_time0 > 40000)) //当超声波超过测量范围时,显示3个888 { TR0 = 0; flag_csb_juli = 2; distance = 888; break ; } else { flag_csb_juli = 1; } } if(flag_csb_juli == 1) { TR0=0; //关定时器0定时 distance =flag_time0; //读出定时器0的时间 distance *= 0.017; // 0.017 = 340M / 2 = 170M = 0.017M 算出来是米 if((distance > 600))//距离 = 速度 * 时间 { distance = 888;//如果大于6m就超出超声波的量程 } } } /*********************定时器0、定时器1初始化******************/ void time_init() { EA = 1; //开总中断 TMOD = 0X11; //定时器0、定时器1工作方式1 ET0 = 0; //关定时器0中断 TR0 = 1; //允许定时器0定时 ET1 = 1; //开定时器1中断 TR1 = 1; //允许定时器1定时 } /***************主函数*****************/ void main() { beep = 0; //开机叫一声 delay_1ms(150); P0 = P1 = P2 = P3 = 0xff; //初始化单片机IO口为高电平 time_init(); //定时器初始化程序 while(1) { flag_300ms ++; //加1 if(flag_300ms >= 300) { flag_300ms = 0; send_wave(); //测距离函数 if(menu_1 == 0) { dis_smg[0] = smg_du[distance % 10]; //显示距离 dis_smg[1] = smg_du[distance / 10 % 10]; dis_smg[2] = smg_du[distance / 100 % 10] & 0xdf; ; dis_smg[3] = 0xff;//不显示 } clock_h_l(); //报警函数 }
五、资源获取
本项目包含的所有文件都可以点击下面的名片,发送 “55、基于51单片机超声波测距仪数码管系统设计” 获取!
项目纯手打,不是免费的哦~
希望可以帮到你哈!
55 基于51单片机超声波测距仪数码管系统设计 (程序+原理图+PCB图+参考论文+开题报告+元器件清单等)