中易网

AT89C51单片机怎么用汇编语言让4个数码管同时显示1234?

答案:4  悬赏:50  
解决时间 2021-01-14 12:43
  • 提问者网友:我没有何以琛的痴心不悔
  • 2021-01-14 04:20
AT89C51单片机怎么用汇编语言让4个数码管同时显示1234?
最佳答案
  • 二级知识专家网友:山河有幸埋战骨
  • 2021-01-14 04:54
通常的办法是扫描显示,这样的话,用12个IO口就可以实现了,8位段码加上4位位码。程序如下:
DATEQU 30H
SCANLEDEQU 34H
ORG 0000H

LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#01H
MOV TH0,#0F4H
MOV TL0,#048H
MOV P2,#00H
MOV SCANLED,#0
MOV 30H,#1
MOV 31H,#2
MOV 30H,#3
MOV 31H,#4
SETB EA

SETB ET0
SETB TR0
SJMP $

;--------------------
T0ISR:
CLR TR0

MOV TH0,#0F4H
MOV TL0,#048H
SETB TR0

MOV DPTR,#LEDTAB
MOV R0,#DAT

MOV A,SCANLED
ADD A,R0
MOV R0,A
MOV A,SCANLED
JNZ T001
MOV P2,#01H
SJMP T0DIS
T001:
DEC A
JNZ T002
MOV P2,#02H
SJMP T0DIS
T002:
DEC A
JNZ T003
MOV P2,#04H
SJMP T0DIS
T003:
MOV P2,#08H
T0DIS:
MOV A,@R0
MOVC A,@A+DPTR
CPL A
MOV P0,A
INC SCANLED
MOV A,SCANLED
ANL A,#03H
MOV SCANLED,A
POP ACC
RETI
;--------------------
LEDTAB:
DB 0C0H;"0"00H
DB 0F9H;"1"01H
DB 0A4H;"2"02H
DB 0B0H;"3"03H
DB 99H;"4"04H
DB 92H;"5"05H
DB 82H;"6"06H
DB 0F8H;"7"07H
DB 80H;"8"08H
DB 90H;"9"09H
;--------------------

END
全部回答
  • 1楼网友:慢性怪人
  • 2021-01-14 07:25
动态显示,先显示1,再显示2,3,4轮流。
  • 2楼网友:慢性怪人
  • 2021-01-14 05:52

ORG 00H
 AJMP MAIN
 ORG 30H
MAIN: LCALL DISP
 MOV 20H,#1
 MOV 21H,#2
 MOV 22H,#3
 MOV 23H,#4
 AJMP MAIN
DISP: MOV A,20H  
 ACALL SEG7
 MOV P0,A
 SETB P2.0
 ACALL DLY
 CLR P2.0
 MOV A,21H  
 ACALL SEG7
 MOV P0,A
 SETB P2.1
 ACALL DLY
 CLR P2.1
 MOV A,22H 
 ACALL SEG7
 MOV P0,A
 SETB P2.2
 ACALL DLY
 CLR P2.2
 MOV A,23H 
 ACALL SEG7
 MOV P0,A
 SETB P2.3
 ACALL DLY
 CLR P2.3
 
 RET 
DLY: MOV R7,#2
D1: MOV R6,#40
 DJNZ R6,$
 DJNZ R7,D1
 RET
SEG7: INC A
 MOVC A,@A+PC
 RET
     DB        0C0H;0
        DB        0F9H;1
        DB        0A4H;2
        DB        0B0H;3
        DB        099H;4
        DB        092H;5
        DB        082H;6
        DB        0F8H;7
        DB        080H;8
        DB        090H;9
       
       END
  • 3楼网友:狂恋
  • 2021-01-14 05:42
自己要学会仿制写程序,懂了原理之后就容易理解了,我说一下原理吧:
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息