|
大神們求指教下,下面這段單片機(jī)代碼先是我自己慢慢編出來,之后結(jié)合郭老師的視頻講解改了改,就是學(xué)習(xí)《單片機(jī)十天征服我》的那個學(xué)習(xí)視頻。中讓LED按1秒閃爍,數(shù)碼管用中斷2秒來變化。
我最初使用的是TL0 = 0xD7; ,那數(shù)碼管顯示的老快了。看著就是8,燈到?jīng)]問題,這張圖片就是顯示的很快,這又是為什么了。這TL0和TH0都是通過STC-isp算出來的呀。沒道理錯瑟
TH0 = 0xFD;
當(dāng)我使用TL0=(65536-50000)%256;就完全能實(shí)現(xiàn)。
TH0=(65536-50000)/256;
單片機(jī)源程序如下:
#include<reg52.h>
#include<intrins.h>
#define ut unsigned int
#define ur unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
ut num=0,t=0;
ur a=0,temp=0;
ur code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(ut z) //延遲保持不變,大約Z=1000為1s
{
ut x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{ TMOD=0x01;
/*TL0=(65536-50000)%256;
TH0=(65536-50000)/256;*/
TL0 = 0xD7; TH0 = 0xFD;//50ms的初值
EA=1; //總中斷開
ET0=1; //定時0中斷開
TR0=1; //啟動定時器0開,開始斷點(diǎn)
wela=1;P0=0xe0;wela=0; //位選,所有的數(shù)碼管
dula=1;P0=0x3f;dula=1; //段選讓數(shù)碼管的初值為0
a=0xfe; //讓發(fā)光二極管間隔1s循環(huán)閃爍,沒問題
while(1){P1=a;
temp=a;
temp=_crol_(temp,1);
a=temp;
delay(1000);
}
}
void zd0() interrupt 1 //中斷有問題
{ /*TL0=(65536-50000)%256;
TH0=(65536-50000)/256;*/TL0 = 0xD7; TH0 = 0xFD;
t++;
if(t==40)
{t=0;num++;
dula=1;P0=table[num%16];dula=0;
}
}
|
|