要做一個時鐘電路 有四個按鈕 k1切換狀態:時鐘狀態或者調時狀態 k2選擇調時調小時 分鐘還是秒 k3k4為加減
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00,0xbf};
uint a=0,b=0;
uchar shi=0;
uchar shi1=0;
uchar shi2=0;
uchar fen=0;
uchar fen1=0;
uchar fen2=0;
uchar miao=0;
uchar miao1=0;
uchar miao2=0;
uchar set1=1,set2=1;
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
//延時
void DelayMS(uint x)
{
uchar i;
while(x--) for(i=0;i<120;i++);
}
//顯示程序
void xianshi(shi,fen,miao)
{
while(1)
{
shi=a/3600;
shi1=shi%10;
shi2=shi/10;
fen=(a-shi*3600)/60;
fen1=fen%10;
fen2=fen/10;
miao=a-shi*3600-fen*60;
miao1=miao%10;
miao2=miao/10;
P3=0x80;
P0=DSY_CODE[miao1];
DelayMS(5);
P3=0x00;
P3=0x40;
P0=DSY_CODE[miao2];
DelayMS(5);
P3=0x00;
P3=0x20;
P0=0xbf;
DelayMS(5);
P3=0x00;
P3=0x10;
P0=DSY_CODE[fen1];
DelayMS(5);
P3=0x00;
P3=0x08;
P0=DSY_CODE[fen2];
DelayMS(5);
P3=0x00;
P3=0x04;
P0=0xbf;
DelayMS(5);
P3=0x00;
P3=0x02;
P0=DSY_CODE[shi1];
DelayMS(5);
P3=0x00;
P3=0x01;
P0=DSY_CODE[shi2];
DelayMS(5);
P3=0x00;
}
}
uchar jia (uchar n)
{
if(k3==0)
{
DelayMS(20);
if(k3==0)
{
n++;
while(!k3);
}
}
return n;
}
uchar jian (uchar m)
{
if(k4==0)
{
DelayMS(20);
if(k4==0)
{
m++;
while(!k4);
if(m<0)
{
m=0;
}
}
}
return m;
}
void one()
{
if(k1==0)
{
DelayMS(20);
if(k1==0)
{
set1++;
while(!k1);
if(set1==3)
{
set1=1;
}
}
}
}
void two()
{
if(k2==0)
{
DelayMS(20);
if(k2==0)
{
set2++;
while(!k2);
if(set2==4)
{
set2=1;
}
}
}
}
void time()
{
if(set1==2)
{
if(set2==1)
{
shi=jia(shi);
if(shi==24)
{
shi=0;
}
if(shi==-1)
{
shi=23;
}
shi=jian(shi);
}
if(set2==2)
{
fen=jia(fen);
if(fen==60)
{
fen=0;
}
if(fen==-1)
{
fen=59;
}
fen=jian(fen);
}
if(set2==3)
{
miao=jia(miao);
if(miao==60)
{
miao=0;
}
if(miao==-1)
{
miao=59;
}
miao=jian(miao);
}
}
}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IE=0x82;
TR0=1;
while(1)
{
if(set1==1)
{
xianshi(shi,fen,miao);
}
if(set1==2)
{
xianshi(shi,fen,miao);
}
one();
two();
time();
}
}
void zhongduan() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
b++;
if(b==20)
{a++; b=0;}
if(miao==60)
{
miao=0;
fen++;
}
if(fen==60)
{
fen=0;
shi++;
}
if(shi==24)
{
shi=0;
}
} |