图(9) 按键电路
6、显示电路
1602液晶也叫1602字符型液晶 它是一种专门用来显示字母、数字、符号等的点阵型液晶模块 它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。显示电路采用LCD1602液晶显示,如图(10)所示,图中只画出了其相应的接口,3脚用于调节LCD1602的背光,4、5、6为LCD1602的控制口,用于控制其写入或是读出指令,7至14脚为LCD1602的数据口,将数传送到LCD1602中。
图(10) LCD1602显示电路
LCD1602的特性
+5V电压,对比度可调; 内含复位电路;
16 / 53
提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能; 有80字节显示数据存储器DDRAM;
内建有160个5X7点阵的字型的字符发生器CGROM,8个可由用户自定义的5X7的字符发生器CGRAM;
基本操作时序:
读状态:输入:RS=L,RW=H,E=H;输出:DB0~DB7=状态字 ;
写指令:输入:RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码 ;输出:无。 读数据:输入:RS=H,RW=H,E=H;输出:DB0~DB7=数据 ;
写数据:输入:RS=H,RW=L,E=下降沿脉冲,DB0~DB7=数据 ;输出:无。 LCD1602的各种指令不再一一说明。
流程图与软件设计:
1、程序流程图
主程序首先初始化定时器、LCD1602及DS1302,然后就开始查询按键,有键按下则开始调整时间和日期,若没有按下,则执行下面的时间、日期的显示,最后依次循环这些相同的操作,相应流程图如图(11)所示:
17 / 53
图(12)程序流程图
按键的检测是通过中断的办法来实现,利用按键进行间调整。 K1按下则开始设置时间及日期,同时在第一行最右端显示被选择的对象,第一次按下K1时,设置年份,若按下K3,则是减1操作,按下K2是加1操作,设置好年后,第二次按下K1时,则是设置月份,按K3减,按K2则加1,依次循环下去,则可以将时间和日期设置完毕,K4是确定键,设置好按下即可保存设置了。 2、软件设计
软件总设计:主程序首先对系统环境初始化,设置定时器T0工作模式为16位定时/计数器模式,置位总中断允许位EA,并对键盘端口置位,再对LCD1602初始化,DS1302初始化。接着扫描键盘,在键盘程序里面是对时间、日期及闹钟的调整,最下面是时间的显示。
软件程序编写:软件程序编写的好坏直接影响着系统运行情况的良好。因本程序涉及的模块较多,所以程序编写也采用模块化设计,C语言具有编写灵活、移植方便、便于模块化设计的特点,所以本系统的软件采用C51编写。
具体程序见附件一:程序 3、软件调试
在软件调试过程中,当调节时间和日期后,单片机上电后更新的是PC的时间,后来查找资料发现,是设置ds1302的问题,
对于开发板上的液晶一般RW都接的地,故不需要读液晶状态,也不需要读忙,但在仿真中还是加上了这一部分。
还有一个问题,在按键操作时有时会出现功能不稳定,这是由于按键存在抖动,所以后来加个去抖动的延时后在判断,基本就可以解决问题,
整体电路与仿真结果分析:
电子万年历硬件电路图及仿真如图(13)所示,系统由AT89C52单片机,按键扫描电
18 / 53
路、显示电路、时钟电路、晶振电路、复位电路及电源指示电路。
仿真正确显示了时间,在LCD1602中正确显示了当前日期、时间,通过按按键K1,就可以开始设置时间,依次按K1依次在年、月、日、时、分之间切换,,按K2键用于加1操作,K3键用于减1操作,K4是确定按钮。仿真正确显示了时间和日期,符合设计的要求。
图(13) 电子万年历硬件电路图
结论与心得:
在这学期的课程序设计中,收获知识的同时,还收获了阅历,收获了成熟,通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、 动手制作的能力,在各种其它能力上也都有了提高。更重要的是,在课程序设计里,我们学会了很多学习的方法,知道了理论和实践的巨大差别。而这是以后最实用的,真的是受益匪浅。要面 对社会的挑战,只有不断的学习、实践,再学习、再实践。同时在与老师和同学的交流过程中,互
19 / 53
动学习,将知识融会贯通。通过自己的努力,做出了一个万年历,对以后的学习是一个莫大的鼓舞,激起了我的学习兴趣和开发创新思维。
参考文献
图书类:[1] 张毅坤 陈善久, 单片微型计算机原理及应用 西安电子科技大学出版社
[2] 张毅刚,,彭喜元,单片机原理与应用设计 电子工业出版社 [3] 赵建领 薛园园 ,零基础学单片机C语言程序设计 机械工业出版社 [4] 周向红 51单片机课程设计 华中科技大学出版社,
[5] 郭天祥 51单片机C语言教程-入门,提高,开发,拓展全攻略, 电子工业出版社 [6] 赵亮 侯国锐. 单片机C语言编程与实例 人民邮电出版社
附实验源程序: #include
sbit IO= P1^0; //DS1302数据线 sbit SCLK = P1^1; //DS130时钟线 sbit RST = P1^2; //DS1302复位线
sbit RS = P2^0; sbit RW = P2^1; sbit EN = P2^2; sbit K1=P3^4;
//LCD数据/命令选择端 //LCD读/写控制 //LCD使能端 //选择
20 / 53