學(xué)了2個(gè)月做的,拿上來(lái)大家一起看看
這是還沒按鍵調(diào)時(shí)的。
這張和上面這張是有按鍵調(diào)時(shí)和暫停功能的。
以下是我做的一個(gè)簡(jiǎn)易時(shí)鐘程序,功能不多,就只顯示小時(shí)和分鐘,兩個(gè)鍵調(diào)節(jié)小時(shí)數(shù)和分鐘數(shù),關(guān)鍵是代碼少啊,也不用鎖存器,只要三極管就行了
#include
#define uchar unsigned char
#define uint unsigned int
uchar Hour,Minite,Second,Num;
uchar code table[]={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90};
sbit jiashi=P3^1;
sbit jiafeng=P3^0;
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延時(shí)約xms毫秒
for(j=113;j>0;j--);
}
void init() //初始化函數(shù)
{
TMOD=0x01;//設(shè)置定時(shí)器0為工作方式1(0000 0001)
TH0=(65536-50000)/256;//裝初值50ms一次中斷
TL0=(65536-50000)%256;
EA=1; //開總中斷
ET0=1; //開定時(shí)器0中斷
TR0=1; //啟動(dòng)定時(shí)器0
Num=0;
Hour=06;
Minite=00;
Second=00;
}
void display(uchar Hour,uchar Minite) //顯示子函數(shù)
{
P1=0xff;
P2=0xf7;
P1=table[Hour/10];
delayms(5);
P1=0xff;
P2=0xfb;
P1=table[Hour%10]&0x7f;
delayms(5);
P1=0xff;
P2=0xfd;
P1=table[Minite/10];
delayms(5);
P1=0xff;
P2=0xfe;
P1=table[Minite%10];
delayms(5);
}
void T0_time() interrupt 1
{
TH0=(65536-50000)/256;//重裝初值
TL0=(65536-50000)%256;
Num++;
}
void jishi ()
{
if(Num==20) //如果到了20次,說(shuō)明1秒時(shí)間到
{
Num=0; //然后把num清0重新再計(jì)20次
Second++;
if(Second>=60)
{
Second=0;
Minite++;
if(Minite>=60)
{
Minite=0;
Hour++;
if(Hour>=24)
{
Hour=0;
}
}
}
}
if(jiashi==0)
{
delayms(50);
if(jiashi==0)
{
Hour++;
Second=0;
if(Hour>=24)
{
Hour=0;
}
while(!jiashi);
}
}
if(jiafeng==0)
{
delayms(50);
if(jiafeng==0)
{
Minite++;
Second=0;
if(Minite>=60)
{
Minite=0;
}
while(!jiafeng);
}
}
}
void main()
{
init();
while(1)
{
display(Hour,Minite);
jishi();
}
}