找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 983|回复: 9
打印 上一主题 下一主题
收起左侧

8086汇编语言 按键控制发光二极管

[复制链接]
跳转到指定楼层
楼主
具体要求:基于8086芯片实现。按键要求能够实现对二极管的点亮与熄灭的控制,用S1~S4组成的键盘分别控制4个发光二极管的点亮,S5按键来熄灭各二极管。按键具有防抖动功能,例如:S1点亮1号灯,按S5可以将其熄灭。S2点亮2号灯,按S5可以将其熄灭。这是我网上找的其他魔改的,只能到这一步了,请各位大哥门请教指正一下看看图,看看代码能不能简化,小弟拜上。

代码如下:
CODE SEGMENT
ASSUME CS:CODE

IOCON   EQU 8006H
IOA     EQU 8000H
IOB     EQU 8002H

START:

MOV AL, 90H ;
MOV DX, IOCON ;
OUT DX, AL ;

MOV DX, IOA ;
MOV AL, 0FFH
OUT DX, AL

MOV AL, 0FFH ;
MOV DX, IOB
OUT DX, AL

MOV BL,0FFH
TIMER:
MOV DX, IOA ;
IN AL, DX ;

CALL DELAY_MS ;
IN AL, DX ;

CMP AL, 0FEH ;
JE LED0
CMP AL, 0FDH
JE LED1
CMP AL, 0FBH
JE LED2
CMP AL, 0F7H
JE LED3
CMP AL, 07FH
JE LED_OFF

JMP TIMER ;
LED0:
AND AL, BL
MOV DX, IOB
OUT DX, AL
MOV BL,AL
JMP TIMER

LED1:
AND AL, BL
MOV DX, IOB
OUT DX, AL
MOV BL,AL
JMP TIMER

LED2:
AND AL, BL
MOV DX, IOB
OUT DX, AL
MOV BL,AL
JMP TIMER

LED3:
AND AL, BL
MOV DX, IOB
OUT DX, AL
MOV BL,AL
JMP TIMER

LED_OFF:
MOV AL, 0FFH
MOV BL,0FFH
MOV DX, IOB
OUT DX, AL
JMP TIMER
DELAY_MS:
PUSH CX
MOV CX, 1000
JMP DELAY_LOOP

DELAY_LOOP:
DEC CX ;
JNZ DELAY_LOOP

POP CX
RET ;
CODE ENDS
END START


323232.png (172.02 KB, 下载次数: 47)

323232.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:73992 发表于 2023-12-22 11:40 来自手机 | 只看该作者
要增加程序存储器ROM,数据存储器RAM。最起码8086有地方取指令吧
回复

使用道具 举报

板凳
ID:883242 发表于 2023-12-22 13:25 | 只看该作者
你贴的图是proteus的,给出来的文件是multisim的,完全是驴唇对不上马嘴,只能证明你根本就没有看过,随便从网上搜来的东西,一点儿都不理解,也不打算理解,就发出来让大家算命。
回复

使用道具 举报

地板
ID:1057978 发表于 2023-12-22 15:12 | 只看该作者
while(1)
{
uchar a=按键检测();
if(a==S1)
{
点亮LED1;
}
……
if(a == S5)
{
熄灭LED1;
熄灭LED2;
……
sleep(10);
}


}

回复

使用道具 举报

5#
ID:1105655 发表于 2023-12-23 13:42 | 只看该作者
Hephaestus 发表于 2023-12-22 13:25
你贴的图是proteus的,给出来的文件是multisim的,完全是驴唇对不上马嘴,只能证明你根本就没有看过,随便 ...

第一次发帖求助,没经验,不小心加错文件了,大哥再看看
回复

使用道具 举报

6#
ID:1105655 发表于 2023-12-23 13:43 | 只看该作者
wangxiangtan 发表于 2023-12-22 15:12
while(1)
{
uchar a=按键检测();

你这是c,我这是汇编大哥
回复

使用道具 举报

7#
ID:1105655 发表于 2023-12-23 13:44 | 只看该作者
lyonkon 发表于 2023-12-22 11:40
要增加程序存储器ROM,数据存储器RAM。最起码8086有地方取指令吧

改了一下,大哥再看看,我已经基本实现了功能,看看有没有其他问题
回复

使用道具 举报

8#
ID:73992 发表于 2023-12-23 21:01 | 只看该作者
子程序跳转到其他子程序,再跳转到另外一个程序,然后再跳,这样写的人不多。在追求锦上添花的地方可以这样写。
因为程序多了容易乱。而且逻辑分析太麻烦。
我建议:1,逻辑功能的子程序功能尽量单一,小程序,只开机调用一次的除外。便于分析 检查
             2,子程序需要其他程序功能的,以调用为主。跳转为辅。大脑能理解数十个嵌套跳转的人除外。
例1:
         led1_ON..............作为子程序1带返回
         led2_ON..............作为子程序2带返回
         led3_ON..............作为子程序3带返回
         delay1..................作为子程序4带返回
先将上面子程序写好

start:                   //主程序
        如果按键1按下
        跳转到start1
        如果按键2按下
        跳转到start2
        
start1:
        调用延时
        按键1没有按下 跳转到 start1_end  否则下一条
        调用 led1_ON
start1_end:
        跳转到start3
start2:

start3:end
以上的例子你可以先试试看。
回复

使用道具 举报

9#
ID:1105655 发表于 2023-12-24 19:13 | 只看该作者
lyonkon 发表于 2023-12-23 21:01
子程序跳转到其他子程序,再跳转到另外一个程序,然后再跳,这样写的人不多。在追求锦上添花的地方可以这样 ...

回复

使用道具 举报

10#
ID:996773 发表于 2023-12-25 09:23 | 只看该作者
虽然我也是玩汇编的,没耐心看,但是看到8000h很惊讶,就一个点灯程序用这么大的地址干嘛

就一个点灯能上天?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表