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