51单片机可调电子时钟.docx_第1页
51单片机可调电子时钟.docx_第2页
51单片机可调电子时钟.docx_第3页
51单片机可调电子时钟.docx_第4页
51单片机可调电子时钟.docx_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录摘要2Abstract31.设计目的42.设计任务42.1.任务1:开机界面的设置42.2.任务2:LCD-1602显示日期时间42.3.任务3:时间与日期的调整43.硬件设计43.1.STC89C51(51单片机)43.2.LCD-1602液晶显示屏54.软件设计74.1.应用软件74.2.程序框图74.3.使用说明74.4.注意事项84.5.调试结果85.收获9附录:10附录A.硬件图10附录B.主要程序11摘要电子时钟是单片机系统的一个应用,由硬件和软件相配合使用。本文通过对单片机的控制实现日历功能电子时钟的设计,以达到学习、了解单片机相关指令在各方面的应用。硬件由主控器、显示电路、键盘接口等三个模块组成。该时钟设计以STC-89C51作为主控器,控制显示时钟信息;显示模块用LCD-1602液晶屏;键盘接口电路由普通按键完成。软件利用C语言编程实现单片机的控制功能。关键词:电子时钟、单片机、LCD-1602液晶显示2AbstractElectronic clock is a single chip microcomputer system application, by the use of hardware and software. In this paper, through the control of single-chip microcomputer to achieve the design of the electronic clock, in order to achieve learning, to understand the microcontroller related instructions in various aspects of the application. The hardware is composed of three modules, such as the main controller, the display circuit, the keyboard interface and so on. The clock is designed with STC-89C51 as the main controller, controlling the display clock information; the display module uses the LCD-1602 LCD screen; the keyboard interface circuit is completed by the ordinary button. Software uses C language programming microcontroller control functions.Key words: electronic clock, single chip microcomputer,LCD-1602 liquid crystal display1. 设计目的该电子时钟由C语言编写而成,利用单片机定时器控制时钟运行,实现按键调整时间和日期的功能。2. 设计任务2.1. 任务1:开机界面的设置上电显示开机界面,“King.G”闪烁两次,之后进入主界面。2.2. 任务2:LCD-1602显示日期时间采用双行显示,第一行显示“2015-11-11”第二行显示“08-00-00”并且开始跑表。2.3. 任务3:时间与日期的调整采用三个独立按键,按下功能键,定时器暂停,光标开启并在秒数位置闪烁,其他两个按键可对秒数进行加减操作。每按一次功能键,光标依次从秒数移至年历数,当光标显示在何位置时,其他两个按键可对该位置的数值进行调整,调整结束,定时器开启。3. 硬件设计3.1. STC89C51(51单片机)STC89C51RC是采用8051核的ISP(In System Programming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含8K Bytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。STC89C51RC系列单片机是单时钟/机器周期(1T)的兼容8051 内核单片机,是高速/ 低功耗的新一代8051 单片机,全新的流水线/精简指令集结构,内部集成MAX810 专用复位电路0。具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选0。图3.1.1 89C51控制模块3.2. LCD-1602液晶显示屏LCD1602液晶显示器0是目前广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。不同厂家生产的LCD1602芯片可能有所不同,但使用方法都是一样的。为了降低成本,现在绝大多数制造商都直接将裸片做到本子上。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。图3.2.1 LCD1602显示模块1602液晶模块内部的控制器共有11条控制指令,如表所示:序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/Ds4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存储器地址0001字符发生存贮器地址8置数据存贮器001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM10要写的数据内容11从CGRAM或DDRAM读数表3.2.2 1602控制指令11读出的数据内容4. 软件设计4.1. 应用软件软件运行环境:KEIL UV4 PROTEUS 7.5本设计软件涉及KEIL UV4、STC烧录软件,由KEIL UV4编写C语言程序以及进行调试,由STC烧录软件将调试好的程序下载入单片机中。开始初始化单片机数据处理按键按下LCD-1602液晶显示判断调整条件4.2. 程序框图 图4.2.1 程序框图程序开始后,先进入初始化,定时器打开,LCD液晶显示模式设置,单片机循环进行数据处理,此时,LCD-1602显示时间。若按键按下,判断调整条件,经单片机处理后,液晶显示数据更换,以达到调整时间的目的。4.3. 使用说明按下功能键,进入时间、日期调整界面,依次按下可逐个调整秒、分、时、日、月、年。调整结束后,再次按下功能键可恢复时间界面。加数键,可以增加位数上的数值;减数键可减少位数上数值。增加和减少需要在时间调整下可以使用,在不调整时间的情况下,两个按键均无法使用。时间日期调整范围2000年1月1日00:00:00-2099年12月31日23:59:59。4.4. 注意事项该时钟是采用单片机及C语言逻辑控制的。缺少闰年2月29天的补偿功能。4.5. 调试结果如图4.5.1所示,当不进行操作时,时间正常运行;如图4.5.2所示当按下调整时间功能键时,时间暂停且光标开启,此时可增加或减少光标所在位的数值。 图4.5.1 时间运行界面图4.5.2 调整时间界面5. 收获经过本次的设计,深入了解了单片机I/O口的使用,学会使用数据手册来查阅LCD-1602的使用。对于按键扫描更加的了解。对单片机学习过程中的定时器,中断系统一级单片机各引脚的功能有了更加深入的了解。参考文献:1 李叶紫,等.MCS-51单片机应用教程M.北京:清华大学出版社,2004.2 张培仁.MCS-51单片机原理与应用M.北京:清华大学出版社,2003.3 朱华光.浅议LCD1602的编程技巧J.电脑知识与技术,2010,6(18).附录:附录A.硬件图附录B.主要程序20#include#includesbit RS = P22; /定义端口 sbit RW = P23;sbit EN = P24;sbit KEY_function=P34;sbit KEY_ADD=P35;sbit KEY_DEC=P36;sbit key4=P37;sbit DUAN=P26;/定义锁存使能端口 段锁存sbit WEI=P27;/ 位锁存#define RS_CLR RS=0 #define RS_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1#define DataPort P0unsigned char t,s,f,m,b,n,y,r;unsigned char flag=0;void DelayUs2x();void DelayMs();bit LCD_Check_Busy();void LCD_Write_Com();void LCD_Write_Data() ;void LCD_Clear(); void LCD_Write_String() ;void LCD_Write_Char(); void LCD_Init(); unsigned char KeyScan (void )if(!KEY_function) DelayMs(10);if(!KEY_function) flag+; while(!KEY_function); if(flag=1) TR1=0; LCD_Write_Com(0xC0+10); LCD_Write_Com(0x0f); if(flag=2) LCD_Write_Com(0xC0+7); if(flag=3) LCD_Write_Com(0xC0+4); if(flag=4) LCD_Write_Com(0x80+11); if(flag=5) LCD_Write_Com(0x80+8); if(flag=6) LCD_Write_Com(0x80+5); if(flag=7) flag=0; LCD_Write_Com(0x0c); TR1=1;if(flag!=0) if(!KEY_ADD) DelayMs(10); if(!KEY_ADD) while(!KEY_ADD); if(flag=1) m+; if(m=60) m=0; LCD_Write_Char(10,1,m/10+0x30); LCD_Write_Char(11,1,m%10+0x30); LCD_Write_Com(0xC0+10); if(flag=2) f+; if(f=60) f=0; LCD_Write_Char(7,1,f/10+0x30); LCD_Write_Char(8,1,f%10+0x30); LCD_Write_Com(0xC0+7); if(flag=3) s+; if(s=24) s=0; LCD_Write_Char(4,1,s/10+0x30); LCD_Write_Char(5,1,s%10+0x30); LCD_Write_Com(0xC0+4); if(flag=4) r+; if(r=32) r=1; LCD_Write_Char(11,0,r/10+0x30); LCD_Write_Char(12,0,r%10+0x30); LCD_Write_Com(0x80+11); if(flag=5) y+; if(y=13) y=1; LCD_Write_Char(8,0,y/10+0x30); LCD_Write_Char(9,0,y%10+0x30); LCD_Write_Com(0x80+8); if(flag=6) n+; if(n=100) n=0; LCD_Write_Char(5,0,n/10+0x30); LCD_Write_Char(6,0,n%10+0x30); LCD_Write_Com(0x80+5); if(!KEY_DEC) DelayMs(10); if(!KEY_DEC) while(!KEY_DEC); if(flag=1) m-; if(m=-1) m=59; LCD_Write_Char(10,1,m/10+0x30); LCD_Write_Char(11,1,m%10+0x30); LCD_Write_Com(0xC0+10); if(flag=2) f-; if(f=-1) f=59; LCD_Write_Char(7,1,f/10+0x30); LCD_Write_Char(8,1,f%10+0x30); LCD_Write_Com(0xC0+7); if(flag=3) s-; if(s=-1) s=23; LCD_Write_Char(4,1,s/10+0x30); LCD_Write_Char(5,1,s%10+0x30); LCD_Write_Com(0xC0+4); if(flag=4) r-; if(r=0) r=31; LCD_Write_Char(11,0,r/10+0x30); LCD_Write_Char(12,0,r%10+0x30); LCD_Write_Com(0x80+11); if(flag=5) y-; if(y=0) y=12; LCD_Write_Char(8,0,y/10+0x30); LCD_Write_Char(9,0,y%10+0x30); LCD_Write_Com(0x80+8); if(flag=6) n-; if(n=-1) n=99; LCD_Write_Char(5,0,n/10+0x30); LCD_Write_Char(6,0,n%10+0x30); LCD_Write_Com(0x80+5); return 0;/*主函数*/ void main() LCD_Init(); LCD_Clear();LCD_Write_String(5,0,King.G);DelayMs(500);LCD_Clear();DelayMs(500);LCD_Write_String(5,0,King.G);DelayMs(500);LCD_Clear();DelayMs(500);LCD_Write_String(3,0,2015-11-11);LCD_Write_String(4,1,08:00:00);while (1) KeyScan();void time()interrupt 3 TH1=0x3c; TL1=0xb0;t+;if(t=20) t=0;m+;if(m=60)m=0;f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论