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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

if(key2==0)

{

if(temp2==0)

{ TR0=0;

switch(temp1)

{

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

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

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

}

相关文档
最新文档