单片机超声模块+LCD1602(HC-SR04)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

单片机超声模块+LCD1602显示(提示:用数码管显示参照这个网址)了解超声模块我们要分几步来理解,包括它的工作原理和在单片机上的运行情况,只有两者相互理解透才能更好的利用超声模块来开发一些东东!不同型号的超声模块其实大致是一样,也就没必要区分型号,除非你是特别要求,对于爱好者,初学者,则是没必要这么苛刻!第一步:超声模块的工作原理参数的设置时序图的说明第二步:单片机的连接上面我们知道怎么连接单片机的线了,对于TRIG发射端,ECHO接受端,它们只需要四I/O端口就可以。我们要熟悉LCD1602的工作原理,不明白的参照我的这份文档,里面对1602的工作步骤说的很明白。第三步:程序的编写和功能的开发这里我选择TRIG=P1^0ECHO=P3^2设置一个报警器,当距离超过200cm是就报警,不超过是就不报警。/******************************************板子:郭天祥老师的52单片机板?设计者:蒋时间:2012-4-29学校:南昌航空大学******************************************/#includereg51.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintsbitdula=P2^6;sbitwela=P2^7;sbitLCD_RS=P3^5;sbitLCD_RW=P3^6;sbitLCD_EN=P3^4;sbitd=P2^3;inttime;intsucceed_flag;uchartimeL;uchartimeH;uchardistance;sbitTrig=P1^0;sbitEcho=P3^2;ucharcodedis1[]={Thejuliis:};uchardis2[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};voiddelay(intms){inti;while(ms--){for(i=0;i110;i++){_nop_();}}}voiddelay_20us(){uchara;for(a=0;a100;a++);}bitlcd_busy(){bitresult;LCD_RS=0;LCD_RW=1;LCD_EN=1;_nop_();_nop_();_nop_();_nop_();result=(bit)(P0&0x80);LCD_EN=0;returnresult;}voidlcd_wcmd(ucharcmd){while(lcd_busy());LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_();P0=cmd;_nop_();_nop_();LCD_EN=1;_nop_();_nop_();LCD_EN=0;}voidlcd_wdat(uchardat){while(lcd_busy());LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;_nop_();_nop_();LCD_EN=1;_nop_();_nop_();LCD_EN=0;}voidlcd_pos(ucharpos){lcd_wcmd(pos|0x80);//数据指针=80+地址变量}voidlcd_init(){dula=0;wela=0;lcd_wcmd(0x38);//16*2显示,5*7点阵,8位数据delay(5);lcd_wcmd(0x38);delay(5);lcd_wcmd(0x38);delay(5);lcd_wcmd(0x0c);//显示开,关光标delay(5);lcd_wcmd(0x06);//移动光标delay(5);lcd_wcmd(0x01);//清除LCD的显示内容delay(5);}main(){uchari,a,b,c;delay(10);lcd_init();//初始化LCDTrig=0;//首先拉低脉冲输入引脚EA=1;//打开总中断0TMOD=0x10;//定时器1,16位工作方式while(1){EA=0;//关总中断Trig=1;//超声波输入端delay_20us();//延时20usTrig=0;//产生一个20us的脉冲while(Echo==0);//等待Echo回波引脚变高电平succeed_flag=0;//清测量成功标志EA=1;EX0=1;//打开外部中断0TH1=0;//定时器1清零TL1=0;//定时器1清零TF1=0;//计数溢出标志TR1=1;//启动定时器1delay(20);//等待测量的结果TR1=0;//关闭定时器1EX0=0;//关闭外部中断0if(succeed_flag==1){time=timeH*256+timeL;distance=time*0.0172;//厘米}if(succeed_flag==0){distance=0;//没有回波则清零}a=distance/100;b=(distance%100)/10;c=distance%10;lcd_wcmd(0x06);//向右移动光标lcd_pos(0);//设置显示位置为第一行的第1个字符i=0;while(dis1[i]!='\0'){//显示字符lcd_wdat(dis1[i]);i++;delay(2);//控制两字之间显示速度}lcd_pos(0x45);//设置显示位置为第二行第1个字符lcd_wdat(dis2[a]);delay(2);lcd_wdat(dis2[b]);delay(2);lcd_wdat(dis2[c]);delay(2);lcd_wdat('c');delay(2);lcd_wdat('m');delay(2);if(distance200)d=0;elsed=1;}}voidexter()interrupt0//外部中断0是0号{EX0=0;//关闭外部中断timeH=TH1;//取出定时器的值timeL=TL1;//取出定时器的值succeed_flag=1;//至成功测量的标志}voidtimer1()interrupt3//{TH1=0;TL1=0;}一遍可能看的有点糊涂!多看几遍就可以看懂!不明白问me+739141300技术付出的是金钱和汗水,收获的是一份自信!

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功