|
沒有開發板,用慧凈四驅的主控板四位數碼管顯示時間,運行準確,電路圖大家可以搜一下。小數點隔一秒閃爍一下,按鈕3和4分別調制時和分。附上源程序:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit KEY1=P2^5;//調制時
sbit KEY2=P2^4;//調制分
uchar num,fen,miao,shi,flag;
uint disnum;
uchar code table_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code table_we[]={0xfe,0xfd,0xfb,0xf7};//P2口,控制數碼管的位選
delay(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=200;b>0;b--);
}
void display()
{
//P2=0xFF;
P0=table_du[shi/10];
P2=table_we[0];
delay(10);
P0=table_du[shi%10]-flag*(0x80);//小數點間隔1s閃爍
P2=table_we[1];
delay(10);
P0=table_du[fen/10];
P2=table_we[2];
delay(10);
P0=table_du[fen%10];
P2=table_we[3];
delay(10);
}
void revise()//調制時,分
{
if(KEY1==0)
{
delay(10);
if(KEY1==0)
{
shi++;
}
while(!KEY1);
delay(10);
while(!KEY1);
}
if(KEY2==0)
{
delay(10);
if(KEY2==0)
{
fen++;
}
while(!KEY2);
delay(10);
while(!KEY2);
}
}
void main()
{
EA=1;
ET0=1;
TMOD=0X01;
TH0=0xB8;
TL0=0x00;
TR0=1;
while(1)
{
revise();
display();
}
}
void time0() interrupt 1
{
TH0=0xB8; //對應11.0592M晶振計算得到,20ms
TL0=0x00;
num++;
if(num==50)
{
num=0;
miao++;
flag=miao%2;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
}
}
}
}
|
評分
-
查看全部評分
|