基于STC89C52的电子时钟的设计(有闹钟调时间)

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

单片机课程设计

基于STC89C52的电子时钟的设计

电路图

程序:

#include

sbit beep=P1^0; //蜂鸣器

sbit l1=P1^1; //第一个红灯

sbit l2=P1^2; //第一个绿灯

sbit w4=P1^4; //第1位

sbit w3=P1^5; //第2位

sbit w2=P1^6; //第3位

sbit w1=P1^7; //第4位

sbit k1=P3^2; //按键1 +

sbit k2=P3^3; //按键2 —

sbit k3=P3^6; //按键3 时分调整

sbit k4=P3^7; //按键4 功能选择秒表闹钟时间

unsigned int a,b,c,d,e,f,num,num1,num2,num3,sum;

unsigned char code table[]={0xc0 ,0xf9,0xa4,0xb0,0x99, //15-i

0x92,0x82,0xf8,0x80,0x90}; //0011 1111 1100 0000 void keyscan();

void sound();

void time();

void display(); // 时间显示

void display2(); // 秒表显示

void delay(unsigned int t)

{unsigned int i,j;

for(i=t;i>0;i--)

for(j=110;j>0;j--);

}

void init()

{

num=45;

num2=59;

num3=11;

TMOD=0x11;

TH1=(65536-45872)/256;

TL1=(65536-45872)%256;

EA=1;

ET1=1;

TR1=1;

beep=0;

delay(300);

beep=1;

delay(500);

}

void main()

{

init();

while(1)

{

keyscan();

display();

time();

}

}

void sound()

{

beep=0;delay(100);beep=1;

}

void time()

{

if(num==59) //整点报时 2 miao {

beep=0;

}

else if(num==0) //整点报时

{

beep=1;

}

}

void keyscan() //按键检测

{

if(k3==0)

{

TR1=0;

sum++;

delay(30);

}

switch(sum)

{

case 1: if(k1==0)

{num2++;

sound(); //蜂鸣叫

while(!k1)

if(num2==60)

{num2=0;

}

break;

}

if(k2==0)

{num2--;

sound(); //蜂鸣叫

while(!k2)

if(num2==-1)

{num2=59;

}

break;

}

break;

case 2: if(k1==0)

{num3++;

sound(); //蜂鸣叫

while(!k1)

if(num3==24)

{num3=0;

}

break;

}

if(k2==0)

{num3--;

sound(); //蜂鸣叫

while(!k2)

if(num3==-1)

{num3=23;

}

break;

}

break;

case 3: sum=1;

TR1=1;

break;

}

if(k4==0)

{

P0=table[0];

w1=0;

w2=0; //初始化

w3=0;

w4=0;

while(1)

{

display2();

}

}

}

void display()

{

a=num/10;

b=num%10;

c=num2/10; //时分秒的个位和十位d=num2%10;

e=num3/10;

f=num3%10;

P0=table[e];

w1=0; //第1位delay(2);

w1=1;

P0=table[f];

w2=0; //第2位delay(2);

w2=1;

P0=table[c];

w3=0; //第3位delay(2);

w3=1;

P0=table[d];

w4=0; //第4位delay(2);

w4=1;

}

void display2() {

P0=table[e];

w1=0; //第1位delay(2);

w1=1;

P0=table[f];

w2=0; //第2位delay(2);

w2=1;

P0=table[c];

w3=0; //第3位delay(2);

w3=1;

P0=table[d];

w4=0; //第4位

相关文档
最新文档