|
定時(shí)中斷對(duì)于初學(xué)者來(lái)說(shuō),相對(duì)還是比較難以把握的,不過(guò)根據(jù)本人十幾年的學(xué)習(xí)經(jīng)驗(yàn),我知道這世界上的知識(shí)都是可以學(xué)會(huì)的,只要你有相應(yīng)的基礎(chǔ),覺(jué)得難都是因?yàn)椴粫?huì)才覺(jué)得難,這話不矛盾的,學(xué)習(xí)的過(guò)程就是掌握基礎(chǔ)的過(guò)程,基礎(chǔ)掌握了,那么再繼續(xù)學(xué)習(xí),學(xué)會(huì)就只是時(shí)間上的問(wèn)題了,這只是單純的強(qiáng)調(diào)基礎(chǔ)的重要性。學(xué)習(xí)需要的是有著充分的耐心和毅力,有了這些前提,我相信你肯定會(huì)發(fā)覺(jué),這個(gè)過(guò)程其實(shí)是那么的美好。
#include《reg52》
sbitWEB1=P1^1;
sbitA=P1^0;
sbitL=P1^3;
sbitLED=P1^2;
voiddelay();
unsigned char codetable[]={
0X3F,0X06,0X5B,0X4F,0X66,
0x6d,0X7D,0X07,0X7F,0X6F,
0X77,0X7C,0X39,0X5E,0X79,
0X71};
int num=0;
int temp=0;
void main()
{
P0=0X00; //關(guān)閉點(diǎn)陣
L=0; //鎖存
P0=0XFF; // 關(guān)閉LED燈
LED=0; //鎖存
WEB1=1; //位選
P0=0XFE; //共有8個(gè)數(shù)碼管,打開(kāi)第一個(gè)數(shù)碼管
WEB1=0; //鎖存
EA=1;//中斷總控制位,EA=1,CPU開(kāi)放中斷
ET0=1;//定時(shí)中斷T0控制位,ET0=1,允許定時(shí)中斷0中斷
TMOD=0X01; //定時(shí)方式開(kāi)啟1,即方式2
TH0=(65536-50000)/256;//給定時(shí)器T0高八位賦值 ,50000為50us,65536=2^16;
TL0=(65536-50000)%6; //給定時(shí)器T0低八位賦值
TR0=1; //啟動(dòng)定時(shí)
while(1)
{
if(num==20) //中斷20次,即1秒,進(jìn)入循環(huán)
{
if(temp==15)
temp=0 ;
A=1; //段選
P0=table[temp]; //一個(gè)數(shù)碼管有8個(gè)二極管,需要顯示的數(shù)字
A=0; //鎖存
//delay();
temp++;
num=0; //清0
}
}
}
voiddelay()
{
inta,b;
for(a=1500;a>=0;a--)
for(b=100;b>=0;b--);
}
voidexter0() interrupt 1//interrupt為中斷函數(shù)關(guān)鍵字,說(shuō)明這個(gè)函數(shù)是中斷函數(shù),中斷函數(shù)不用函數(shù)聲明
{//0表示51單片機(jī)的5個(gè)中斷源的第一個(gè),即INT0,外部中斷0 ,1為定時(shí)中斷
TH0=(65536-50000)/256; //每一次中斷要給計(jì)數(shù)器賦值,因?yàn)橛?jì)數(shù)器溢出后會(huì)清0
TL0=(65536-50000)%6;
num++;
}
|
|