根据题目描述,我们可以将每个开关看作是一个投币口,取值为高表示投入了对应数值的硬币。根据题目给出的例子,四个开关的取值分别为1、1、2、5。

在数码管上显示已投币值总数,我们可以使用一个变量来存储已投币值总数。每当一个开关取值为高时,将对应的硬币面额加到已投币值总数中。

如果已投币值总数超过给定值(在程序中设定),则LED发光管闪烁。我们可以使用一个LED发光管来表示投币值是否超过给定值。当已投币值总数超过给定值时,LED发光管闪烁;否则,LED发光管不亮。

以下是完整的汇编程序:

; Processor: AT89C51
; Compiler:  ASEM-51 (Proteus)
;====================================================================

$NOMOD51
$INCLUDE (8051.MCU)

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

;====================================================================
; VARIABLES
;====================================================================
coin_value_total   equ 20    ; 设定的已投币值总数阈值

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

      ; Reset Vector
      org   0000h
      jmp   Start

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

      org   0100h
Start:  
      ; Write your code here
      MOV C, P1.0
      JNC  NO_COIN
      MOV A, #1
      ADD coin_value_total, A
NO_COIN:
      MOV C, P1.1
      JNC  NO_COIN_1
      MOV A, #1
      ADD coin_value_total, A
NO_COIN_1:
      MOV C, P1.2
      JNC  NO_COIN_2
      MOV A, #2
      ADD coin_value_total, A
NO_COIN_2:
      MOV C, P1.3
      JNC  NO_COIN_3
      MOV A, #5
      ADD coin_value_total, A
NO_COIN_3:
      MOV A, coin_value_total
      ANL A, #0Fh
      MOV P2, A
      CJNE coin_value_total, #20, NOT_EXCEED
      SETB P1.7
      SJMP BLINK_LED
NOT_EXCEED:
      CLR P1.7
BLINK_LED:
      CALL DELAY
      jmp START

DELAY:
   MOV R1, #0FFH
DELAY_1:
   MOV R2, #0FFH
   DJNZ R2, $
   DJNZ R1, DELAY_1
   RET
;====================================================================
      END

原理图的画法如下:

  1. 将AT89C51处理器引脚P1.0连接到第一个投币口的开关引脚。
  2. 将AT89C51处理器引脚P1.1连接到第二个投币口的开关引脚。
  3. 将AT89C51处理器引脚P1.2连接到第三个投币口的开关引脚。
  4. 将AT89C51处理器引脚P1.3连接到第四个投币口的开关引脚。
  5. 将AT89C51处理器引脚P1.7连接到LED发光管的引脚。
  6. 将AT89C51处理器引脚P2连接到数码管的引脚。

以上是一种可能的原理图方案,具体的原理图设计还需要根据实际的硬件连接进行调整。

; Processor AT89C51; Compiler ASEM-51 Proteus;====================================================================$NOMOD51$INCLUDE 8051MCU;============================================================

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

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