AT89C51 汇编程序实现投币机功能

本程序使用 AT89C51 微控制器,实现投币机功能。程序模拟四个投币口,根据开关状态判断投入硬币数量,并将总数显示在数码管上。如果总数超过给定值,LED 发光管闪烁。

功能需求

  1. 每个开关看作是一个投币口,取值为高,表示投入了对应数值的硬币。四个开关的取值分别为 1、1、2、5。
  2. 在数码管上显示已投币值总数。
  3. 如果已投币值总数超过给定值(在程序中设定),则 LED 发光管闪烁,否则不亮。

汇编程序代码

; Processor: AT89C51
; Compiler: ASEM-51 (Proteus)
;====================================================================
$NOMOD51
$INCLUDE (8051.MCU)

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

;====================================================================
; VARIABLES
;====================================================================
coin1   equ P1.0 ; 第一个投币口开关
coin2   equ P1.1 ; 第二个投币口开关
coin3   equ P1.2 ; 第三个投币口开关
coin4   equ P1.3 ; 第四个投币口开关
total   equ R0   ; 已投币值总数

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

      ; Reset Vector
      org   0000h
      jmp   Start

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

      org   0100h
Start:	
      ; 初始化已投币值总数为0
      clr   total

      ; 无限循环
Loop: 
      ; 检测第一个投币口开关,如果为高表示投入1个硬币
      jnb   coin1, Coin2
      inc   total

Coin2:
      ; 检测第二个投币口开关,如果为高表示投入1个硬币
      jnb   coin2, Coin3
      inc   total

Coin3:
      ; 检测第三个投币口开关,如果为高表示投入2个硬币
      jnb   coin3, Coin4
      add   total, #2

Coin4:
      ; 检测第四个投币口开关,如果为高表示投入5个硬币
      jnb   coin4, Display
      add   total, #5

Display:
      ; 在数码管上显示已投币值总数
      mov   P2, total

      ; 检测已投币值总数是否超过给定值,如果超过则闪烁LED发光管,否则不亮
      cjne  total, #10h, NoBlink
      mov   P3.0, #0
      sjmp  Loop

NoBlink:
      mov   P3.0, #1

      ; 延时函数
      call  DELAY

      ; 重新开始循环
      sjmp  Loop

DELAY:
   mov   R1, #0FFH
DELAY_1:
   mov   R2, #0FFH
   djnz  R2, $
   djnz  R1, DELAY_1
   ret

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

原理图绘制

根据程序中的代码,需要连接四个投币口开关到 P1 口的相应引脚(P1.0 ~ P1.3),并将数码管连接到 P2 口,LED 发光管连接到 P3.0 口。此外,还需要连接外部晶振、电源等。具体的原理图绘制可以使用电子设计软件(如 Proteus)来完成。

总结

本程序使用 AT89C51 微控制器,模拟了四个投币口,并根据投入的硬币数量显示总数,以及判断是否超过给定值而控制 LED 发光管的闪烁。程序设计简单易懂,方便学习和理解 AT89C51 的基本应用。

AT89C51 汇编程序实现投币机功能

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

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