在0到10000定时器的基础上编了个8位数码管时钟程序。已在单片机上运行。编的不好,请大神们指教。看看哪些地方需要改进。谢谢。
#include<at89x51.h>
#define uint unsigned int
#define uchar unsigned char
uchar s=0,f=0,m=0; //小时(s)分 (f) 秒 (m)
#define n 20
sbit k1=P3^2;
sbit k2=P3^3;
uchar c;
uchar shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0--9数字
void ys1s(uint i) //延时(ys)1秒
{
uchar j;
while(i--)
{
for(j=0;j>125;j++)
{;}
}
}
void key() //按键调时,分
{
if(k1==0)
{
ys1s(30);
if(k1==0)
{
s++; //调时
while(!k1);
ys1s(30);
if(s>23)
{
s=0 ;
}
}
}
if(k2==0)
{
ys1s(30);
if(k2==0)
{
f++; //调分
while(!k2);
ys1s(30);
if(f>59)
{
f=0;
}
}
}
}
void xs() //显示子函数(xs)
{
P2_0=0;
P0=shu[s/10]; //小时十位
ys1s(1);
P0=0xff;
P2_0=1;
P2_1=0;
P0=shu[s%10]; //小时个位
ys1s(1);
P0=0xff;
P2_1=1;
P2_2=0;
P0=0xbf; //显示--
ys1s(1);
P0=0xff;
P2_2=1;
P2_3=0;
P0=shu[f/10]; //分十位
ys1s(1);
P0=0xff;
P2_3=1;
P2_4=0;
P0=shu[f%10]; //分个位
ys1s(1);
P0=0xff;
P2_5=0;
P2_4=1;
P0=0xbf; //显示--
ys1s(1);
P0=0xff;
P2_5=1;
P2_6=0;
P0=shu[m/10]; //秒十位
ys1s(1);
P0=0xff;
P2_6=1;
P2_7=0;
P0=shu[m%10]; //秒个位
ys1s(1);
P0=0xff;
P2_7=1;
}
void zd() interrupt 1 //中断(zd)函数
{
c++;
if(c==n)
{
m++;
c=0;
if(m>59)
{
f++;
m=0;
if(f>59)
{
s++;
f=0;
if(s>23)
{
s=0;
}
}
}
}
}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
key(); //按键
xs(); //显示
}
}
#include<at89x51.h>
#define uint unsigned int
#define uchar unsigned char
uchar s=0,f=0,m=0; //小时(s)分 (f) 秒 (m)
#define n 20
sbit k1=P3^2;
sbit k2=P3^3;
uchar c;
uchar shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0--9数字
void ys1s(uint i) //延时(ys)1秒
{
uchar j;
while(i--)
{
for(j=0;j>125;j++)
{;}
}
}
void key() //按键调时,分
{
if(k1==0)
{
ys1s(30);
if(k1==0)
{
s++; //调时
while(!k1);
ys1s(30);
if(s>23)
{
s=0 ;
}
}
}
if(k2==0)
{
ys1s(30);
if(k2==0)
{
f++; //调分
while(!k2);
ys1s(30);
if(f>59)
{
f=0;
}
}
}
}
void xs() //显示子函数(xs)
{
P2_0=0;
P0=shu[s/10]; //小时十位
ys1s(1);
P0=0xff;
P2_0=1;
P2_1=0;
P0=shu[s%10]; //小时个位
ys1s(1);
P0=0xff;
P2_1=1;
P2_2=0;
P0=0xbf; //显示--
ys1s(1);
P0=0xff;
P2_2=1;
P2_3=0;
P0=shu[f/10]; //分十位
ys1s(1);
P0=0xff;
P2_3=1;
P2_4=0;
P0=shu[f%10]; //分个位
ys1s(1);
P0=0xff;
P2_5=0;
P2_4=1;
P0=0xbf; //显示--
ys1s(1);
P0=0xff;
P2_5=1;
P2_6=0;
P0=shu[m/10]; //秒十位
ys1s(1);
P0=0xff;
P2_6=1;
P2_7=0;
P0=shu[m%10]; //秒个位
ys1s(1);
P0=0xff;
P2_7=1;
}
void zd() interrupt 1 //中断(zd)函数
{
c++;
if(c==n)
{
m++;
c=0;
if(m>59)
{
f++;
m=0;
if(f>59)
{
s++;
f=0;
if(s>23)
{
s=0;
}
}
}
}
}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
key(); //按键
xs(); //显示
}
}