用51单片机控制8位数码管显示特定数字,如426721850求程序

数字可以自定义的
最好用中断方式

以下代码不是采用中断方式,并且使用了74HC573,给你参考。


SEG_C   BIT P1.4    ;/段控制位定义
BIT_C   BIT P1.5    ;/位控制位定义
DISPLAY_BUFF EQU 30H;显示缓存30H-37H,8字节
COUN_WEI EQU 3CH  ;/显示位存储区
       ORG 0000H
       AJMP MAIN
        ORG 0100H
MAIN:   MOV SP,#60H
       MOV COUN_WEI,#0
;初始化显示缓存
  MOV DISPLAY_BUFF,#4
  MOV DISPLAY_BUFF+1,#2
  MOV DISPLAY_BUFF+2,#6
  MOV DISPLAY_BUFF+3,#7
  MOV DISPLAY_BUFF+4,#2
  MOV DISPLAY_BUFF+5,#1
  MOV DISPLAY_BUFF+6,#8
  MOV DISPLAY_BUFF+7,#5
 
LOOP:   CALL DISPLAY_0
       JMP LOOP
 
;/显示DISPLAY_BUFF(8字节)中的数据
DISPLAY_0:       
   CLR SEG_C    ;/关显示
    CLR BIT_C   ;[]
    MOV P0,#0ffh;[]
    SETB BIT_C
    NOP
    CLR BIT_C
 
     MOV A,COUN_WEI ;//段码给出
     
    ADD A,#DISPLAY_BUFF
    MOV R0,A
    MOV A,@R0
    MOV DPTR,#SEG_TAB
    MOVC A,@A+DPTR
    MOV P0,A
    SETB SEG_C
    NOP
    CLR SEG_C
 
    MOV A,COUN_WEI ;/位码给出
    MOV DPTR,#WEI_TAB
    MOVC A,@A+DPTR
    MOV P0,A
    SETB BIT_C
    nop
    CLR BIT_C
    CALL DELAY_1MS;【先clr bti—C再做延时】
    
    INC COUN_WEI
    MOV A,COUN_WEI
    CJNE A,#8,DISPLAY_0
    MOV COUN_WEI,#0
    RET
 
DELAY_1MS:         
    MOV R1,#35;50[防止闪烁]
D1:                          
    MOV R2,#100
    DJNZ R2,$
    DJNZ R1,D1
    RET
 
SEG_TAB: DB 03fh,06H,05BH,04FH,66H,06DH,07DH,07H,07FH,06FH;共阴数码管段码[0~9]
WEI_TAB: DB 0FeH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH;
        END

温馨提示:答案为网友推荐,仅供参考
相似回答