1 仿真实验环境
1.1采用 Proteus6_9_SP5实现单片机及外围器件的仿真
如图:
1.2使用Keil uVision3编写本日历程序(C语言)
如图:
2 原理图
2.1各部分功能实现:
1.以AT89C52作为控制核心,通过P0口连接LM016L液晶的并行数据输入/输出端进行显示数据以及命令的发送与接收。P2.0、P2.1和P2.2分别连接液晶的数据/命令选择端、读/写控制以及使能端。通过对这三个端口的操作,来实现液晶的正确显示。
2.DS18B20数字温度传感器以单总线的方式连接到P2.3口,通过正确的时序操作,与单片机进行双向通信,把温度值以串行数字形式发送给单片机。再正确显示在LCD上。
3.LED灯连接P2.4口,在相应的时间或温度触发下通过电平的高低变化闪烁。
4.单片机的P2.5、P2.6、P2.7分别连接DS1302时钟芯片的复位端、时钟信号以及I/O端。在相应时序信号的控制下,读出芯片中的内容,并显示在LCD上。
5.该日历的功能操作通过连接在P3.0~P3.3的四个按键实现,四个按键分别为:进入/退出模式键、功能选择键、时加/温度加一键、分加/温度减一键。
6.因为P0口没有上拉电阻,所以加了排阻。
3 程序分析及代码
3.1程序分析:
3.1.1 程序的优点:
1.以模块化的形式把程序分为若干个独立部分。
2.在程序中使用了指针、数组、函数等结合的方法,简化了部分程序。
3.程序中首次使用了二维字符数组的相关操作。
3.1.2 程序的缺点:
1.程序总体上写的不够简练。
2.程序的部分功能操作麻烦,如调时或闹钟设置时对时、分的操作只能加。
3.程序的稳定性有待于提高。
4.过多的变量、标志位的定义降低了程序的可读性。
3.1.3 总结:
通过该日历程序的编写,自身发现了许多的问题,现总结如下:
1.在编写程序的过程中一定要做好程序的备份。
2.在编写某功能函数之前要想好流程再写,最好写出流程图。
3.一定要多写注释,不然连自己都读不懂自己的程序。
4. 在编写该日历程序过程中,首次出现了内存不够的情况,以后需引起注意。
3.2源代码:
3.2.1 Calendar.c程序文件:
/******使用LCD1602、DS1302时钟芯片、DS18B20温度传感器完成该日历*******/
#include<reg52.h>
//以下的顺序不能任意放
#define uint unsigned int //宏定义
#define uchar unsigned char
#include"LM016L.h"
#include"DS1302.h"
#include"DS18B20.h"
#include"KeyScan.h"
#include"MODE.h"
#include"OPEN.h"
////////以下为几个标志位///////////
// flag,select,alarm,temperature,limit
/*分别为模式标志位、功能选择标志位、闹钟、温度正负标志位以及温度上限值 (整型)
其中alarm有三种状态:0为禁止进入,1为允许进入,2为正在闹钟模式下 */
void open(); //上电显示
void KeyScan(); //键盘扫描
void SetTime_Mode(); //调时
void SetRing_Mode(); //闹钟设置
正则匹配年月日时分秒void SetTemp_Mode(); //温度上限设置模式
/******************************日历主函数************************************/
void main()
{
init(); //初始化LCD
Set_RTC(l_tmpdate1);//初始化时钟芯片
open(); //上电显示函数
write_com(0x01); //清屏
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论