这是我写的时钟程序,求指导指导,只知道加了个按键关定时器的操作,按键闪烁和加减时间都还没思路啊。
#include<reg52.h>
#include<math.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
uchar s1,s2,f1,f2,m1,m2,xms,num,num1;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
void delayms(uint xms);
void key_cz();
void display1(uchar shi1,uchar shi2);
void display2(uchar fen1,uchar fen2);
void display3(uchar miao1,uchar miao2);
void main()
{
init();
while(1)
{
key_cz();
display1(s1,s2);
display2(f1,f2);
display3(m1,m2);
}
}
init()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
}
void display1(uchar shi1,uchar shi2)
{
dula=1;
P0=table[shi1];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(1);
dula=1;
P0=table[shi2];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(1);
}
void display2(uchar fen1,uchar fen2)
{
dula=1;
P0=table[fen1];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delayms(1);
dula=1;
P0=table[fen2];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delayms(1);
}
void display3(uchar miao1,uchar miao2)
{
dula=1;
P0=table[miao1];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delayms(1);
dula=1;
P0=table[miao2];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delayms(1);
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void key_cz()
{
if(key4==0)
{
delayms(10);
if(key4==0)
{
TR0=~TR0;
while(key4!=0);
}
}
// if(key1==0)
// {
// delayms(10);
// if(key1==0)
// {
// TR0=
// }
// }
}
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
if(num==20) //20次为一秒
{
num=0;
num1++;
if(num1==60)
{
num1=0;
f2++;
if(f2==10)
{
f2=0;
f1++;
if(f1==6)
{
f1=0;
s2++;
if(s2==10)
{
s2=0;
s1++;
if(s1*10+s2>=24)
{
s1=0;
s2=0;
}
}
}
}
}
m1=num1/10;
m2=num1%10;
}
}
求个大师带我啊!本人一是工作需求,再者对单片机以及硬件很感兴趣。 |