當前位置:編程學習大全網 - 編程語言 - 用51單片機寫壹個程序:用定時中斷T0T1控制4個數碼管顯示1...

用51單片機寫壹個程序:用定時中斷T0T1控制4個數碼管顯示1...

用51單片機寫壹個程序:用定時中斷T0T1控制4個數碼管顯示1...

分內容轉自:《51單片機C語言創新教程》溫子祺等著。

原理:

軟件設計方面使用動態驅動數碼管的方式,即要保證當數碼管顯示時的效果沒有閃爍的現象出現,亮

度壹致,沒有拖尾現象。由於人眼對頻率大於對24Hz以上的光的閃爍不敏感,這是利用了人眼視覺暫留的特點。壹般來說,每壹個數碼管點亮時間為1~2ms就可以了。如果某壹個數碼管點亮時間過長,則這個數碼管的亮度過高,如果某壹個數碼管的點亮時間過短,則這個數碼管的亮度過暗。因此我們必須設計壹個定時器來定時點亮數碼管,在該例子中,定時器的定時為5ms,即每個數碼管點亮時間為5ms,掃描四個數碼管的時間為20ms。

源碼:

/*實驗名稱:數碼管實驗

*描 述:在該章節的數碼管實驗當中,

使用動態驅動數碼管的方式來編寫程序,

程序的實現方式是數碼管從0-9999循環顯示

*作 者:溫子祺

*修改日期:2010/5/4

*/

#include "stc.h"

#define HIGH 1

#define LOW 0

#define LS164_DATA(x) {if((x))P0_4=1;else P0_4=0;}

#define LS164_CLK(x) {if((x))P0_5=1;else P0_5=0;}

#define SEG_PORT P0

unsigned char Timer0IRQEvent=0;

unsigned char Time1SecEvent=0;

unsigned int TimeCount=0;

unsigned char SegCurPosition=0;

code unsigned char SegCode[10]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};

//code unsigned char SegPosition[4]={0xfe,0xfd,0xfb,0xf7};

code unsigned char SegPosition[4]={0xf7,0xfb,0xfd,0xfe};

unsigned char SegBuf[4] ={0};

void LS164Send(unsigned char byte)

{

unsigned char j;

for(j=0;j=7;j++)

{

if(byte&(1(7-j)))

{

LS164_DATA(HIGH);

}

else

{

LS164_DATA(LOW);

}

LS164_CLK(LOW);

LS164_CLK(HIGH);

}

}

void RefreshDisplayBuf(void) //刷新顯示緩存

{

SegBuf[0] =TimeCount%10;

SegBuf[1] =TimeCount/10%10;

SegBuf[2] =TimeCount/100%10;

SegBuf[3] =TimeCount/1000%10;

}

void SegDisplay(void)

{

unsig......綠竹別其三分景 紅梅正報萬家春 春回大地

  • 上一篇:廣西科技大學的王牌專業是什麽?
  • 下一篇:財務學python需要多久
  • copyright 2024編程學習大全網