万年历-毕业设计(带阴历带闹钟)(7)

2019-04-15 19:25

四川大学锦城学院本科毕业论文 基于单片机电子万年历的设计与实现

钟时修改闹钟的时间。进入修改界面后,弹起设置时是确定键,按下闹钟是闹钟的功能设置为有效(如果想再开闹钟的话,重新设置闹钟时间就可以了)。修改界面中,第一行是提示修改什么,第二行显示你要修改的内容的当前数据和你键入的数据。闹钟响了之后按下半分钟停止。 源程序参见附录B。 5.2程序调试与仿真结果

图5-2电子万年历仿真结果

5.2.1 DS1302电路调试

该电路包含DS1302芯片、主电源、备用电源、晶振等部分。在与单片机连接的过程中需要注意以下几点:

1、清楚DS1302与单片机连接的管脚。本设计定义为:DS1302的SCLK连接P2.1,I/O连接P2.2,RST连接P2.0;

2、注意电源正负极连接;

3、DS1302接32.768KHz的晶振。该晶振体型比较小,在焊接时要小心,注意不要将晶振引脚弄断。同时也要尽量使晶振与DS1302的X1、X2引脚近距离焊接。

27

四川大学锦城学院本科毕业论文 基于单片机电子万年历的设计与实现

4、编写DS1302的时钟/日历程序,只要求能够正确显示时间。烧录进单片机,检查电路电源正负极连接是否正确,检查P2.0和P2.1引脚接线是否正确,检查无误后可以上电检查。

设计中编写了一段时钟/日历显示程序,设置初始时间为14:28:00,初始日期为2011年4月11日。上电后LCD显示“22:52:00”,之后开始走时。观察8分钟之后,显示“23:00:00”,证明DS1302电路正确。

源程序见附录B。

5.2.2按键电路调试

本按键电路结构简单,调试起来容易。如果确保按键焊接正确,只需在DS1302的调试程序上加上一段日历显示子程序,并在主程序中写入:

if(b1==0) { if (jj==6) {

a[24]=b[6];

a[24]=a[24]&0x07; lcdwrite(j[jj]); lcdshuju(0);

delay(200); lcdwrite(j[jj]); lcdshuju(a[24]+0x30); delay(200); }

显示子程序原理与时钟显示子程序原理相同,该程序的功能是:设置按钮后,相应的设置位就开始闪烁,为了更直观的看到所要设置的位置。当设置键弹出后,LCD显示当前的时间、日期、和星期、温度等信息。

源程序见附录B。

5.2.3键盘子程序调试

依据设计要求,键盘子程序需要完成对时间/日历的校对、日期/温度的显示和闹铃的开关。为了便于显示子程序和闹铃子程序的调用,键以宏定义为b1、b2 、b3、b4、b5、b6例如:闹钟键检测。

If(b5==0)

28

四川大学锦城学院本科毕业论文 基于单片机电子万年历的设计与实现

{

for(i=0;i<12;i++) { }

if(num==12)bigclock=1; else num=0; lcdwrite(0x89+0x40); lcdshuju('&');}

if(a[i+12]==a[i])num++;

在调用闹铃子程序时,闹铃标志位为“&”,则开启闹铃,否则关闭闹铃。

6结 语

程序设计无疑是单片机学习中的重中之重,写不好程序就无法对单片机进行高效的

控制。

对于简单的程序而言,不需要事先画程序流程图,因为程序简单,条理分明。但对于功能稍微强大的程序来说,不画流程图就很容易走弯路,造成条理不清晰,思维混乱。

单片机可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。这种记录对分析长时间的连续测控系统结果,及查找异常数据出现的原因具有重要意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,需要DS1302 存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。若采用单片机计时,一方面存在时钟精度不高,易受环境影响,出现时钟混乱,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片DS1302,则能很好地解决这个问题。

29

四川大学锦城学院本科毕业论文 基于单片机电子万年历的设计与实现

附录

附录A 原理图

30

四川大学锦城学院本科毕业论文 基于单片机电子万年历的设计与实现

附录B LCD1602显示程序 #include #include\#include\#include\#define uint unsigned int #define uchar unsigned char

uint b[7];

//年月日时分秒

uchar code row1[]={%uchar code row2[]={\

uchar year1[12]={31,28,31,30,31,30,31,31,30,31,30,31};//平年 uchar year2[12]={31,29,31,30,31,30,31,31,30,31,30,31};//润年

uchar j[7]={0x82,0x85,0x88,0x81+0x40,0x84+0x40,0x87+0x40,0x8f};//LCD地址

uchar i,k,jj=0,w,clock=0,bigclock=0,c=0,num; //i循环数 k温度缓存 jj地址位 uint temp;

sbit b1=P3^0;//设置 sbit b2=P3^1;//上调 sbit b3=P3^2;//下调 sbit b4=P3^3;//转换 sbit b5=P3^4;//闹钟 sbit speaker=P3^5;

lcdscan() { for(i=0;i<6;i++) { lcdwrite(j[i]); lcdshuju(a[11-i*2]+0x30); lcdwrite(j[i]+0x01); lcdshuju(a[10-i*2]+0x30); } }

void key() { if(b1==0) { dsaddshuju(0x80,(a[1]<<4)+a[0]+0x80); while(b1==0)

31


万年历-毕业设计(带阴历带闹钟)(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:预防医学试题库及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: