标题: 8段数码管可调数字时钟 [打印本页]
作者: Sugar唐 时间: 2017-12-26 20:58
标题: 8段数码管可调数字时钟
#include<reg51.h> //头文件
#define uchar unsigned char
uchar codeseg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
uchar dis[8]={0,0,0,0,0,0,0,0};
uchar hour=0,min=0,sec=0; //定义三个变量表示时、分、秒
uchar t1_counter=0;
bit kp=0;
void delayms(uchar ms)
{
uchari,j;
for(j=ms;j>0;j--)
for(i=0;i<123;i++);
}
void display (void)
{
uchar i;
for(i=0;i<8;i++)
{
P2=i;
P0=seg[dis];
delayms(1);
}
}
void S1_fun(void)
{
if(++hour==24) //当“时”加24时,重新赋值0
hour=0;
}
void S2_fun(void)
{
if(--hour==255)
hour=23;
}
void S3_fun(void)
{
if(++min==60)
min=0;
}
void S4_fun(void)
{
if(--min==255)
min=59;
}
void key(void)
{
if((P3&0x0f)!=0x0f)
{
delayms(10);
if(((P3&0x0f)!=0x0f)&&(kp==0))
{
kp=1;
if((P3&0x0f)==0x0e)S1_fun();
if((P3&0x0f)==0x0d)S2_fun();
if((P3&0x0f)==0x0b)S3_fun();
if((P3&0x0f)==0x07)S4_fun();
}
}
elsekp=0;
}
void main(void)
{
TMOD|=0X10;
TH1=15536/256;
TL1=15536%256;
TR1=1;EA=1; ET1=1;
display();
while(1)
{
key();
dis[0]=hour/10;
dis[1]=hour%10;
dis[2]=10;
dis[3]=min/10;
dis[4]=min%10;
dis[5]=10;
dis[6]=sec/10;
dis[7]=sec%10;
display();
}
}
void t1_int(void) interrupt 3 //定时器1函数
{
TH1=15536/256;
TL1=15536%256;
if(++t1_counter==20)
{
t1_counter=0;
if(++sec==60)
{
sec=0;
if(++min==60)
{
min=0;
if(++hour==24)
hour=0;
}
}
}
}
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |