您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于红外控制电子时钟(LCD显示)设计51单片机
1《单片机原理及应用课程设计》报告——基于红外控制电子时钟(LCD显示)设计2011年5月1日21.课程设计目的1.1巩固和加深对单片机原理和接口技术知识的理解;1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;1.3学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。2.课程设计要求以AT89C51单片机为核心的时钟,在1602显示器上显示当前的时间,显示格式为“时时:分分:秒秒”,并开始计时。具体功能如下:用红外遥控器上5个按键设置当前时间,调闹钟,控制开关等。功能键K1~K5功能如下。K1—暂停。K2—设置时间。K3—秒,分,时之间的切换。K4—调闹钟。K5—控制开关。3.硬件设计3.1设计思想3原理框图接收头通过接收红外遥控器发送的数据传送给单片机,通过单片机控制显示屏和蜂鸣器的工作。3.2主要元器件介绍1)红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。红外线遥控器使用TC9012专用发射集成模块做的,用频率为38、占空比为1/3的PPM方式调制,当一个键按下超过36ms振荡器使芯片激活如果这个键按下且延迟大约108ms,这108ms发射代码由一个起始码9ms,一个结果码4.5ms(结果码加起始码构成一个12.5ms的引导码),低8位地址码9ms-8ms,8位地址码9ms-8ms,8位数据码9ms-8ms和这8位数据的反码9ms-8ms组成,我们提取的即是那8位的数据码。其数据帧如下图:51单片机1602接收头红外遥控器蜂鸣器4数字0和1的脉冲如下:当接受端当检测到有红外线发过来,将接收端置低,否则置高。解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右均可。2)1602:主要技术参数:显示容量:16×2个字符芯片工作电压:4.5—5.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.95×4.35(W×H)mm引脚功能说明51602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下表:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极3.3功能电路介绍1)下图为红外线发射模块原理图:62)红外线接收接口:3.3时间显示和调节的软件设计软件采用可读性强的C语言来写,经过KeilC编译通过,并最终将十六进制(HEX)文件烧写到单片机中。程序编写采取模块化、结构化设计。语言程序可以分为几个主要功能模块程序:驱动程序,定时/计数器程序,键盘中断扫描程7序,1602液晶显示程序3.3.1程序流程时间显示和调节系统的总体的工作流程如下:1.由单片机通过程序对液晶进行初始化。2.单片机的定时/计数器定时记数。当记时到60秒时,秒清零,分钟自动加1。当记时到60分钟时,分钟清零,小时加1。当记时到24小时,从头开始记时。3.利用单片机的外部中断功能。当按键开关按下时,单片机的I/O口检测到外部中断,开始根据中断指令来相应的处理数据,从而达到调整时间的效果。3.3.2程序模块化处理相对应于硬件部分,实时钟系统的软件部分可分三个模块:显示模块,逻辑处理模块,人机交互模块(调节时间模块)。1.显示模块主要由五个子函数组成,即延时函数,定时器函数,初始化函数,读指令模块和读数据模块五个子函数。2.逻辑处理模块是整个软件设计的核心,逻辑处理模块主要得到从定时/计数器中溢出的数据,显示在液晶显示器上。并且当得到外部中断指令时,处理外部中断响应。由于程序简短,将其包含在人机交互模块中的时间显示液晶程序中。3.人机处理模块主要由对液晶的处理函数以及对按键的处理函数组成。程序先进行初始化(包括液晶的初始化也放在程序的开头)。接下来的程序是一个一直循环的循环,先调用人机交互模块中的扫描按键程序,如果没有按下任何键,就默认进入人机交互的液晶显示实时时间程序,其中程序中会调用显示模块中的定时/计数器函数,进行实时的时间显示,逻辑处理模块所要做的是:当得到从定时/计数器中溢出的数据,显示在液晶显示器上。当得到外部中断指令时,处理外部中断响应。时间调整完成后要能够再次回到实时时间显示页面。4.1软件流程图1)红外线接收hwx.h:8开始定义两个全局变量count=0;buf=0;init_time0();init_int0();初始化定时器0和外部中断0P3^2=0否是33=count63定义静态局部变量ii=0是否16i25否i++;count=0是buf=buf1;buf=buf|0x80;count=0count7是否buf=buf1;count=092)1602LCD操作流程1602.h是开始Intii<250延时4us否Lcd_bz()=1否是LCD_RS=0LCD-RW=0Lcd_wcmd(pos|0x80)写入字符显示数据到LCDLCD_RS=1LCD_RW=0lcd-init()结束103)计时显示程序display():buf[4]==0x3a否buf[4]=0x30buf[3]++buf[3]==0x36否是是buf[7]=0x30buf[6]++buf[6]==0x30否是是开始buf[7]++buf[7]==0x3a否buf[6]=0x30buf[4]++buf[3]=0x30buf[1]++是11buf[4]==0x3a否buf[4]=0x30buf[3]++buf[3]==0x36否是buf[1]==0x3abuf[1]=0x30buf[0]++buf[1]=0x30buf[0]==0x32&&buf[1]==0x33&&buf[1]==0x33buf[0]=buf[1]=buf[3]=buf[4]=buf[6]=buf[7]=0x30buf[1]=0x30是结束是否buf[3]=0x30buf[1]++124)显示程序:xsxs:i8是lcd_pos(0x44)i=0i8否否开始Display()buf[3]=0x30buf[1]++buf[1]==0x3abuf[1]=0x30buf[0]++buf[1]=0x30是是Lcd-pos(4)lcd_wdat(buf[i])135)tiaonao():确定位置显示“tn”按下调闹键是是否buf[0]==0x32&&buf[1]==0x33&&buf[1]==0x33buf[0]=buf[1]=buf[3]=buf[4]=buf[6]=buf[7]=0x30buf[1]=0x30结束否开始延时按下调闹钟键键否延时146)开闹钟程序:knz():i==0是i==1是否调节分调节时否是i++去除“调闹”结束是否按切换键否开始157)main函数:确定位置显示“K”闹铃时间到否是是开始init_time0();init_int0();lcd_init()lcd_pos(15)lcd_wdat('Y')按下开关键键否蜂鸣器响结束164.2源程序:·主程序·初始化程序·显示程序·液晶写指令程序·液晶写数据程序·定时/计数器程序·键盘子程序用于调节时间5.调试运行5.1液晶显示问题,液晶上电时显示不稳定,有时候会出现乱码。查看程序时发现写指令前一定要考虑到LCD的实际时间显示速度,在液晶上显示完第一行数据后应该稍加几毫秒的延时。添加了延时后,显示正常。xsxs()zant()tiaonao()knz()175.2暂停程序中的语句问题:if(bufh==0x44){bufh=0;lcd_pos(15);lcd_wdat('Z');······程序段中,刚开始没有bufh=0;语句,电脑一直以为是接收按键发送的数据,而没有停止,接下去也没有反应了。下面的程序段中也是同样问题,加上清零以后,程序运行正常,硬件调试正常。6.设计心得体会本次单片机设计是用单片机控制一个简单系统的实际应用。通过单片机这个核心控制元件,做成了一个时间可调电子时钟。它首先具备一个实时时间显示的功能,作用相当于一个电子钟,定时/计数器产生时间信号,通过单片机显示在液晶上;其次具备时间可调节的功能,用按键调节时间,通过液晶上光标闪动的位置就可以知道当前调节的是那个数据,使系统能够人性化与个性化。这次设计中,我深刻体会到专研的重要性,一个看似简单的系统,却需要着大量的知识储备和很强的专研精神,理论和实践往往是两回事,理论上很简单的事情在实际操作中往往会遇到很多意想不到的困难,学科的知识不光来自于书本知识,更来自于实践。由于水平和经验的有限,系统可能仍存在一些缺点或者有更多更好的功能或方法可以加进去,望各位老师、同学指正。7.参考书目:[1]肖金球.单片机原理与接口技术.[M].北京:清华大学出版社,2004.12[2]郭天祥、《新概念51单片机C语言教程》、2009年1月、第一版、电子工业出版社188.附录程序:main.c:#includehwx.c#include1602.c#includedeal.cvoidmain(){init_time0();init_int0();lcd_init();while(1){lcd_pos(15);lcd_wdat('Y');xsxs();zant();tiaonao();knz();}}hwx.c:#includereg52.h#defineuncharunsignedcharuncharbufh,count;voidinit_time0(){TMOD=0x02;/*模式选择*/TH0=0;TL0=0;19ET0=1;TR0=1;}voidinit_int0()//P3.2口{EA=1;/*打开使能端,能响应中断*/EX0=1;IT0=1;}voidtimer0()interrupt1{count++;}voidint0()interrupt0{staticunchari;if(count63&&count=33)/*125000/256=48*/{i=0;}if(16i&&i25)/*数据码位置*/{if(count7){bufh=bufh1;bufh=bufh|0x80;count=0;}else{20bufh=bufh1;count=0;}}//if(i==25){P0=buf;}i++;count=0;}//要使用定时器必先初始化init_time0();/init_time0();/buf存数/count记时间1602:#includereg52.h#includeintrins.htypedefunsignedcharBYTE;typedefbitBOOL;sbitLCD_RS=P2^6;sbitLCD_RW=P2^5;sbitLCD_EP=P2^7;delay(intms){//延时子程序inti;while(ms--)
本文标题:基于红外控制电子时钟(LCD显示)设计51单片机
链接地址:https://www.777doc.com/doc-3847788 .html