多功能电脑时钟设计报告含正确C语言程序96分文档格式.doc
《多功能电脑时钟设计报告含正确C语言程序96分文档格式.doc》由会员分享,可在线阅读,更多相关《多功能电脑时钟设计报告含正确C语言程序96分文档格式.doc(36页珍藏版)》请在冰豆网上搜索。
③闹钟及报时功能(可选);
④显示星期(可选)。
3.设计参数
显示时间时,4位数码管显示,2位显示小时,2位显示分钟,第2位小数点0.5秒亮,0.5秒灭;
蜂鸣器报时时间以每生学号最末位确定。
二.实习任务的方案
2.1任务进度
①布置任务、分析任务、学习单片机的C51功能程序设计(3天)
②方案设计、使用Protel设计和绘制硬件原理图(1.5天)
③程序设计和调试(4.5天)
④设计验收、撰写报告(1天)
2.2系统分析
根据系统功能要求,可将系统组成结构分成四大部分:
①DS1302时钟芯片读数据写数据模块;
②数码管显示模块;
③按键设置调节时间模块;
④秒表功能模块。
硬件电路接线图如附录一,本系统采用DS1302时钟芯片,四位数码管用来显示年月日,星期,时分,以及秒和百分秒。
其中年月日,时分秒和星期采用DS1302的数据显示,秒表采用单片机定时中断实现。
本系统共用到四个按键,且均为独立对地按键,分别用于显示切换,修改切换,修改加一,修改减一,秒表启动暂停和数据清零。
2.3器件选择
选用STC89C51芯片,频率为11.0592MHz,由于系统要求显示年月日小时和分钟,采用四位LED数码管显示即可。
按键是用来设置时间或闹钟时间或启动秒表等功能的,设置三个按键:
显示切换模式键(key3)、修改数据键(key0)、加一键(key1)、减一键(key2)。
常见的LED显示具有清晰明亮的特点。
是显示接口也是绝大多数单片机应用系统必备的部件之一。
发光二极管组成的显示器是单片机应用产品中最常用的廉价输出设备。
它由若干个发光二极管按一定的规律排列而成。
当某一个发光二极管导通时,相应的一个点或一笔画被点亮,控制不同组合的二极管导通,就能显出各种字符。
常用的7段显示器的结构如图所示,发光二极管的阳极连在一起的称为共阳极显示器,阴极连在一起的成为共阴显示器。
1位显示器由8个发光二极管组成,其中7个发光二极管a~g控制7个笔画的亮或暗,另一个控制一个小数点的亮和暗,这种笔画的七段显示器能显示的字符较少,字符的形状有些失真,但失控简单,使用方便。
三、系统硬件设计
3.1单片机的最小系统
单片机功能系统图见附录1,。
单片机最小系统由STC89C51单片机、复位电路、晶振电路组成。
如图3.1所示
图3.1单片机最小系统图
3.2数码管、独立按键及DS1302时钟芯片电路的设计
在电子钟的输入部分,设置相应的置数功能,通过外部设备的输入,如按键,实现时间的切换。
除此之外,调整日期等时间也需要按键进行输入。
在选用输入端口时,将P0引脚与按键相连进行输入。
K1、K2、K3、K4分别表示设置切换键、数值加一键、数值减一、显示月和日键。
系统仿真电路图
DS1302与单片机连线图
3.3其他附属电路设计
按键设计,电频转换芯片的硬件电路如下图所示:
RS232串口通信及电源电路等设计,如图3.3所示
图3.3附属电路设计图
四、软件设计
4.1主程序设计
使用定时器0来定时,定时5ms,运用定时器的中断来实现这些功能,显示是用的数码管的动态扫描,每5ms扫描一位数码管,20ms循环一次。
设置一些标志位,实时时间显示的标志位,星期显示的标志位,闹铃时间显示的标志位,秒表显示的标志位,在不同的模式下,我们要使该模式下的标志位有效,从而进行此模式的显示,通过按键进行不同的操作。
每个标志位有效时,数码管显示的内容就不一样。
闹钟的实现是用一个子函数,每5ms调用一次函数,并把北京时间与设定的闹铃时间比较,如果相等就使蜂鸣器有效。
闹铃时间的长短可以用一个变量对秒计数,当计数值小于我们设定的值时,就是蜂鸣器有效,当大于等于设定的值时就关闭蜂鸣器。
整点报时或半点报时很好实现,在中断函数里,当分钟等于60时,蜂鸣器对应鸣叫相应点数,并且小时要自增1,当分钟等于30时,蜂鸣器鸣一次,分钟自增1,要使蜂鸣器有效,可用一个变量对秒计数,当秒等于我们设定的值时,就关闭蜂鸣器。
4.2系统操作功能设计
根据系统功能描述,可以分为:
北京时间功能、整点报时、闹铃功能、日期显示及秒表功能功能。
我们通过对K_Mode键按下的次数计数,用Mode计数,Mode的次数就代表了不同的模式,每个模式都有与之相对应的指示灯,每个模式的功能如下:
Mode0:
按键每按下时显示北京时间模式,此时,四个指示灯全灭,显示格式为:
小时.分钟(如:
07.35,为7点35分),按K_UP或者K_DN键对系统没影响,每到整点或半点时时,要进行相应点数的间隔蜂鸣报时(半点短鸣一次)。
Mode1:
按键按下一次时,进入修改北京时间的小时模式,四个指示灯依次为“亮灭灭灭”,按K_UP或者K_DN键对小时进行修改。
Mode2:
按键按下两次时,进入修改北京时间的分钟模式,四个指示灯依次为“灭亮灭灭”,按K_UP或者K_DN键对分钟进行修改。
Mode3:
按键按下三次时,进入修改闹铃时间的小时模式,四个指示灯依次为“灭灭亮灭”,按K_UP或者K_DN键对闹铃小时进行修改。
Mode4:
按键按下四次时,进入修改闹铃时间的分钟模式,四个指示灯依次为灭灭灭亮,按K_UP或者K_DN键对闹铃分钟进行修改。
Mode5:
按键按下五次时,进入年显示模式,四个指示灯依次为“亮亮灭灭”,显示格式为:
四位年(如20.12为当前年份为公元2012年),在此种模式下,按K_UP或者K_DN键对系统没影响。
Mode6:
按键按下六次时,进入月日显示模式,四个指示灯依次为“亮灭亮灭”,显示格式为:
月日(如07.05为当前日期为7月5日),在此种模式下,按K_UP或者K_DN键对系统没影响。
Mode7:
按键按下七次时,进入秒表模式,四个指示灯依次为“亮灭灭亮”,显示格式为:
秒百分秒(如05.90为当前秒表计时到5秒900毫秒),在此种模式下,K_UP键设为用来启动/暂停秒表、K_DN键设为用来对秒表进行清零。
Mode8:
按键按下八次时,进入闹钟选择模式,四个指示灯依次为“亮亮亮灭”,显示格式为:
CL01/00,"
CL.00"
表示贪睡闹铃功能关闭,"
CL.01"
表示贪睡闹铃功能开启,按UP或DN键可在00或01间循环选择;
在贪睡闹铃功能关闭时,可按任意键停止当前闹钟,或不按键,则闹钟1分钟,以后再不响。
在贪睡闹铃功能开启时,如按下除UP键外的任意键,停止当前闹钟,如不按键,则闹钟1分钟;
当过5分钟后,闹钟又会重新响起,如此循环,只有按下UP键时,才能停止闹钟以后再不响。
在此种模式下,K_UP键设为用来启动/暂停秒表、K_DN键设为用来对秒表进行清零。
Mode9:
按键按下九次时,进入整点报时选择模式,四个指示灯依次为“亮亮亮亮”,显示格式为:
BS01/00,"
BS.00"
表示整点报时功能关闭,01表示报时功能开启,按UP或DN键可在00或01间循环选择。
4.3主程序voidmain()
图4.1主程序功能流程图
4.4主程序设计
主程序采用定时器0对程序进行扫描执行。
分别执行DS1302芯片初始化子程序,写数据子程序,将最初的值写入芯片中,采用while循环循环执行键盘扫描子程序。
main()
{
TMOD=0x01;
//使用模式1,16位定时器
TH0=(65536-10000)/256;
//给定初值
TL0=(65536-10000)%256;
EA=1;
//总中断打开
ET0=1;
//定时器中断打开
TR0=1;
//定时器开关打开
Ds1302_Init();
Ds1302_Write_Time();
while
(1)
{
keyscan();
if(Btread==0)
{Btread=1;
Ds1302_Read_Time();
}
display();
}
4.5DS1302子程序设计
此子程序分为初始化程序,读数据程序,写数据程序,一些数据程序为例;
voidDs1302_Write_Byte(unsignedcharaddr,unsignedchard)
CE=0;
_nop_();
SCLK=0;
_nop_();
CE=1;
Write1302(addr);
Write1302(d);
IO=1;
SCLK=1;
}
4.6时间调整子程序
时间调整子程序采用的是对key1按的次数不同来进行对年月日时分及星期的设置。
voidzongshi(void)
if(!
key)
{
if(btx==0)
{
if(!
{
btx=1;
k++;
}}}else{btx=0;
}}k=1时,调整年份,key1为加,key2为减
voidkeyscan()k=2时,调整月份,key1为加,key2为减
{k=3时,调整日份,key1为加,key2为减
display();
k=4时,调整星期,key1为加,key2为减
if(!
{
if(btx==0)
{
if(!
{
btx=1;
k++;
4.7按键切换子程序
voidtiaoshidisplay()
if(z==15)
z=0;
switch(k)
case1:
bt1=~bt1;
break;
//年
case2:
bt2=~bt2;
bt1=0;
//月
case3:
bt3=~bt3;
//日
case4:
bt