# include<reg51.h> void delay(); sfr p0=0x80; (p0控制數(shù)碼管段選) sfr p2=0xa0; (p2控制數(shù)碼管片選) void main (){ for(;;){ p0=0xc0; p2=0xf7; delay(); p0=0x82; p2=0xfb; delay(); p0=0xa4; p2=0xfd; delay(); p0=0xf9; p2=0xfe; delay(); }} void delay(){ int i; for(i=0;i<50;i++){ TMOD=0X01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; TR0=1; while(TF0==0){;} }}
這個是我寫的一個數(shù)碼管動態(tài)顯示程序,顯示內(nèi)容為“0621”,雖然把程序燒盡單片機能穩(wěn)定的同時顯示出"0621'這四位數(shù)字沒有閃爍也沒有重影,可是這在原理上讓我想不明白,此程序的延時程序中計數(shù)器的計數(shù)功能明顯沒起到作用這是為什么?新手上路,在此希望各位朋友多多指教。
1,你得程序思想是很好的,很好的用了定時器做精確的延時,就向和匯編的語句控制延時一樣可以做到很精確
2,定時器到時候的用法你好好加深一下。你這里的定時器只是起到延時的作用。
3,要想使用到計數(shù)器你要明白什么是計數(shù)器。怎樣使用計數(shù)器。例如unsigned char i=0,a = 0;for(i=0,i<10;++i) a =a+i;這也是一個計數(shù)器
4,我想你是想用定時器做一個定時一定時間然后再加數(shù)據(jù)吧,這個要是用到定時器的中斷。然后配置中斷服務(wù)子程序,在中斷程序中修改計數(shù)器的值,然后傳遞出來顯示就可以了
5,你定時器的應(yīng)該是50ms時間吧,這個動態(tài)做出來的效果應(yīng)該不是很穩(wěn)定吧,才20hz的刷新頻率。
你那是FOR循環(huán),根本不是中斷,況且EA,ET0中斷允許都沒打開,中斷能起什么用
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |