51汇编Proteus仿真教程 |
您所在的位置:网站首页 › proteus标号在哪 › 51汇编Proteus仿真教程 |
简介:
本文详细介绍如何使用51汇编的Proteus仿真去实现独立按键控制对应LED灯亮。此教程只做操作过程,不具体解释每一步具体含义,以极简的方式,通过操作让你实现相关功能。 前提条件: ①新建好相关的仿真工程,绘制好相关原理图 ②学会了IO口的基本控制 如果不具备以上条件,可以往回看相关教程,往期内容有较详细的讲解! 1、整体原理图如下
;========================= ; 按键检测子程序 ; 名称:KEY_SCAN ; 输入:空 ; 输出:空 ; 功能:检测按键是否被按下 ;========================= KEY_SCAN: SETB KEY1 SETB KEY2 SETB KEY3 SETB KEY4 KEY1_SCAN: JB KEY1, KEY2_SCAN ;按键1是否按下:是:继续执行,否:跳去检测按键2 ACALL DELAY_200MS ;消抖 JB KEY1, KEY2_SCAN ;按键1是否按下:是:继续执行,否:跳去检测按键2 AJMP KEY1_TASK ;跳转执行按键1的任务 KEY2_SCAN: JB KEY2, KEY3_SCAN ACALL DELAY_200MS JB KEY2, KEY3_SCAN AJMP KEY2_TASK KEY3_SCAN: JB KEY3, KEY4_SCAN ACALL DELAY_200MS JB KEY3, KEY4_SCAN AJMP KEY3_TASK KEY4_SCAN: JB KEY4, KEY_SCAN_END ACALL DELAY_200MS JB KEY4, KEY_SCAN_END AJMP KEY4_TASK KEY1_TASK: ;按键1任务 JNB KEY1, KEY1_TASK ;等待按键松开 MOV P0, #1 ;执行按键1对应的操作 AJMP KEY_SCAN_END ;跳出按键扫描程序 KEY2_TASK: JNB KEY2, KEY2_TASK MOV P0, #2 AJMP KEY_SCAN_END KEY3_TASK: JNB KEY2, KEY3_TASK MOV P0, #4 AJMP KEY_SCAN_END KEY4_TASK: JNB KEY4, KEY4_TASK MOV P0, #8 KEY_SCAN_END: RET ;========================= 4、具体效果展示(由于gif格式问题,显示有点问题)
;========================= ; 文件名称:main.asm ; 文件描述:汇编基本程序教程:按键 ; 创建人:lsh ; 创建日期: 2023.10.09 ; 程序版本:1.0 ; 完成日期:2023.10.09 ;=修改记录==== ; 修改人: ; 修改内容: ; 修改时间: ;========================= $NOMOD51 $INCLUDE (80C52.MCU) ; IO引脚定义 ;========================= KEY1 EQU P1.1 ; 定义P1.1口为KEY1 KEY2 EQU P1.2 ; 定义P1.2口为KEY2 KEY3 EQU P1.3 ; 定义P1.3口为KEY3 KEY4 EQU P1.4 ; 定义P1.4口为KEY4 SEG_DUAN EQU P0 ;定义P0口为SEG_DUAN ;========================= ;========================= org 0000h jmp Start ; 跳转到程序开始入口 ;========================= ; 主程序 ;========================= org 0100h Start: ;========================= ; 主程序的主循环 ;========================= Loop: ; 程序主循环 LCALL DELAY ; 调用延时子程序 LCALL KEY_SCAN AJMP Loop ; 跳转到程序主循环开头 ;========================= ;子程序 ;========================= ;========================= ; 延时子程序 ; 名称:DELAY ; 输入:空 ; 输出:空 ; 功能:占用cpu,实现延时一段时间 ;========================= DELAY: MOV R0,#228 DELAY1: MOV R1,#20 DELAY2: MOV R2,#20 DJNZ R2,$ DJNZ R1,DELAY2 DJNZ R0,DELAY1 RET ;========================= ;========================= ; 延时子200MS程序 ; 名称:DELAY_200MS ; 输入:空 ; 输出:空 ; 功能:占用cpu,实现延时一段时间 ;========================= DELAY_200MS: MOV R0,#48 DELAY_200MS1: MOV R1,#142 DELAY_200MS2: MOV R2,#9 DJNZ R2,$ DJNZ R1,DELAY_200MS2 DJNZ R0,DELAY_200MS1 RET ;========================= ; 按键检测子程序 ; 名称:KEY_SCAN ; 输入:空 ; 输出:空 ; 功能:检测按键是否被按下 ;========================= KEY_SCAN: SETB KEY1 SETB KEY2 SETB KEY3 SETB KEY4 KEY1_SCAN: JB KEY1, KEY2_SCAN ;按键1是否按下:是:继续执行,否:跳去检测按键2 ACALL DELAY_200MS ;消抖 JB KEY1, KEY2_SCAN ;按键1是否按下:是:继续执行,否:跳去检测按键2 AJMP KEY1_TASK ;跳转执行按键1的任务 KEY2_SCAN: JB KEY2, KEY3_SCAN ACALL DELAY_200MS JB KEY2, KEY3_SCAN AJMP KEY2_TASK KEY3_SCAN: JB KEY3, KEY4_SCAN ACALL DELAY_200MS JB KEY3, KEY4_SCAN AJMP KEY3_TASK KEY4_SCAN: JB KEY4, KEY_SCAN_END ACALL DELAY_200MS JB KEY4, KEY_SCAN_END AJMP KEY4_TASK KEY1_TASK: ;按键1任务 JNB KEY1, KEY1_TASK ;等待按键松开 MOV P0, #1 ;执行按键1对应的操作 AJMP KEY_SCAN_END ;跳出按键扫描程序 KEY2_TASK: JNB KEY2, KEY2_TASK MOV P0, #2 AJMP KEY_SCAN_END KEY3_TASK: JNB KEY2, KEY3_TASK MOV P0, #4 AJMP KEY_SCAN_END KEY4_TASK: JNB KEY4, KEY4_TASK MOV P0, #8 KEY_SCAN_END: RET ;========================= ;========================= END ; 程序结束 ;========================= 点赞、收藏加关注,下期不迷路! 更多精彩内容,请看往期! 一起学起来,让我们成为更优秀的自己!我们下期不见不散! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |