- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数字电子钟说明书汇
数字电子钟说明书
姓名:
学号:
指导老师:
时间:2011年12月7日星期三
数字电子钟说明书
一、电子钟功能介绍
可调整运行的电子钟具有三种工作状态:“P.”状态、运行状态、调整状态。
(1)、“P.”状态,依靠上电或者复位键进入,在此状态下,按B、C、D键均无效,按A键有效,进入运行状态;
(2)、运行状态,按奇数次A键进入,在此状态下,按B、C、D键均无效,只有按A键有效,按下A键后,退出运行状态,进入调整状态;
(3)、调整状态,按偶数次A键进入,在此状态下,按B、C、D键均有效,如按下A键,则推出调整状态,进入运行状态;B、C、D分别为调时、分、秒,分别使之加1;调整后,按A键退出调整状态。
二、实现时钟计时的基本方法
(1)计数初值计算:
把定时器设为工作方式1,定时时间为50ms,则计数溢出20次即得时钟计时最小单位秒。
假设使用T/CO,方式1,50ms定时,fosc=12MHz。
则初值X满足
(2)采用中断方式进行溢出次数累计,计满20次为秒计时(1秒);
(3)从秒到分和从分到时是通过累计加和数值比较实现。
三、电子钟的时间显示
电子钟的时钟时间在六位数码管上显示,因此,在内部RAM中设置显示缓冲区共8个单元。
LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1 37H 36H 35H 34H 33H 32H 31H 30H 时十位 时个位 分隔 分十位 分个位 分隔 秒十位 秒个位
四、电子钟的启、停及时间调整
电子钟设置4个按键,通过程序控制来完成电子钟的启、停及时间调整。
A键控制电子钟的启、停;
B键调整时;
B键调整分;
B键调整秒。
五、电子钟电路仿真图:
六、电子钟元件清单:
元件名称 规格型号 数量(个) 单片机 AT89C52 1 显示驱动芯片 74LS245 2 8位一体的共阳LED
显示器 7SEG-MPX8-CA-BLUE 1 晶振 12MHz 1 无极电容 1nF 2 有极电容 1n 1 按键 BUTTON 5 电阻 1K 1 电阻 10K 4 限流电阻 10K 8 排阻 RESPACK-8 1 万能板 小 1
七、电子钟程序流程框图
1、主程序流程图:
2、按键子程序流程图
3、中断服务子程序流程图
4、显示子程序流程图
八、电子钟程序清单
#includereg52.h
unsigned int start;
unsigned int count=0;
unsigned char fg;
unsigned char c[]={
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char sec,min,hour;
sbit sec1=P2^7;
sbit sec2=P2^6;
sbit min1=P2^4;
sbit min2=P2^3;
sbit hour1=P2^1;
sbit hour2=P2^0;
sbit a=P2^5;
sbit b=P2^2;
sbit key_A=P1^0;
sbit key_B=P1^1;
sbit key_C=P1^2;
sbit key_D=P1^3;
void delay(unsigned int t)
{
for(t;t0;t--);
}
void display()
{
P2=0xff;
P0= c[sec%10];
sec1=0;
delay(15);
sec1=1;
P0=c[sec/10];
sec2=0;
delay(15);
sec2=1;
P0=c[min%10];
min1=0;
delay(15);
min1=1;
P0=c[min/10];
min2=0;
delay(15);
min2=1;
P0=c[hour%10];
hour1=0;
delay(15);
hour1=1;
P0=c[hour/10];
hour2=0;
delay(15);
hour2=1;
P0=0x40;
a=0;
delay(10);
a=1;
P0=0x40;
b=0;
delay(10);
b=1;
}
void Intl()
{
unsigned char ts;
P0=0xf3;
P2=0xfe;
for(ts=0;ts12;ts++)
delay(9999);
sec=0,min=0,hour=0;
}
void keyA()
{
if(key_A==0)
{display();
delay(30);
if(key_A==1
文档评论(0)