基于郭天祥单片机数码管的电子钟(含闹钟、整点报时)

基于郭天祥单片机数码管的电子钟(含闹钟、整点报时)
基于郭天祥单片机数码管的电子钟(含闹钟、整点报时)

基于单片机数码管的电子钟(郭天祥系列单片机)

功能说明

(D本电子钟可以显示当前时刻、年月日和闹钟时刻。不同时间的显示可以用key4来切换。

(2)、独立键盘key—key4(左到右)调节不同功能,7段数

码管显示。

(3)整点提示功能:当时间为整点时,蜂鸣器会滴滴滴响,响20秒;

(4)闹铃功能:本程序有闹铃功能,当定时时间到时,闹铃会滴滴滴报警,报警30秒;

(5)附加功能:当在闹铃和整点时,8个发光二极管会闪亮;

(6)时、分、秒之间和年、月、日之间也是用分割。

2、键盘控制

(1)key1-键移动调整单位,每按一次移动一个单位,可调整时分秒、年月日和闹钟时间。比如:在显示时分秒时,按下keyl 键, 可通过key2和key3对'秒'加减;再按一下keyl,可对"分'加减;再按一下keyl,可对"时'加减;再按keyl,时间开始走动

(2)key2-加 1 ; key3-减 1;

(3)key4-键切换时分秒、年月日和闹铃时间的显示。比如:当前为时分秒,按一下key4,则显示年月;再按一下,则显示闹铃时间;再按一下,则显示时分秒时间。

附录:C语言程序

〃设计项目:带闹铃的电子钟

//功能:keyV键:开始/调时分秒/调年月日/调定时

// key2 ■键:加 1

// key3-键:减 1

// key4-键:切换页面

#in clude

#define uchar unsigned char

#define uint unsigned int

sbit dula=P2A6;

sbit wela=P2A7;

sbit key1=P3A4;

sbit key2=P3A5;

sbit key3=P3A6;

sbit key4=P3A7;

sbit bear=P2A3;

uchar code table[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,

0x79,0x71};

uchar sed ,hour1 ,year1 ,mon1 ,day1,tempi ,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;

mini =00;

sed =00;

year1=12;

mon1=03;

day1=10;

void display(uchar hour,uchar min,uchar sec) { uchar s1 ,s2,m15m2,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;

PO=OXFf;

wela=1;

P0=0Xef;

delay(1);

dula=1; PO=table[s1J; dula=0; P0=0XFF; wela=1; PO=OXdf; delay(1);

}

void keyscan()

if(key1 ==0)

delay(10); if(key1 ==0)

//TR0=0; tempi++; if(temp1 ==4)

{

t

e

m

p

i

=

;

TR0=1;

while(!key1)

switch(temp2)

{

case 0:display(hour1,sec1 );break; case

1:display(year1 ,mon1 ,day1 );break; case

2:display(hour2,min2,sec2);break;

if(key2==0)

{

delay(10); if(key2==0)

{ if(temp2==0) { TR0=0;

switch(templ)

{

case 1:sed ++;if(sec1 ==60)sec1 =O;break;

case 2:min1 ++;if(min1 ==60)min1 =O;break;

case 3:hour1 ++;if(hour1 ==24)hour1 =O;break;

while(!key2) display(hour1 ,min1 ,sec1);

if(temp2==1) { TR0=1;

switch(templ)

case 1:day1 ++;if(day1==31 )day1=1 ;break; case 2:mon1 ++;if(mon1

==13)mon1 =1 ;break;

case 3:year1 ++;if(year1 ==100)year1 =0;break; } while(!key2)

display(year1 ,mon1 ,day1);

if(temp2==2) { TR0=1;

switch(templ)

case 1:sec2++;if(sec2==60)sec2=0;break;

case 2:min2++;if(min2==60)min2=0;break;

case 3:hour2++;if(hour2==24)hour2=0;break; }

while(!key2)

display(hour2,min2,sec2);

if(key3==0)

{

delay(10); if(key3==0)

{

if(temp2==0)

{ TR0=0;

switch(templ)

{

case 1:if(sec1 ==0)sec1 =60;sec1 ~;break;

case 2:if(min1 ==0)min1 =60;min1 -;break;

case 3:if(hour1 ==0)hour1 =24;hour1 -;break; } while(!key3)

display(hour1 ,min1 ,sec1);

if(temp2==1)

{ TR0=1;

switch(templ)

{

case 1:if(day1==1 )day1=31 ;day1-;break;

case 2:if(mon1==1 )mon1 =13;mon1 ?-;break;

case 3:if(year1 ==0)year1 =100;year1 -;break; } while(!key3) display(year1 ,mon1,day1);

}

if(temp2==2)

{ TR0=1;

switch(templ)

{

case 1:if(sec2==0)sec2=60;sec2-;break;

case 2:if(min2==0)min2=60;min2-;break;

case 3:if(hour2==0)hour2=24;hour2-;break; } while(!key3)

display(hour2,mi n2,sec2);

if(key4==0)

delay(10); if(key4==O)

tempi =0;

temp2++; if(temp2==3)

temp2=0;

while(!key4) switch(temp2)

{

case 0:display(hour1 ,min1 ,sec1);break; case

1:display(year1 ,mon1 ,day1 );break;

case 2:display(hour2,min2,sec2);break;

switch(temp2)

{

case 0:display(hour1 ,min1 ,sec1 );break;

case 1:display(year1 ,mon1 ,day1 );break; case

2:display(hour2,min2,sec2);break;

void alarm()

{

uint i;

if((hour1==hour2&&min1==min2&&(sec1 >=sec2&&sec1

{

bear=~bear;

P1=~P1;

switch(temp2)

{

case 0:display(hour1,mi,sec1 );break;

case 1:display(year1 ,mon1 ,day1);break;

case 2:display(hour2,min2,sec2);break;

}

delay(30);

}

bear=1;

P1=Oxff;

void main()

{

init();

while(1)

{

keyscan();

{

if (key 1 ==0 || key2==0 || key3==0 || key4==O )

Bear=0

}

alarm();

void time1()interrupt 1

{

uint m;

m++;

if(m==3686)

{

m=0;

sec1++;

if(sec1 ==60)

{

sec1=0;

min1++;

相关主题
相关文档
最新文档