数字电子时钟程序与仿真

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字电子时钟程序

【闹铃(持续5s),整点报时(几点报几下,每两下之间隔间2s,每声持续2s)】

程序:

#include

#include

#define uchar unsigned char

#define uint unsigned int

//此表为LED 的字模, 共阴数码管0-9 -

uchar code dispcode[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制

/*定义并初始化变量*/

sbit key1=P3^0;

sbit key2=P3^1;

sbit key3=P3^2;

sbit key4=P3^3;

sbit buzz=P1^3;

uchar mstcnt=0;//定时器计数,定时50ms,mstcnt满20,秒加1

uchar seconde1=0;

uchar bjcs;

uchar minite1=0;

uchar hour1=7;

uchar seconde2=0;

uchar minite2=0;

uchar hour2=8;

uchar temp1=0;

uchar temp2=0;

uchar count1,flag,temp;

/*函数声明*/

void delay(uint z); //延时子程序

void time_pro( ); //时间处理子程序

void display(uchar hour,uchar minite,uchar seconde); //显示子程序

void keyscan( ); //键盘扫描子程序

void zhengdian();

void dinshi();

void delay(uint z)

{

uint x,y;

for(x=0;x

for(y=0;y<110;y++);

}

void time_pro(void) /*时间处理子程序*/

{

if(seconde1==60)

{

seconde1=0;

minite1++;

if(minite1==60)

{

minite1=0;

hour1++;

if(hour1==24)

{

hour1=0;

}

}

}

}

void display(uchar hour,uchar minite,uchar seconde) /*显示子程序*/ {

uchar h1,h2,m1,m2,s1,s2;

s2=seconde/10;

s1=seconde%10;

m2=minite/10;

m1=minite%10;

h2=hour/10;

h1=hour%10;

P2=0XFE; //1111 1110

if(temp1==1) //功能选项,通过点提醒来调节相应位的时间P0=dispcode[s1]|0x80; //点提醒

else

P0=dispcode[s1];//秒个位

delay(1);

P2=0XFD;//1111 1101

P0=dispcode[s2];//秒十位

delay(1);

P2=0XFB; //1111 1011

P0=dispcode[10];//间隔符-

delay(1);

P2=0XF7; //1111 0111

if(temp1==2)//

P0=dispcode[m1]|0x80;

else

P0=dispcode[m1];//分个位

delay(1);

P2=0XEF; //1110 1111

P0=dispcode[m2];//分十位

delay(1);

P2=0XDF; //1101 1111

P0=dispcode[10];//间隔符-

delay(1);

P2=0XBF; //1011 1111

if(temp1==3)

P0=dispcode[h1]|0x80;//时个位

else

P0=dispcode[h1];

delay(1);

P2=0X7F; //0111 1111

P0=dispcode[h2];//时十位

delay(1);

}

void keyscan(void) /*键盘扫描子程序*/

{

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,minite1,seconde1);break;

case 1:display(hour2,minite2,seconde2);break;

}

}

}

if(key2==0)

{

delay(10);

相关文档
最新文档