; Processor AT89C51; Compiler ASEM-51 Proteus;====================================================================$NOMOD51$INCLUDE 8051MCU;============================================================
根据题目描述,我们可以将每个开关看作是一个投币口,取值为高表示投入了对应数值的硬币。根据题目给出的例子,四个开关的取值分别为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
原理图的画法如下:
- 将AT89C51处理器引脚P1.0连接到第一个投币口的开关引脚。
- 将AT89C51处理器引脚P1.1连接到第二个投币口的开关引脚。
- 将AT89C51处理器引脚P1.2连接到第三个投币口的开关引脚。
- 将AT89C51处理器引脚P1.3连接到第四个投币口的开关引脚。
- 将AT89C51处理器引脚P1.7连接到LED发光管的引脚。
- 将AT89C51处理器引脚P2连接到数码管的引脚。
以上是一种可能的原理图方案,具体的原理图设计还需要根据实际的硬件连接进行调整。
原文地址: http://www.cveoy.top/t/topic/jdIH 著作权归作者所有。请勿转载和采集!