找回密码
 立即注册

QQ登录

只需一步,快速开始

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

小白求大佬解决LED灯单片机汇编代码 Proteus仿真没有现象

[复制链接]
跳转到指定楼层
楼主
ID:1028040 发表于 2022-5-19 21:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如下,用汇编语言编写:
利用单片机AT89S52、7个按键以及3个LED指示灯组成I/O控制实验系统。P0.0-P0.7与8个开关键相连,P1.0~P1.2与3个LED灯相连;利用按键控制LED指示灯亮与灭,完成如下功能:001 010 011  100 101 110 111
1.当P0.1开关键被按下时,P1.0~P1.2灯的状态依次为灭灭亮,即1的二进制状态001;
2.以此类推,当P0.7开关键被按下时,P1.0~P1.2灯的状态依次为亮亮亮,即7的二进制状态111;

代码如下:
ORG 0000H
        START:
        JNB P0.1,K2
        JNB P0.2,K3
        JNB P0.3,K4
        JNB P0.4,K5
        JNB P0.5,K6
        JNB P0.6,K7
        JNB P0.7,K8
        SJMP START
        ;-------------

        K2:
        CALL DL10MS
        JB P0.1,START
        JNB P0.1,$
                CLR P1.2
                SJMP START
    ;--------------
        K3:
        CALL DL10MS
        JB P0.2,START
        JNB P0.2,$
                CLR P1.1
                SJMP START
         ;--------------
         K4:
         CALL DL10MS
        JB P0.3,START
        JNB P0.3,$
                CLR P1.1
                CLR P1.2
                SJMP START
         ;--------------
         K5:
         CALL DL10MS
         JB P0.4,START
         JNB P0.4,$
                CLR P1.0
                SJMP START
         ;--------------
         K6:
          CALL DL10MS
        JB P0.5,START
        JNB P0.5,$
                CLR P1.0
                CLR P1.2
                SJMP START
         ;--------------
         K7:
          CALL DL10MS
        JB P0.6,START
        JNB P0.6,$
                CLR P1.0
                CLR P1.1
                SJMP START
         ;--------------
         K8:
           CALL DL10MS
        JB P0.6,START
        JNB P0.6,$
                MOV P1,#0
                SJMP START
        ;---------------
        DL10MS:
        MOV R6,#10
        DJNZ R7,$
        DJNZ R7,$
        DJNZ R6,$-4
        RET
        ;-------------
        END

         运行仿真没错误,但写入Proteus仿真却没有现象,求大佬帮忙看下
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1004455 发表于 2022-5-19 23:11 | 只看该作者
接口是不是没有定义,电平都调不到
回复

使用道具 举报

板凳
ID:624769 发表于 2022-5-20 08:01 来自手机 | 只看该作者
不知道你要的现象,是什么, 就k8而言,你p0.7跳过去,之后判断p0.6按键,那么,肯定是无效的。 然后整个代码,没有一个mov p1,#0ffh 的地方,你确定你程序走到最后,还能有变化么? 然后,仿真,真的做不到真的"仿真",那么简单的应用,不说学习版了,就算洞洞板搭一个,也用不了15分钟吧?
回复

使用道具 举报

地板
ID:123289 发表于 2022-5-20 10:06 | 只看该作者
K2:                   ;1、K2按下了来此,灯还未亮
CALL DL10MS     ;2、等了10ms,灯还未亮
JB P0.1,START    ;3、键抬起就回去,灯还未亮
JNB P0.1,$                ;4、键还按着就在此死等,灯还是未亮
CLR P1.2           ;5、键抬起了,亮灯
SJMP START      ;6、回头再来

如果硬件图不错,是下列情况:
按下见4、死等,灯还是未亮
抬起见5、抬起才亮。

也可以这样简化,先将按键转成0-7,直接送P1显示:(按下亮灯,不按不亮)
ST: MOV R0, #8  ;8个键判8次
    MOV R1, #0  ;末3位表示按入键值,按下P10=00,按下P17=07,未按下=08H
    MOV A, P0   ;取键
LP: RRC A       ;移出一位,移8次结束,先低后高
    JNC EX      ;看看是否按下了,按下就去EX显示了,后面的键不再处理了(无需去抖)。
    INC R1      ;未按,R1=预估为下个键值
    DJNZ R0, LP ;8个键全判断结束
    JMP ST      ;无键按下重头再来
;有键按下
XE: MOV A, R1        ;A的末3位=键值
    CPL A       ;键值送出P1前,需要求反,因为灯是负逻辑,0亮1暗。
    OR  A, #11111000B  ;不是灯的位=1,目的是不影响P1的其它位值
    ORL P1, #00000111B ;灭灯(1暗),但不影响P1的其它位
    ANL P1, A          ;按键值亮灯,但不影响P1的其它位
    JMP ST
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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