微机原理与接口技术--十字路口电子交警的设计与功能实现

功能要求

1、用 8255A 驱动三种颜色的 6 只发光二极管,模拟十字路口交通灯的功能。
2、当某一方向的红灯亮时,若该方向有车辆通过,则用扬声器发声报警,不同方向的
告警声音要有所区别。
3、通过中断进行定时,通过 LED 显示倒计时。

硬件组成

软件实现

主程序框图

中断服务子程序

蜂鸣器程序

时钟变换程序

代码如下

DATA SEGMENT  'DATA'  ;数据段
      
DATA ENDS
STACK SEGMENT STACK   ;堆栈段
   STA DB 245 DUP(0)
STACK ENDS
CODE SEGMENT 'CODE'  ;代码段
    ASSUME CS:CODE,DS:DATA,SS:STACK
   ICW1    EQU   13H  ;单片8259,上升沿中断,写ICW4
   ICW2    EQU   20H  ;中断号为20H 
   ICW4    EQU   03H  ;工作在8086/88 方式,自动结束
   OCW1    EQU  0DFH ;允许IR5中断
START:
   MOV AX,DATA
   MOV DS,AX 

   CLI;禁能中断
   PUSH  DS
   ;中断向量表初始化
   MOV   AX ,0
   MOV   DS ,AX
   MOV   BX, (20H +5)*4 ;IR5中断号
   MOV   AX, CODE
   MOV   CL, 4
   SHL   AX, CL        
   ADD   AX, OFFSET CLOCK_INT    ;时钟中断入口地址
   MOV   [BX], AX
   MOV   AX, 0
   INC   BX
   INC   BX
   MOV   [BX], AX    
   
   POP DS
   
   MOV   DX, 400H
   MOV   AL, ICW1  ;单片8259,上升沿中断,写ICW4
   OUT   DX, AL
   MOV   DX, 402H
   MOV   AL, ICW2  ;中断号为20H
   OUT   DX, AL
   MOV   AL, ICW4  ;工作在8086/88 方式,自动结束
   OUT   DX, AL
   MOV   AL, OCW1  ;允许IR5中断
   OUT   DX, AL
   STI  ;启动中断
   
   MOV  DX,006H
   MOV  AL,36H  ;设置8253计数器0,为方式3,先低位再高位
   OUT  DX,AL 

   MOV DX,000H
   MOV AX,1000  ;1000倍分频输出100Hz方波
   OUT DX,AL
   MOV DX,000H
   MOV AL,AH
   OUT DX,AL

   MOV  DX,006H
   MOV  AL,76H  ;设置8253计数器1,为方式3,先低位再高位 
   OUT  DX,AL 

   MOV DX,002H
   MOV AX,2250 ;2250倍分频,输出100Hz方波
   OUT DX,AL
   MOV DX,002H
   MOV AL,AH
   OUT DX,AL
   
   MOV AL,89H  ;设置8255的ABC口
   MOV DX,206H
   OUT DX,AL 

   MOV CH,15  ;设置默认时间为15秒
   MOV AL,0DEH  ;①  南北方向红灯亮,东西方向绿灯亮
   MOV DX,200H
   OUT DX,AL
   MOV CL,0  ;设置显示模式为0
AGAIN:  	
   MOV DX,204H
   IN AL,DX
   TEST AL,01H;0东西方向有车辆通过 按钮按下
   JNZ A2
A10:  TEST AL,01H
   IN AL,DX
   JZ A10
   CMP CL,2
   JNE DX0
   ;东西方向红灯,且有车辆通过
   JMP DX2
DX0:CMP CL,3
   JNE DX1
   ;东西方向红灯,且有车辆通过
   JMP DX2
DX2:CALL BEEP1
DX1:JMP DIS

A2:TEST AL,02H;南北方向有车辆通过 按钮按下
   JNZ DIS
A20:  TEST AL,02H
   IN AL,DX
   JZ A20
   CMP CL,0
   JNE NB0
   ;南北方向红灯,且有车辆通过
   JMP NB2
NB0:CMP CL,1
   JNE NB1
   ;南北方向红灯,且有车辆通过
   JMP NB2
NB2:CALL BEEP2
NB1:   
   JMP DIS
   
DIS:  MOV AL,CH ;获取当前时间
   MOV AH,0
   MOV BL,10
   DIV BL
   SHL AL,1 ;时长数据处理,将十位放到高4位
   SHL AL,1
   SHL AL,1
   SHL AL,1
   OR AL,AH ;将个位放到低4位
   MOV DX,202H
   OUT DX,AL ;第一个数码管显示时长的十位,第二个数码管显示时长的个位
   
   JMP AGAIN
   
;接收8253的1Hz中断
CLOCK_INT:
   PUSH AX
   PUSH DX
   CLI
   ;正常交通灯模式
   DEC CH ;时长减1
   CMP CH,0 ;判断倒计时是否减到0
   JNE C00
   INC CL ;模式加1
   CMP CL,1
   JNE CLK1
   ;CL=1,则进入②
   MOV CH,5 ;设置时长为5秒
   MOV AL,0DDH ;②南北方向红灯亮,东西方向黄灯亮
   MOV DX,200H
   OUT DX,AL
   JMP C00
CLK1: CMP CL,2
   JNE CLK2
   ;CL=2,则进入③
   MOV CH,15 ;设置时长为15秒
   MOV AL,0F3H ;③南北方向绿灯亮,东西方向红灯亮
   MOV DX,200H
   OUT DX,AL
   JMP C00
CLK2:  CMP CL,3
   JNE CLK3
   ;CL=3,则进入④
   MOV CH,5;设置时长为5
   MOV AL,0EBH;④南北方向黄灯亮,东西方向红灯亮
   MOV DX,200H
   OUT DX,AL
   JMP C00
CLK3: CMP CL,4
   JNE C00
   MOV CL,0
   ;CL=4,则赋值为0,进入①
   MOV CH,15;设置时长为15
   MOV AL,0DEH;①南北方向红灯亮,东西方向绿灯亮
   MOV DX,200H
   OUT DX,AL
   JMP C00      
C00:  STI
   POP DX
   POP AX
   IRET
   
;蜂鸣器报警1
BEEP1 PROC NEAR
   PUSH DX
   PUSH AX
   MOV  DX,006H
   MOV  AL,0B7H;设置8253计数器2,为方式3,先低位再高位 
   OUT  DX,AL 

   MOV DX,004H;8253计数器2
   MOV AL,80H;0080倍分频
   OUT DX,AL
   MOV AL,00H
   OUT DX,AL
   CALL DELAY
   MOV DX,006H
   MOV AL,0B5H;设置8253计数器2,为方式2
   OUT DX,AL
   POP AX
   POP DX
   RET
BEEP1 ENDP
;蜂鸣器报警2
BEEP2 PROC NEAR
   PUSH DX
   PUSH AX
   MOV  DX,006H
   MOV  AL,0B7H;设置8253计数器2,为方式3,先低位再高位 
   OUT  DX,AL 

   MOV DX,004H;8253计数器2
   MOV AL,00H;0100倍分频
   OUT DX,AL
   MOV AL,01H
   OUT DX,AL
   CALL DELAY
   MOV DX,006H
   MOV AL,0B5H;设置8253计数器2,为方式2
   OUT DX,AL
   POP AX
   POP DX
   RET
BEEP2 ENDP
;延时子程序
DELAY PROC NEAR
   PUSH CX
   PUSH BX
   MOV BX,1000
DLY2:MOV CX,100
DLY1:NOP
   NOP
   NOP
   LOOP DLY1 
   DEC BX
   JNZ DLY2
   POP BX
   POP CX
   RET
DELAY ENDP
CODE ENDS 
END START

  功能特点

  十字交通灯及警报主要运用8255、8253、8259的综合设计,实现红绿灯的变化,实现了由红转绿转黄在转红的特点,并且红灯和绿灯都是保持在15s的时长,黄灯保持在5s。之后车辆的通行是通过按钮来模拟,当有红灯时,若此时按下按钮代表有红灯闯过,则对应的蜂鸣器会发出声响,同时南北方向和东西方向的蜂鸣器声音不同,是因为两个蜂鸣器的频率不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桂月二二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值