|
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num,num1=15;
uchar s1,s2;
uint t,frq;
sbit spk=P1^5;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,
0x71};
void delayms(uint xms) //延時函數
{
uint i,j;
for(i=xms;i>0;i--) //xms即計時多少毫秒
for(j=110;j>0;j--);
}
void display(uchar s1,uchar s2) //顯示函數
{
s2=num1/10;
s1=num1%10;
P0=table[s2]; //s2段選
P2=0xfd; //s2位選
delayms(5); //延時5毫秒
P0=table[s1]; //s1段選
P2=0xfe; //s1位選
delayms(5); //延時5毫秒
}
void main()
{ TMOD=0x11;
TH0=(65536-45872)/256; //裝初值
TL0=(65536-45872)%256;
TH0=0x00;
TL0=0x00;
EA=1; //開總中斷
ET0=1;
ET1=1; //開定時器0中斷
TR0=1;
//啟動定時器0
while(1)
{
display(s1,s2);
if(num1==20)
{
TR1=1;
frq=0;
for(t=0;t<60;t++)
{
delayms(10);
}
frq=100;
for(t=0;t<60;t++)
{
delayms(10);
} //顯示s1,s2,m1,m2,t1,t2
}
}
}
void T0_time() interrupt 1 //中斷函數
{
TH0=(65536-45872)/256; //重裝初值
TL0=(65536-45872)%256;
num++;
if(num==20) //到20次,1s已到
{ num=0;
num1--;
}
if(num1==0) //一分已到
{
num1=20;TR0=0;
}
}
void T1_time()interrupt 3
{
TH1=0xfe;
TL1=frq;
spk=~spk;
}
|
-
-
HC6800-ES V2.0.pdf
2018-12-10 21:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
404.98 KB, 下載次數: 6, 下載積分: 黑幣 -5
|