51汇编Proteus仿真教程

您所在的位置:网站首页 proteus标号在哪 51汇编Proteus仿真教程

51汇编Proteus仿真教程

2024-07-07 13:33| 来源: 网络整理| 查看: 265

简介:

本文详细介绍如何使用51汇编的Proteus仿真去实现独立按键控制对应LED灯亮。此教程只做操作过程,不具体解释每一步具体含义,以极简的方式,通过操作让你实现相关功能。 前提条件: ①新建好相关的仿真工程,绘制好相关原理图 ②学会了IO口的基本控制 如果不具备以上条件,可以往回看相关教程,往期内容有较详细的讲解!

1、整体原理图如下

在这里插入图片描述

2、独立按键原理图

在这里插入图片描述 这里使用的按键的名称BUTTON。将按键的一端连接在一起与GND相连,另一端连接到对应的IO口:P1.0,P1.2,P1.3,P1.4,通过检测IO是否为低电平,判断按键是否按下。

3、按键检测子程序程序

;========================= ; 按键检测子程序 ; 名称: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格式问题,显示有点问题)

在这里插入图片描述 在这里插入图片描述

5、完整程序

;========================= ; 文件名称: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