根据STC89C52单片机片内30H单元内容(00或01或02或03)进行散转,1个数码管循环显示对于的数字。
汇编程序:
ORG 0000H //汇编起始地址
NUMB EQU 30H
FONT EQU 31H
INT: MOV NUMB,#00H; 需要显示数字送到NUMB单元
MOV R2,#04H
START: MOV A,NUMB
MOV DPTR,#TABADDR
RL A
JMP @A+DPTR
TABADDR: SJMP DISP0
SJMP DISP1
SJMP DISP2
SJMP DISP3
DISP0: MOV FONT,#0C0H
LJMP MJUP1
DISP1: MOV FONT,#0F9H
LJMP MJUP1
DISP2: MOV FONT,#0A4H
LJMP MJUP1
DISP3: MOV FONT,#0b0H
;数码管显示
MJUP1: MOV A,FONT
MOV P0,A;
ACALL DELAY
INC NUMB
DJN2 R2,START
AJMO INT
DELAY: MOV R7,#0FFH
DL: MOV R6,#0FFH
DL6: DJNZ R6,DL6
DJNZ R7,DL
RET
END
C语言实现:
#include <reg52.h>
#include <intrins.h>
unsigned int numb;
unsigned char k,font;
void delay(unsigned int z)
{
unsigned int i;
for(i=0;i<z;i++);
}
void Display()
{
P0=font;
delay(20000000);
}
void font_numb(numb)
{
switch(numb)
{
case 0:
{
font=0xc0;
Display();
}
break;
case 1:
{
font=0xf9;
Display();
}
break;
case 2:
{
font=0xa4;
Display();
}
break;
case 3:
{
font=0xb0;
Display();
}
break;
default:
break;
}
}
void main()
{
while(1)
{
for(numb=0;numb<4;numb++)
{
font_numb(numb);
}
}
}
附上一张仿真图: