數(shù)碼管由于價格便宜,使用簡單,在電器特別是家電領(lǐng)域(比如空調(diào)、熱水器和冰箱等)得到了極為廣泛的應(yīng)用。在高校電子信息類專業(yè)單片機的教學(xué)過程中,數(shù)碼管動態(tài)顯示及實現(xiàn)方法是學(xué)生普遍反映較難掌握的內(nèi)容。鑒于此,本文為大家?guī)砣齻€數(shù)碼管動態(tài)掃描顯示01234567程序介紹。
數(shù)碼管動態(tài)掃描顯示01234567程序一
原理圖
8個數(shù)碼管它的數(shù)據(jù)線并聯(lián)接到JP5, 位控制由8個PNP型三級管驅(qū)動后由JP8引出。
程序流程圖
匯編語言參考程序
ORG 0000H
AJMP MAIN
ORG 0080H
MAIN:
CLR P2.0 選中第一個數(shù)碼管
MOV P0,#28H 顯示0
LCALL DELAY 調(diào)用延時ORG
MOV P0,#0FFH 關(guān)顯示
SETB P2.0
CLR P2.1 選中第二個數(shù)碼管
MOV P0,#7EH 顯示1
LCALL DELAY
MOV P0,#0FFH
SETB P2.1
CLR P2.2 選中第三個數(shù)碼管
MOV P0,#0A2H 顯示2
LCALL DELAY
MOV P0,#0FFH
SETB P2.2
CLR P2.3 選中第四個數(shù)碼管
MOV P0,#62H 顯示3
LCALL DELAY
MOV P0,#0FFH
SETB P2.3
CLR P2.4 選中第五個數(shù)碼管
MOV P0,#74H 顯示4
LCALL DELAY
MOV P0,#0FFH
SETB P2.4
CLR P2.5 選中第六個數(shù)碼管
MOV P0,#61H 顯示5
LCALL DELAY
MOV P0,#0FFH
SETB P2.5
CLR P2.6 選中第七個數(shù)碼管
MOV P0,#21H 顯示6
LCALL DELAY
MOV P0,#0FFH
SETB P2.6
CLR P2.7 選中第八個數(shù)碼管
MOV P0,#7AH 顯示7
LCALL DELAY
SETB P2.7
MOV P0,#0FFH
AJMP MAIN 重新開始
DELAY: 延時子程序
MOV R7,#2
D1: MOV R6,#25
D2: DJNZ R6,D2
DJNZ R7,D1
RET
END
c語言參考程序
#include
#define uchar unsigned char //宏定義,為方便編程
#define uint unsigned int
#define DIGI P0 //宏定義,將P1口定義為數(shù)碼管
#define SELECT P2 //宏定義,將P2定義為數(shù)碼管選擇口
uchar digivalue[]={0x28,0x7e,0x0a2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60};
//顯示的數(shù)字數(shù)組,依次為0,1,。。,9
uchar select[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //選擇數(shù)碼管數(shù)組,依次選擇1,2,。。,8
void delay() //延遲函數(shù),決定數(shù)碼管跳變的間隔時間
{
uchar ii=200; //若發(fā)現(xiàn)數(shù)碼管閃爍,調(diào)節(jié)這里即可
while(ii--);
}
char code SST516[3] _at_ 0x003b; //仿真器插入代碼
main() //主函數(shù)
{
uchar i=0;
while(1)
{
for(i=0;i<8;i++) //8個數(shù)碼管輪流顯示
{
SELECT=select[i]; //選擇第i個數(shù)碼管
IGI=digivalue[i]; //顯示i
delay();
}
}