{ "title": "8051 汇编语言实现投币机功能", "description": "使用 8051 微控制器编写汇编程序实现简单的投币机功能,通过四个开关模拟投币口,数码管显示投币总数,并通过 LED 发光管指示是否达到设定值。", "keywords": "8051, 汇编语言, 投币机, 数码管, LED, 闪烁, 给定值", "content": "$NOMOD51 $INCLUDE (8051.MCU)

;==================================================================== ; DEFINITIONS ;====================================================================

;==================================================================== ; VARIABLES ;==================================================================== ORG 20H DB 0 ; 存储已投币值总数 DB 50 ; 给定值

;==================================================================== ; RESET and INTERRUPT VECTORS ;====================================================================

  ; Reset Vector
  org   0000h
  jmp   Start

;==================================================================== ; CODE SEGMENT ;====================================================================

  org   0100h

Start: ; Write your code here MOV A, P1 ; 将投币口状态读入A寄存器 ANL A, #0Fh ; 只保留低4位,高4位清零 ADD A, 30h ; 将投入的硬币值转换为ASCII码 MOV P2, A ; 将结果显示在数码管上 ADD 20H, P1.0 ; 将投币口1的状态加到存储已投币值总数的变量上 ADD 20H, P1.1 ; 将投币口2的状态加到存储已投币值总数的变量上 ADD 40H, P1.2 ; 将投币口3的状态的2倍加到存储已投币值总数的变量上 ADD A, P1.3 ; 将投币口4的状态加到存储已投币值总数的变量上 ADD A, 20H ; 将存储已投币值总数的变量加到A寄存器上 MOV R0, A ; 将结果存储到R0寄存器 MOV A, 50H ; 将给定值移动到A寄存器 CJNE R0, A, NOT_EXCEED ; 如果已投币值总数不超过给定值,则跳转到NOT_EXCEED SETB P1.7 ; 如果已投币值总数超过给定值,则LED发光管闪烁 SJMP START ; 无限循环 NOT_EXCEED: CLR P1.7 ; 如果已投币值总数不超过给定值,则LED发光管不亮 SJMP START ; 无限循环

;==================================================================== END


原文地址: https://www.cveoy.top/t/topic/bqlQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录