问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

一段数码管动态显示一行六位数字的程序,求解析所有代码含义。越详细越好

发布网友 发布时间:2022-05-05 23:57

我来回答

1个回答

热心网友 时间:2023-10-10 03:00

;这个程序的基本流程是:
;1.把content中的数字对应的断码找出,并依次存放到LEDBuf中
;2.依次送LEDBuf中的断码到LED上,LED显示对应字符

OUTBIT equ 08002h ;将位码送至此地址,位码表示显示哪一位LED管
OUTSEG equ 08004h ;将断码送至此地址,断码表示在指定的LED管上显示什么字符

data segment
Content db 1,2,3,0dh,0eh,0fh ;要显示的数字
LEDBuf db 6 p(?) ;要显示的数字对应的断码

;LEDMAP给出的是断码表,表示16进制数到断码的映射。总共16个,分别表示0-f。
;比如第一个3fh就是0的断码,断码送到LED中,LED会自动显示0。
LEDMAP:
db 3fh,06h,5bh,4fh,66h,6dh,7dh,,07h
db 7fh,6fh,77h,7ch,39h,5eh, 79h,71h
data ends
code segment
assume cs:code, ds:data

;Delay的目的就是为了让LED灯上的内容停留,以便看清
Delay proc
push cx
mov cx,100h
loop $ ;这里的循环目的是暂停一段时间,让LED上的数字停留,以便人看清
pop cx
ret
Delay endp

;DisplayLED做的事:把LEDbuf中内容全部显示到LED灯上。LEDbuf中6个断码,对应6个LED灯。
DisplayLED proc near
mov bx, offset LEDBuf
mov cx, 6 ;总共显示6个断码
mov ah, 00100000b ;位码,00100000b中1的位置指示了要显示的数位,当前是1在左起第六个,也就是显示6号LED灯
;后面有shr指令会将这个00100000b右移,这样变成00010000,显示5号LED,以此类推。

DLoop: mov dx, OUTBIT
mov al, 0
out dx,al;将0送端位码端口,表示当前不选中任何LED,即关闭LED

mov al, [bx] ;将LEDbuf中的一个断码,送入al
mov dx, OUTSEG
out dx,al;送断码,表示要在LED中显示这个字符

mov dx, OUTBIT
mov al, ah
out dx, al ;送位码,表示要显示哪一个LED灯

call Delay;上面送完断码,位码后,在相应的LED上就显示相应的字符,Delay可以让这个字符停留一段时间,视觉滞留。
shr ah, 1;位码右移,显示下一个LED
inc bx;bx加1,那么[bx]就指向LEDbuf中的下一个断码
loop Dloop;这个Dloop循环把LEDbuf中的六个断码依次全部送到对应LED上显示
ret
DisplayLED endp

;Start:程序的入口,从这里开始运行程序
Start proc near
mov ax, data
mov ds, ax
mov cx,6;显示六个字符
mov ah,0;ah是content中的偏移量,从0->5,分别找出content中各个字节内容
mov si,offset ledbuf

redo: mov bx,offset content
mov al,ah;后面的xlat指令要使用al
xlat;xlat的作用al<-[bx+al],也就是将bx这个地址(content)起的第al个字节内容送到al中
mov bx,offset ledmap
xlat;将此时al中的数字对应的断码找出,并放到al中。(数字a对应的断码就是ledmap起第a个字节的数据)
mov [si],al;将找到的断码放到LEDbuf中
inc si;LEDbuf地址加1,存放下一个断码
inc ah;找content中下一个数字的断码
loop redo ;整个redo循环做的事:把content中数字对应的断码放到LEDbuf中,循环最后结果是LEDbuf变成:06h,5bh,4fh,5eh,79h,71h
show: call displayled
jmp show;在LED上一直显示这6个字符
start endp
code ends
end start
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
想买红米但没银行卡 开美宜佳便利店是加盟好还是直接转一个美宜佳店好 ...就给你一个交易号,能到美宜佳付款,请问美宜佳是怎样付款的_百度知 ... 用美宜佳代购会不会看到我买的东西 重返帝国弓弩营对诸葛连弩有加成吗 重返帝国城市风格选什么好 重返帝国城市风格选择推荐 重返帝国城市风格怎么切换 重返帝国城市如何切换风格 重返帝国城市风格大全 特色兵种及增益介绍 重返帝国特殊兵种怎么生产-特殊兵种生产攻略 重返帝国怎么训练诸葛弩 在51单片机1位数码管以1秒为时间间隔的动态显示的程序怎么写 单个数码管显示程序怎么编写 编写程序,实现一位共阳数码管显示,并且可用四个按键实现加1、减1清0的功能_百度问一问 一位数码管循环显示1-9的汇编程序怎么写? 在51单片机中1位位数码管显示的编程怎么写啊, 请问一下关于在linuxAS4下安装oracle10g的小问题 十三经是否包括了四书五经? 不属于十三经的著作是什么? 柠檬皮厚薄怎么分别 8848新款M4是全金属机身吗 8848新款M4私人订制款要多久? 8848钛金手机M4发布会规格高吗? 8848钛金手机的参数配置 8848m4跟m5充电器一样样么功率 小寻电话手表现出一串英文后,可以狂按开关机键吗? 乐s1怎样恢复出厂设置 第一次小米小寻手表能连接上,第二次,连接上什么信息都没有了? 家教机S1怎么恢复出厂设置?? 孜然猪肉卷怎么做 小寻电话手表存储空间不足怎么办? 我有一段数码管显示程序,为什么把各个位的显示程序拿到一起就显示出错,分开测试就都能显示? 由51单片机驱动的1位共阳数码管显示数字0到9的程序(由p1口驱动,晶振位12MHZ) 腾讯QQ电脑管家2018纯净版,也就是现在最新版,需要台式电脑什么操作系统,多少GB内存的最低支持呢? 途观&#x00CA;摇控器升降玻璃失灵如何处理? 请各位大神帮帮忙注释一下下面的(51单片机)代码,这是一个数码管显示程序里的延时函数? 我的是XP系统,2G内存。用电脑管家2018年9月正式版纯净版V12.13。老是要自动刷屏浏览器的网页。怎么办? 2018年9月最新版本的电脑管家V12.15版本不支持XP操作系统了,为什么变成这样? c51单片机单数码管显示C语言程序 用西门子plc控制一个数码管显示数字程序 电脑配置很渣有办法优化一下吗 应怎样编写LED数码管显示程序? 如何教小狗泰迪定地点小便 现在大三什么时候考研 快来说说看零基础可以做会计吗? 怎么训练狗狗在固定地方大小便? 荣耀路由和荣耀路由pro区别吗 微信的性别如何不设置男女?怎么操作? 性生活对男人就那么重要吗 性生活和谐,对婚姻到底有多重要 零基础什么做会计?