dbuf equ 30h ;置存储区首址
temp equ 40h ;置缓冲区首址
org 00h
mov 30h,#2 ;存入数据
mov 31h,#0
mov 32h,#1
mov 33h,#0
mov 34h,#7
mov 35h,#1
mov r0,#dbuf
mov r1,#temp
mov r2,#6 ;六位显示器
mov dptr,#segtab ;段码表首地址
dp00: mov a,@r0 ;取要显示的数据
movc a,@a+dptr ;查表取段码
mov @r1,a ;段码暂存
inc r1
inc r0
djnz r2,dp00
disp0: mov r0,#temp ;显示子程序
mov r1,#6 ;扫描6次
mov r2,#01h ;从第一位开始
dp01: mov a,@r0
mov p0,a ;段码输出
mov a,r2 ;取位码
mov p1,a ;位码输出
acall delay ;调用延时
mov a,r2
rl a
mov r2,a
inc r0
djnz r1,dp01
sjmp disp0
segtab: db 3fh,06h,5bh,4fh,66h
db 6dh,7dh,07h,7fh,6fh
delay: mov r4,#03h ;延时子程序
aa1: mov r5,0ffh
aa: djnz r5,aa
djnz r4,aa1
ret
end
嘿嘿 你是想显示2位数字 即 1 和 9 吧 程序基本问题不大
只是延时子程序 要在最后加上一条子程序返回指令 即 RET
否则 程序在调用子程序后 将无法正确返回到你的主程序上。
DELAY: MOV R0,#5H
DELAY2: MOV R1,#50H
DELAY3: MOV R2,#50H
DJNZ R2,$
DJNZ R1,DELAY3
DJNZ R0,DELAY2
RET (修改)
END
呵呵 满意 就选满意回答
NAME T3 ;I/O口扩展实验一
PORT EQU 0CFA0H ;片选地址CS0
CSEG AT 0000H
LJMP START
CSEG AT 4100H
START: MOV A,#11H ;两个红灯亮,黄灯、绿灯灭
ACALL DISP ;调用273显示单元(以下雷同)
ACALL DE3S ;延时3秒
LLL: MOV A,#12H ;东西路口绿灯亮;南北路口红灯亮
ACALL DISP
ACALL DE10S ;延时10秒
MOV A,#10H ;东西路口绿灯灭;南北路口红灯亮
ACALL DISP
MOV R2,#05H ;R2中的值为黄灯闪烁次数
TTT: MOV A,#14H ;东西路口黄灯亮;南北路口红灯亮
ACALL DISP
ACALL DE02S ;延时02秒
MOV A,#10H ;东西路口黄灯灭;南北路口红灯亮
ACALL DISP
ACALL DE02S ;延时02秒
DJNZ R2,TTT ;返回TTT,使东西路口;黄灯闪烁五次
MOV A,#11H ;两个红灯亮,黄灯、绿灯灭
ACALL DISP
ACALL DE02S ;延时02秒
MOV A,#21H ;东西路口红灯亮;南北路口绿灯亮
ACALL DISP
ACALL DE10S ;延时10秒
MOV A,#01H ;东西路口红灯亮;南北路口绿灯灭
ACALL DISP
MOV R2,#05H ;黄灯闪烁五次
GGG: MOV A,#41H ;东西路口红灯亮;南北路口黄灯亮
ACALL DISP
ACALL DE02S ;延时02秒
MOV A,#01H ;东西路口红灯亮;南北路口黄灯灭
ACALL DISP
ACALL DE02S ;延时02秒
DJNZ R2,GGG ;返回GGG,使南北路口;黄灯闪烁五次
MOV A,#03H ;两个红灯亮,黄灯、绿灯灭
ACALL DISP
ACALL DE02S ;延时02秒
JMP LLL ;转LLL循环
DE10S: MOV R5,#100 ;延时10秒
JMP DE1
DE3S: MOV R5,#30 ;延时3秒
JMP DE1
DE02S: MOV R5,#02 ;延时02秒
DE1: MOV R6,#200
DE2: MOV R7,#126
DE3: DJNZ R7,DE3
DJNZ R6,DE2
DJNZ R5,DE1
RET
DISP: MOV DPTR,#PORT ;273显示单元
CPL A
MOVX @DPTR,A
RET
END
你看看行不行 如果不行你自己再稍微改一下吧 反正大概就这些了
START:MOV R5,#00H ;次数计数单元R5,后面的程序应该看得懂了,都是教科书式的
MAIN: MOV A,R5
MOV DPTR,#TAB
MOV A,@A+DPTR
LCALL DISPLAY
CJNE,R5,#10,START ;次数到,从头再来
LJMP MAIN
DISPLAY: ;数码管显示子程序
LCALL DLY10MS
DLY10MS: ;数码管显示延时
TAB: DB ;数码管七段码表
SMG_1 EQU P10 ;P1为位选
SMG_2 EQU P11
SMG_3 EQU P12
SMG_4 EQU P13
ORG 0100H
JMP MAIN
ORG 0200H
MAIN:
call disp ;调用子程序
LJMP MAIN
DELAY:
MOV R5,#25
M1: MOV R6,#30
DJNZ R6,$
DJNZ R5,M1
RET
TMP:
DB 0C0H,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H
disp: ;原来中间的部分,现在,是一个子程序
MOV DPTR,#TMP
CLR A ;千位显示0
CLR SMG_1
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
CPL SMG_1
INC DPTR
CLR A ;百位显示1
CLR SMG_2
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
CPL SMG_2
INC DPTR
CLR A ;十位显示2
CLR SMG_3
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
CPL SMG_3
INC DPTR
CLR A ; 个位显示3
CLR SMG_4
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
CPL SMG_4
ret ;后面,要加上这句
END
稍稍做了一些改动:
/温度数码显示模块/
DISP1:
MOV R1, #70H
MOV R0, #74H
MOV R5, #0FEH
PLAY:
MOV DPTR, #TAB
MOV P2, #0FFH ;原来是 P1
MOV A, @R1
MOVC A, @A+DPTR
MOV P1, A
MOV A, @R0
MOVC A, @A+DPTR
MOV P0, A
MOV P2, R5
MOV A, R5
JB ACC1, LOOP1
CLR P17
CLR P07
LOOP1:
CALL DL1MS
INC R1
INC R0
JNB ACC3, ENDOUT
RL A
MOV R5, A
MOV A, 73H
数码管连接电路如图1所示,P0口输出码型,P2口输出位选。锁存器74HC573起驱动作用,提供驱动电流供数码管发光。译码器74HC138将位选地址转换成位选信号,例如当前是第5个数码管显示,那么P2口输出位选地址05H,译码器输入CBA=110,输出位选信号Y7-Y0=11101111,其中Y5=0,第5个数码管选通并显示,其它数码管不显示。实验时将J6的左边两个引脚针(1和2)用跳冒连接,锁存器11脚接VCC,关闭锁存功能。
数码管显示方式为动态扫描方式,当P0口送第一个数0的码型到锁存器时,P2送位选地址01H,即Y0=0,只有第一个数码管亮,显示0,其他数码管不显示。当P0口送第二个数1的码型到锁存器时,P2送位选地址02H,即Y1=0,只有第二个数码管亮,显示1,其他数码管不显示。即每次只有一个数码管点亮,8个数码管是轮流被点亮的,轮流点亮的间隔时间很短(一般用延时程序延时几个毫秒),由于视觉的暂留现象,看到的却好象全都点亮着,这就是动态扫描。
数码管显示数字的码型由数码管的数据脚a~dp决定,图2为数码管的笔段分布图,由于是共阴极的,所以当a~dp为高电平时相应的笔段会亮,电路中P10~P17分别接数码管的abcdefgdp,得到0~9这10个数字的码型如表1所示。
图2 数码管的笔段分布图
引脚 P07 P06 P05 P04 P03 P02 P01P00数字 码型
笔段 dp g f e d c b a
0 0 1 1 1 1 1 1 0 3FH
0 0 0 0 0 1 1 0 1 06H
0 1 0 1 1 0 1 1 2 5BH
0 1 0 0 1 1 1 1 3 4FH
0 1 1 0 0 1 1 0 4 66H
0 1 1 0 1 1 0 1 5 6DH
0 1 1 1 1 1 0 1 6 7DH
0 0 0 0 0 1 1 1 7 07H
0 1 1 1 1 1 1 1 8 7FH
0 1 1 0 1 1 1 1 9 6FH
1 0 0 0 0 0 0 0 小数点80H
只要把上面的相关数,改成学好就可以了。
以下程序实现6位数码管,每一位依次循环显示0--9
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV P2,#0FEH
MOV A,#00H
MOV DPTR,#TAB
LOOP:
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY
INC A
CJNE A,#0AH,LOOP
MOV A,P2
RL A
MOV P2,A
JB ACC6,SS1
MOV P2,#0FEH
SS1:
CLR A
SJMP LOOP
DELAY:
MOV R1,#2
L1: MOV R2,#200
L2: MOV R3,#200
L3: DJNZ R3,L1
DJNZ R2,L2
DJNZ R1,L3
RET SJMP $
ORG 0080H
TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
以上就是关于单片机 汇编 LED数码管动态显示全部的内容,包括:单片机 汇编 LED数码管动态显示、51单片机汇编问题 数码管动态显示 代码如下、急求单片机数码管显示交通灯倒计时的汇编程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)