单片机课程设计基于51单片机的红外控制电子时钟LCD显示设计

上传人:阳*** 文档编号:50675655 上传时间:2022-01-21 格式:DOC 页数:29 大小:205.50KB
返回 下载 相关 举报
单片机课程设计基于51单片机的红外控制电子时钟LCD显示设计_第1页
第1页 / 共29页
单片机课程设计基于51单片机的红外控制电子时钟LCD显示设计_第2页
第2页 / 共29页
单片机课程设计基于51单片机的红外控制电子时钟LCD显示设计_第3页
第3页 / 共29页
点击查看更多>>
资源描述
单片机原理及应用课程设计报告基于红外控制电子时钟(LCD显示)设计 1.课程设计目的1.1巩固和加深对单片机原理和接口技术知识的理解;1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;1.3学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。2.课程设计要求以AT89C51单片机为核心的时钟,在1602显示器上显示当前的时间,显示格式为“时时:分分:秒秒”,并开始计时。具体功能如下:用红外遥控器上5个按键设置当前时间,调闹钟,控制开关等。功能键K1K5功能如下。l K1暂停。l K2设置时间。l K3秒,分,时之间的切换。l K4调闹钟。l K5控制开关。3. 硬件设计3.1 设计思想51单片机1602接收头红外遥控器蜂鸣器 原理框图 接收头通过接收红外遥控器发送的数据传送给单片机,通过单片机控制显示屏和蜂鸣器的工作。 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位的数据码。其数据帧如下图:数字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:主要技术参数:显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mm引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下表:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极3.3 功能电路介绍1)下图为红外线发射模块原理图:2)红外线接收接口:3.3 时间显示和调节的软件设计软件采用可读性强的C语言来写,经过KeilC编译通过,并最终将十六进制(HEX)文件烧写到单片机中。程序编写采取模块化、结构化设计。语言程序可以分为几个主要功能模块程序:驱动程序,定时/计数器程序,键盘中断扫描程序,1602液晶显示程序3.3.1 程序流程 时间显示和调节系统的总体的工作流程如下:1.由单片机通过程序对液晶进行初始化。2. 单片机的定时/计数器定时记数。当记时到60秒时,秒清零,分钟自动加1。当记时到60分钟时,分钟清零,小时加1。当记时到24小时,从头开始记时。3.利用单片机的外部中断功能。当按键开关按下时,单片机的I/O口检测到外部中断,开始根据中断指令来相应的处理数据,从而达到调整时间的效果。3.3.2 程序模块化处理相对应于硬件部分,实时钟系统的软件部分可分三个模块:显示模块,逻辑处理模块,人机交互模块(调节时间模块)。1. 显示模块主要由五个子函数组成,即延时函数,定时器函数,初始化函数,读指令模块和读数据模块五个子函数。2. 逻辑处理模块是整个软件设计的核心,逻辑处理模块主要得到从定时/计数器中溢出的数据,显示在液晶显示器上。并且当得到外部中断指令时,处理外部中断响应。由于程序简短,将其包含在人机交互模块中的时间显示液晶程序中。3. 人机处理模块主要由对液晶的处理函数以及对按键的处理函数组成。程序先进行初始化(包括液晶的初始化也放在程序的开头)。接下来的程序是一个一直循环的循环,先调用人机交互模块中的扫描按键程序,如果没有按下任何键,就默认进入人机交互的液晶显示实时时间程序,其中程序中会调用显示模块中的定时/计数器函数,进行实时的时间显示,逻辑处理模块所要做的是:当得到从定时/计数器中溢出的数据,显示在液晶显示器上。当得到外部中断指令时,处理外部中断响应。时间调整完成后要能够再次回到实时时间显示页面。4.1软件流程图1)红外线接收:开始定义两个全局变量count=0;buf=0;否是定义静态局部变量iinit_time0();init_int0();初始化定时器0和外部中断0否P32=0是33=count63i=0否否16i1;buf=buf|0x80;count=0count7buf=buf1;count=02)1602LCD操作流程 开始 Int ii250是否否延时4usLcd_bz()=1 是 LCD_RS=0 LCD-RW=0 Lcd_wcmd(pos|0x80)写入字符显示数据到LCD LCD_RS=1 LCD_RW=0 lcd-init() 结束3)计时显示程序display():开始buf7+否buf7=0x3abuf6=0x30buf4+buf7=0x30buf6+buf6=0x30否是是是buf3=0x30buf1+buf4=0x3a否buf4=0x30buf3+buf3=0x36否是是buf4=0x3a否buf4=0x30buf3+buf3=0x36否是是否buf3=0x30buf1+是buf1=0x3abuf1=0x30buf0+buf1=0x30buf0=0x32&buf1=0x33&buf1=0x33buf0=buf1=buf3=buf4=buf6=buf7=0x30buf1=0x30结束4)显示程序:xsxs:开始Display()Lcd-pos(4)lcd_wdat(bufi)buf3=0x30buf1+i8是lcd_pos(0x44)i=0i8否否是是buf1=0x3abuf1=0x30buf0+buf1=0x30否buf0=0x32&buf1=0x33&buf1=0x33buf0=buf1=buf3=buf4=buf6=buf7=0x30buf1=0x30结束5)tiaonao():开始延时否按下调闹钟键键延时确定位置显示“tn”按下调闹键是是否是否按切换键i=0是i=1是否调节分调节时否是i+否去除“调闹”结束6)开闹钟程序:knz():开始否按下开关键键蜂鸣器响确定位置显示“K”闹铃时间到否是是结束7)main函数:开始init_time0();init_int0();lcd_init()lcd_pos(15)lcd_wdat(Y)xsxs()zant()tiaonao()knz()zant()4.2 源程序:主程序初始化程序显示程序液晶写指令程序液晶写数据程序定时/计数器程序键盘子程序用于调节时间5. 调试运行5.1液晶显示问题,液晶上电时显示不稳定,有时候会出现乱码。查看程序时发现写指令前一定要考虑到LCD的实际时间显示速度,在液晶上显示完第一行数据后应该稍加几毫秒的延时。添加了延时后,显示正常。5.2暂停程序中的语句问题:if(bufh=0x44)bufh=0;lcd_pos(15);lcd_wdat(Z);程序段中,刚开始没有bufh=0;语句,电脑一直以为是接收按键发送的数据,而没有停止,接下去也没有反应了。下面的程序段中也是同样问题,加上清零以后,程序运行正常,硬件调试正常。6. 设计心得体会本次单片机设计是用单片机控制一个简单系统的实际应用。通过单片机这个核心控制元件,做成了一个时间可调电子时钟。它首先具备一个实时时间显示的功能,作用相当于一个电子钟,定时/计数器产生时间信号,通过单片机显示在液晶上;其次具备时间可调节的功能,用按键调节时间,通过液晶上光标闪动的位置就可以知道当前调节的是那个数据,使系统能够人性化与个性化。 这次设计中,我深刻体会到专研的重要性,一个看似简单的系统,却需要着大量的知识储备和很强的专研精神,理论和实践往往是两回事,理论上很简单的事情在实际操作中往往会遇到很多意想不到的困难,学科的知识不光来自于书本知识,更来自于实践。由于水平和经验的有限,系统可能仍存在一些缺点或者有更多更好的功能或方法可以加进去,望各位老师、同学指正。7.参考书目:1 肖金球. 单片机原理与接口技术.M.北京:清华大学出版社,2004.122 郭天祥、新概念51单片机C语言教程、2009年1月、第一版、电子工业出版社 8. 附录程序:main.c:#includehwx.c#include1602.c#includedeal.cvoid main()init_time0();init_int0();lcd_init();while(1)lcd_pos(15);lcd_wdat(Y);xsxs();zant();tiaonao();knz();hwx.c:#include#define unchar unsigned char unchar bufh,count;void init_time0()TMOD=0x02; /*模式选择*/TH0=0;TL0=0;ET0=1;TR0=1;void init_int0()/P3.2口EA=1; /*打开使能端,能响应中断*/EX0=1;IT0=1;void timer0() interrupt 1count+;void int0() interrupt 0static unchar i;if(count=33) / *125000/256=48 */i=0;if(16i&i7)bufh=bufh1;bufh=bufh|0x80;count=0;elsebufh=bufh1;count=0;/if(i=25)P0=buf;i+;count=0;/要使用定时器必先初始化init_time0();/init_time0();/buf存数/count记时间1602:#include #include typedef unsigned char BYTE;typedef bit BOOL; sbit LCD_RS = P26; sbit LCD_RW = P25;sbit LCD_EP = P27;delay(int ms) / 延时子程序int i;while(ms-) for(i = 0; i 250; i+) _nop_(); _nop_(); _nop_(); _nop_(); BOOL lcd_bz() / 测试LCD忙碌状态BOOL result;LCD_RS = 0; /接收命令而不是数据LCD_RW = 1; /不写LCD_EP = 1; /打开使能端_nop_();_nop_();_nop_();_nop_();result = (BOOL)(P0 & 0x80);LCD_EP = 0;return result; lcd_wcmd(BYTE cmd) / 写入指令数据到LCDwhile(lcd_bz();LCD_RS = 0;LCD_RW = 0;LCD_EP = 0;_nop_();_nop_(); P0 = cmd;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0; lcd_pos(BYTE pos) /设定显示位置lcd_wcmd(pos | 0x80);lcd_wdat(BYTE dat) /写入字符显示数据到LCDwhile(lcd_bz();LCD_RS = 1;LCD_RW = 0;LCD_EP = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0; lcd_init() /LCD初始化设定lcd_wcmd(0x38); /16*2显示,5*7点阵,8位数据delay(1);lcd_wcmd(0x0c); /显示开,关光标delay(1);lcd_wcmd(0x06); /移动光标delay(1);lcd_wcmd(0x01); /清除LCD的显示内容delay(1);deal.c#includesbit fmq=P15; /蜂鸣器接口BYTE buf8=00:00:00;BYTE nz8=nz 00:00;bit flag; /表示闹钟开关与否的状态量void delay2(unsigned char i)while(-i);void delay1(unsigned char t)t+;while(-t)delay2(245);delay2(241);void xsxs() BYTE i; display(); lcd_pos(4); for(i=0;i8;i+) lcd_wdat(bufi); lcd_pos(0x44); for(i=0;i8;i+) lcd_wdat(nzi); void xs2() BYTE i; display(); lcd_pos(4); for(i=0;i0x31)if(buf10x33)buf0=0x30;buf1=0x30;lcd_pos(4);lcd_wdat(buf0);lcd_wdat(buf1);delay(50);if(bufh=0x43) /切换键bufh=0;i+;if(i=3)i=0;bufh=0;lcd_pos(14);lcd_wdat( );void tiaonao()unchar i=0;delay(150);if(bufh=0x07)bufh=0;delay(150);lcd_pos(0x4d);lcd_wdat(t);lcd_wdat(n);while(bufh!=0x07)xs2();delay(150);if(bufh=0x40)bufh=0;if(i=0)lcd_pos(0x4e);lcd_wdat(f);nz7+;if(nz7=0x3a)nz7=0x30;nz6+;if(nz6=0x36)nz6=0x30;/lcd_pos(10);/lcd_wdat(nz6);/lcd_wdat(nz7);elselcd_pos(0x4e); lcd_wdat(s); nz4+; if(nz4=0x3a) nz4=0x30;nz3+;if(nz4=0x32&nz3=0x34)nz3=0x30;nz4=0x30;/lcd_pos(0x07);/lcd_wdat(nz3);/lcd_wdat(nz4);/lcd_pos(0x47);/lcd_wdat(nz3);/lcd_wdat(nz4);xs3();xsxs();delay(150);if(bufh=0x43)bufh=0;i=i;bufh=0;lcd_pos(0x4d);lcd_wdat( );lcd_wdat( );void knz()delay(150);if(bufh=0x15) /开关按键bufh=0;flag=flag;if(flag=0)lcd_pos(0x40);lcd_wdat(K);elselcd_pos(0x40);lcd_wdat( );if(flag=0)if(buf0=nz3&buf1=nz4&buf3=nz6&buf4=nz7)fmq=0;elsefmq=1;elsefmq=1;29 / 29文档可自由编辑打印
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 其他分类 > 论文指导


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!