;==================================================================== ; Main.asm file generated by New Project wizard ; ; Created: 周二 九月 5 2023 ; Processor: AT89C51 ; Compiler: ASEM-51 (Proteus) ;====================================================================

$NOMOD51 $INCLUDE (8051.MCU)

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

;==================================================================== ; VARIABLES ;====================================================================

SW1 EQU P1.0 ; 开关1 SW2 EQU P1.1 ; 开关2 SW3 EQU P1.2 ; 开关3 SW4 EQU P1.3 ; 开关4 led EQU P1.7 ; LED发光管 display EQU P0 ; 数码管

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

  ; Reset Vector
  org   0000h
  jmp   Start

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

  org   0100h

Start: ; 初始化 MOV display, #0 ; 清空数码管 CLR led ; 关闭LED发光管

  ; 设置初始已投币值总数
  MOV   r0, #0         ; 用r0寄存器作为累加器

Loop: ; 检查每个开关的取值,累加到r0寄存器中 MOV a, SW1 ; 读取开关1的取值 CJNE a, #0, SW1_1 ; 如果开关1为高,则跳转到SW1处理 MOV a, SW2 ; 读取开关2的取值 CJNE a, #0, SW2_1 ; 如果开关2为高,则跳转到SW2处理 MOV a, SW3 ; 读取开关3的取值 CJNE a, #0, SW3_1 ; 如果开关3为高,则跳转到SW3处理 MOV a, SW4 ; 读取开关4的取值 CJNE a, #0, SW4_1 ; 如果开关4为高,则跳转到SW4处理 JMP Next ; 如果没有任何开关为高,则跳过累加过程

SW1_1: ADD r0, #1 ; 累加1到r0寄存器 JMP Next

SW2_1: ADD r0, #1 ; 累加1到r0寄存器 JMP Next

SW3_1: ADD r0, #2 ; 累加2到r0寄存器 JMP Next

SW4_1: ADD r0, #5 ; 累加5到r0寄存器 JMP Next

Next: ; 显示已投币值总数到数码管 MOV a, r0 ; 将r0寄存器的值传递给累加器 MOV display, a ; 显示累加器的值到数码管

  ; 检查已投币值总数是否超过给定值
  MOV   a, r0          ; 将r0寄存器的值传递给累加器
  CJNE  a, #10, End_1   ; 如果已投币值总数不等于10,则跳转到End处理
  SETB  led            ; 打开LED发光管
  SJMP  Loop           ; 重复执行Loop

End_1: END


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

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