#include<reg52.h>
sbit sd=P3^6; //选锁存器
sbit key1=P1^0; // 选择键
sbit key2=P1^3; //s4 时间增加
sbit key3=P1^2; //S3 时间减少
char a=0,hour=0,minute=0,seconed=0;
char h1,h2,m1,m2,s1,s2;
char num=0;
char code table[]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f};
void delay(char z)
{
char x,y;
for(x=z;x>0;x--)
for(y=160;y>0;y--);
}
void display_hour(char h) //显示小时
{
h1=h/10;
h2=h%10;
sd=1;
P0=table[h1];
P2=0xfe; //1111 1110
sd=0;
delay(10);
sd=1;
P2=0xfd; //1111 1101
P0=table[h2];
sd=0;
delay(10);
}
void display_minute(char m) //显示分钟
{
m1=m/10;
m2=m%10;
sd=1;
P0=table[m1];
P2=0xf7; //1111 0111
sd=0;
delay(10);
sd=1;
P2=0xef; //1110 1111
P0=table[m2];
sd=0;
delay(10);
sd=1;
P0=0xbf;
P2=0xdb;
sd=0;
delay(10);
}
void display_seconed(char s) //显示秒
{
s1=s/10;
s2=s%10;
sd=1;
P2=0xbf; //1011 1111
P0=table[s1];
sd=0;
delay(10);
sd=1;
P2=0x7f; //0111 1111
P0=table[s2];
sd=0;
delay(10);
}
void init() //初始化函数
{
TMOD=0x01; //定时器0工作方式1
TH0=(65536-45872)/256; //装初值晶振11.0592 50ms为45872
TL0=(65536-45872)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //开启定时器0
}
void key() //按键函数,功能为对时间进行调整
{
if(key1==0) //key1键按下进入选择并停止定时器
{
delay(10);
while(!key1); //松手检测
TR0=0;
num++; //没按一次key1 num自加1
}
if(num==1) //key1按一次进行“小时”调整
{
if(key2==0) //key2按下时间增加
{
delay(10);
while(!key2);
hour++;
if(hour==24)
hour=0;
}
if(key3==0) //key3按下时间减少
{
delay(10);
while(!key3);
hour--;
if(hour<0)
hour=23;
}
}
if(num==2) //按下key1两次进行“分钟调整”
{
if(key4==0)
{
delay(10);
while(!key4);
minute++;
if(minute==60)
minute=0;
}
if(key3==0)
{
delay(10);
while(!key3);
minute--;
if(minute<0)
minute=59;
}
}
if(num==3) //key1按下三次对“秒”进行调节
{
if(key4==0)
{
delay(10);
while(!key4);
seconed++;
if(seconed==60)
seconed=0;
}
if(key3==0)
{
delay(10);
while(!key3);
seconed--;
if(seconed<0)
seconed=59;
}
}
if(num==4) //key1按下四次认为调节完毕开启定时器并将num清0
{
num=0;
TR0=1;
}
}
void main()
{
init();
while(1)
{
display_seconed(seconed); //显示“秒,分,时”
display_minute(minute);
display_hour(hour);
if(a==20) //判断定时器是否到1s
{
a=0;
seconed++;
if(seconed>59)
{
seconed=0;
minute++;
if(minute>59)
{
minute=0;
hour++;
if(hour>23)
{
hour=0;
}
}
}
}
key();
}
}
void
time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
a++;
}
求哪位高人帮我再加一个闹钟 ,我已经弄了好几次了,都没成功。
-
-
HW-5.0电路图.pdf
下载积分: 积分 -1 分
89.53 KB, 下载次数: 11, 下载积分: 积分 -1 分
这是我板子的电路图
大概加在那里啊,我有急用。学校马上就要交了,
一周热门 更多>