基于郭天祥单片机数码管的电子钟(含闹钟、整点报时)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机数码管的电子钟(郭天祥系列单片机)
1、功能说明
(1)本电子钟可以显示当前时刻、年月日和闹钟时刻。不同
时间的显示可以用key4来切换。
(2)、独立键盘key1-key4(左到右)调节不同功能,7段数
码管显示。
(3) 整点提示功能:当时间为整点时,蜂鸣器会滴滴滴响,响20秒;
(4) 闹铃功能:本程序有闹铃功能,当定时时间到时,闹铃会滴滴滴报警,报警30秒;
(5)附加功能:当在闹铃和整点时,8个发光二极管会闪亮;
(6)时、分、秒之间和年、月、日之间也是用“.”分割。
2、键盘控制
(1)key1-键移动调整单位,每按一次移动一个单位,可调整时分秒、年月日和闹钟时间。比如:在显示时分秒时,按下key1键,可通过key2和key3对‘秒’加减;再按一下key1,可对‘分’加减;再按一下key1,可对‘时’加减;再按key1,时间开始走动(2)key2-加1;key3-减1;
(3)key4-键切换时分秒、年月日和闹铃时间的显示。比如:当前为时分秒,按一下key4,则显示年月;再按一下,则显示闹铃时间;再按一下,则显示时分秒时间。
附录:C语言程序
//设计项目:带闹铃的电子钟
//功能: key1-键:开始/调时分秒/调年月日/调定时
// key2-键:加1
// key3-键:减1
// key4-键:切换页面
#include
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit bear=P2^3;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,
0x79,0x71};
uchar sec1,min1,hour1,year1,mon1,day1,temp1,temp2,sec2,min2,hour2; void keyscan();
void display(uchar hour,uchar min,uchar sec);
void delay(uint z)
{
uint x,y;
for(x=0;x for(y=0;y<110;y++); } void init() { TMOD=0X02; TH0=6; TL0=6; EA=1; ET0=1; TR0=1; hour1=00; min1=00; sec1=00; year1=12; mon1=03; day1=10; } void display(uchar hour,uchar min,uchar sec) { uchar s1,s2,m1,m2,h1,h2; s2=sec/10; s1=sec%10; m2=min/10; m1=min%10; h2=hour/10; h1=hour%10; dula=1; P0=table[h2]; dula=0; P0=0XFF; wela=1; P0=0XFE; delay(1); dula=1; P0=table[h1]+0x80; dula=0; P0=0XFF; wela=1; P0=0XFd; delay(1); dula=1; P0=table[m2]; dula=0; P0=0XFF; wela=1; P0=0XFb; delay(1); dula=1; P0=table[m1]+0x80; dula=0; P0=0XFF; wela=1; P0=0XF7; delay(1); dula=1; P0=table[s2]; dula=0; P0=0XFf; wela=1; P0=0Xef; delay(1); dula=1; P0=table[s1]; dula=0; P0=0XFF; wela=1; P0=0Xdf; delay(1); } void keyscan() { if(key1==0) { delay(10); if(key1==0) { //TR0=0; temp1++; if(temp1==4) { temp1=0; TR0=1; } while(!key1) switch(temp2) { case 0:display(hour1,min1,sec1);break; case 1:display(year1,mon1,day1);break; case 2:display(hour2,min2,sec2);break; } } } if(key2==0) { delay(10);