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