皖西学院 学生课程设计项目
图5.1所示。当打开电源开关时,各个模块初始化,然后显示固定在液晶上的用于美化显示的图形。之后读取温度信息,定时器0初始化,读取时间等信息,冒号闪烁,读取星期、农历信息,显示所有信息,结束一次循环。在实际运行时,显示完所有信息后,将返回到读取温度子函数前再往循环下执行。
图4.1 主程序流程图
4.2 键盘服务子程序设计
在主程序中,进入键盘服务子程序后,开始扫描键盘情况,如果设置键没有键按下或是按下次数K=K=0,则本次扫描结束;若设置键按下次数K=K=1,则扫描加减键是否按下,若按下则可进行加减调节秒;若设置键按下次数K=K=2,则可通过加、减键调节分;若设置键按下次数K=K=3,
11
皖西学院 学生课程设计项目
则可通过加、减键调节时;若设置键按下次数K=K=4,则可通过加、减键调星期;若设置键按下次数K=K=5,则可通过加、减键调节天;若设置键按下次数K=K=6,则可通过加、减键调节月;若设置键按下次数K=K=7,则可通过加、减键调节年;设置键按下次数K=K=8,将回到初始显示界面。在次扫描过程中,如果检测到跳出键按下,则直接回到显示界面。
图4.2 独立键盘服务流程图
4.3 LCD显示子程序设计
在LCD显示子程序中,初始化后,从LCD中读状态字,判断LCD是否忙状态,不是则可向LCD写控制命令,再写数据,即显示数据。
12
皖西学院 学生课程设计项目
图4.3 LCD显示流程图
5系统测试
(1)测试原理:在系统设计中,以MCS-51单片机为核心的万年历,将18B20采集到的温度传送到单片机经过换算转化成对应的数值由液晶屏显示,同时将时钟芯片DS1302的信号送入单片机,经单片机处理后通过1602一起显示。以protues7为仿真平台,画出实物图,进行仿真操作。使用C语言编程编写了系统应用程序;包括主程序模块、显示模块、温度测试模块。
(2)测试方法:以成功显示时间、日期、温度且可调为最终目的。首先,主要是在仿真软件中进行初步测试,检测电路的设计问题。然后在实物上,检测电路的焊接以及有没有错误连线等问题。
(3)测试仪器:万用表,计算机。
(4)测试结果:通过按键,实现其按键所对应的功能,并观察测试结果,对设计进一步的进行校正和对实现功能的可靠性的确认,并记录观察结果。本设计测试结果成功完成了设计要求,达到设计目的。
13
皖西学院 学生课程设计项目
附 录
附录一 器材元件清单
元件器材:LCD1602 一个
单片机STC89C52 一个 滑动变阻器 DS1302 底座 万用版 电池 电池盒 晶振12MHZ 18B20 32768Hz的晶振 30pF的电容 10k的电阻 1k的电阻 Button按键 导线 焊锡
附录二 源程序
#include
sbit DS1302_CLK = P1^7; //sbit DS1302_IO = P1^6; //sbit DS1302_RST = P1^5; //sbit wireless_1 = P3^0;
实时时钟时钟线引脚实时时钟数据线引脚实时时钟复位线引脚一个 一个
一个 若干 三个 一个 一个 一个
一个 二个 若干 若干 四个
若干 若干 14
皖西学院 学生课程设计项目
sbit wireless_2 = P3^1; sbit wireless_3 = P3^2; sbit wireless_4 = P3^3; sbit ACC0 = ACC^0; sbit ACC7 = ACC^7;
char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; //秒,分,时到日,月,年位闪的计数 sbit Set = P2^0; //模式切换键 sbit Up = P2^1; //加法按钮 sbit Down = P2^2; //减法按钮
sbit out = P2^3; //立刻跳出调整模式按钮 sbit DQ = P1^0; //温度传送数据IO口 char done,count,temp,flag,up_flag,down_flag; uchar temp_value; //温度值 uchar TempBuffer[5],week_value[2]; void show_time(); //液晶显示程序
/***********1602液晶显示部分子程序****************/
//Port Definitions**********************************************************
sbit LcdRs sbit LcdRw
= P2^5; = P2^6;
sbit LcdEn = P2^7; sfr DBPort = 0x80; //内部等待函数
**************************************************************************
unsigned char LCD_Wait(void) { LcdRs=0; LcdRw=1; LcdEn=1; LcdEn=0; return DBPort;
//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
_nop_(); _nop_();
}
15