
求八段显示管(单片机)显示自己学号。用汇编语言写程序。如:090309 10
#include <reg51.h>
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char buf[6]={0,9,0,3,0,9};
unsigned char ss[6]={0x01,0x02,0x04,0x08,0x10,0x20};
void delay(void)
{
unsigned char m,s;
for(m=4;m>0;m--)
for(s=250;s>0;s--);
}
void disp(void)
{
unsigned char i,num;
i=0;
for(;i<=5;i++)
{
p2=ss[i];
num=buf[i];
p1=tab[num];
delay();
}
}
void main(void)
{
while(1) disp();
}

2020-01-15 广告
;a,b,c,d,e,f,g,dp分别接P0(从低到高),注意P0端口接上拉电阻,接排阻103
;每个数码管公共端(从高到低)接P2.0-P2.5
;用按键设置,P3.2开始设置,P3.0切换位,P3.1设置数值,,默认090309
LED1 BIT P2.5
LED2 BIT P2.4
LED3 BIT P2.3
LED4 BIT P2.2
LED5 BIT P2.1
LED6 BIT P2.0
DATA1 DATA 70H
DATA2 DATA 71H
DATA1 DATA 72H
DATA2 DATA 73H
DATA1 DATA 74H
DATA2 DATA 75H
ORG 00H
LJMP MAIN
ORG 30H
MAIN:
MOV P2,#0FFH
MOV DATA1,#9
MOV DATA2,#0
MOV DATA3,#3
MOV DATA4,#0
MOV DATA5,#9
MOV DATA6,#0
LOOP:
ACALL DISPLAY
LJMP LOOP
DISPLAY:
MOV DPTR,#LEDSHOW
MOV A,DATA1
MOVC A,@A+DPTR
MOV P2,A
SETB LED1
ACALL DELAY15MS
CLR LED1
MOV DPTR,#LEDSHOW
MOV A,DATA2
MOVC A,@A+DPTR
MOV P2,A
SETB LED2
ACALL DELAY15MS
CLR LED2
MOV DPTR,#LEDSHOW
MOV A,DATA3
MOVC A,@A+DPTR
MOV P2,A
SETB LED3
ACALL DELAY15MS
CLR LED3
MOV DPTR,#LEDSHOW
MOV A,DATA4
MOVC A,@A+DPTR
MOV P2,A
SETB LED4
ACALL DELAY15MS
CLR LED4
MOV DPTR,#LEDSHOW
MOV A,DATA5
MOVC A,@A+DPTR
MOV P2,A
SETB LED5
ACALL DELAY15MS
CLR LED5
MOV DPTR,#LEDSHOW
MOV A,DATA6
MOVC A,@A+DPTR
MOV P2,A
SETB LED6
ACALL DELAY15MS
CLR LED6
RET
LEDSHOW:
DB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DELAY15MS:
MOV R7,#01H
DL1:
MOV R6,#0EEH
DL0:
MOV R5,#1EH
DJNZ R5,$
DJNZ R6,DL0
DJNZ R7,DL1
RET
d0 equ 11000000b;0C0H
d1 equ 11111001b;0F9H
d2 equ 10100100b
d3 equ 10110000b
d4 equ 10011001b
d5 equ 10010010b
d6 equ 10000010b
d7 equ 11111000b
d8 equ 10000000b
d9 equ 10010000b
ORG 0000H
JMP START
ORG 0030H
START:
mov dptr,#data1
mov R0,#30H
mov @R0,#0
inc R0
mov @R0,#9
inc R0
mov @R0,#0
inc R0
mov @R0,#3
inc R0
mov @R0,#0
inc R0
mov @R0,#9
ST: CALL DISPLAY1s
JMP ST
Display:
mov p2,#0ffh
mov a,,@R0
movc a,@a+dptr
mov p0,a
clr p2.0
call T1ms
mov p2,#0ffh
inc R0
mov a,,@R0
movc a,@a+dptr
mov p0,a
clr p2.1
call T1ms
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov p2,#0ffh
inc R0
mov a,,@R0
movc a,@a+dptr
mov p0,a
clr p2.2
call T1ms
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov p2,#0ffh
inc R0
mov a,,@R0
movc a,@a+dptr
mov p0,a
clr p2.3
call T1ms
mov p2,#0ffh
inc R0
mov a,,@R0
movc a,@a+dptr
mov p0,a
clr p2.4
call T1ms
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov p2,#0ffh
inc R0
mov a,,@R0
movc a,@a+dptr
mov p0,a
clr p2.5
call T1ms
ret
data1: db d0,d1,d2,d3,d4,d5,d6,d7,d8,d9
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
T1ms:
MOV R7,#248
DJNZ R7,$
MOV R7,#248
DJNZ R7,$
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
JMP $
END
12M ,共阴
ORG 00H
AJMP MAIN
ORG 30H
MAIN:
MOV R0,#20H
MOV R1,#8
MOV R2,#0FEH
MOV DPTR,#TAB
MOV 20H,#2
MOV 21H,#0
MOV 22H,#1
MOV 23H,#2
MOV 24H,#0
MOV 25H,#1
MOV 26H,#0
MOV 27H,#7
ACALL DISP
AJMP $-2 ;转上一条反复执行DISP子程序
DISP:
MOV A,@R0
MOVC A,@A+DPTR
MOV P0,A ;段码送P0口
MOV A,R2 ;位选
MOV P2,A
ACALL D1MS ;显示延时1MS
MOV P2,#0FFH ;关显示
RL A
MOV R2,A
INC R0
DJNZ R1,DISP
MOV R0,#20H
MOV R1,#8
RET
D1MS:
MOV R7,#10 ;延时1MS子程序。
MOV R6,#50
DJNZ R6,$
DJNZ R7,$-4
RET
TAB:
DB 3FH ;0 共阴管段码
DB 06H ;1
DB 5BH ;2
DB 4FH ;3
DB 66H ;4
DB 6DH ;5
DB 7DH ;6
DB 07H ;7
DB 7FH ;8
DB 6FH ;9
END