十字路口电子交警的设计与功能实现
学院:计算机与控制工程学院
指导老师:邱秀芹
时间:2012.12.18
一、设计内容:设计十字路口交通灯及撞红灯报警控制系统,并实现两种功能。
二、设计要求:
1
①用8255A驱动三种颜色的发光二极管,模拟十字路口交通灯的功能。 ②当某一方向的红灯亮时,若该方向有车辆通过,则通过扬声器发声报警,告警声音要有所区别。 ③通过LED显示倒计时。 三 、程序流程图: 1.流程总图
开始
是否有中断? 是 初始化8255, 初始化8259 否 执行交通灯交替程序和倒计时显示程序 执行响铃中断子程序 2.交通灯与倒计时程序流程图
南北亮红灯,东西亮绿灯,标志位为1 2
十次软件延时与数码灯显示 南北亮黄灯,东西亮黄灯,标志位为 2, 南北亮绿灯,东西亮红灯,标志位为3 十次软件延时与数码灯显示 南北亮黄灯,东西亮黄灯,标志位为2,
3.响铃中断子程序 1 等于1或3? 3 否 初始化8254,执退出中断 初始化8254,执行响铃程序行响铃程序 BEGIN BEGIN
四、硬件接线图 1.8255与LED连线
3
2.8255与数码管连线
3.中断出发连线
4.8254响铃连线
4
五、程序代码
SSTACK SEGMENT STACK DW 32 DUP(?) SSTACK ENDS
DATA SEGMENT
DTABLE DB 6FH,7FH,07H,7DH,6DH,66H,4FH,5BH,06H,3FH COUNT DB ?
FREQ_LIST DW 475 TIME_LIST DB 4 FREQ_L DW 221 DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:
MOV AX,DATA MOV DS,AX MOV DX, 06H
MOV AL, 80H //初始化8255工作方式,输出a,b,c OUT DX, AL PUSH DS
MOV AX, 0000H MOV DS, AX
MOV AX, OFFSET MIR7 ;取中断入口地址 MOV SI, 003CH ;中断矢量地址 MOV [SI], AX ;填IRQ7的偏移矢量 MOV AX, CS ;段地址 MOV SI, 003EH
MOV [SI], AX ;填IRQ7的段地址矢量 CLI
POP DS ;初始化主片8259 MOV AL, 11H
OUT 20H, AL ;ICW1 MOV AL, 08H
5
OUT 21H, AL ;ICW2 MOV AL, 04H
OUT 21H, AL ;ICW3 MOV AL, 01H
OUT 21H, AL ;ICW4 MOV AL, 6FH ;OCW1 OUT 21H, AL STI AA1:
MOV COUNT,1
MOV DX, 00H MOV AL, 82H OUT DX, AL PUSH DX PUSH BX
MOV DX,04H MOV AL,11111110B OUT DX,AL
MOV DX,02H
MOV BX,OFFSET DTABLE MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL
6
INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY POP BX
POP DX AA2:
MOV COUNT,2 MOV DX, 00H
MOV AL, 18H OUT DX, AL CALL DELAY CALL DELAY CALL DELAY AA3:
7
MOV COUNT,3
MOV DX, 00H MOV AL, 44H OUT DX, AL PUSH DX PUSH BX
MOV DX,04H MOV AL,11111110B OUT DX,AL MOV DX,02H
MOV BX,OFFSET DTABLE MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY
8
CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY
MOV AL,DS:[BX] OUT DX,AL INC BX CALL DELAY CALL DELAY CALL DELAY POP BX POP DX AA4:
MOV COUNT,4 MOV DX, 00H MOV AL, 18H OUT DX, AL MOV DX,04H MOV AL,06H OUT DX,AL MOV DX,04H CALL DELAY CALL DELAY CALL DELAY MOV COUNT,0
JMP AA1 DELAY: PUSH CX MOV CX, 0FFFFH
9
AA6: PUSH AX POP AX LOOP AA6 POP CX RET MIR7 PROC NEAR PUSH DS PUSH DX PUSH AX
CMP COUNT,1 JZ BEGIN CMP COUNT,3
JNZ AAA1 BEGIN1:
MOV AX, DATA MOV DS, AX
MOV DX, 06C6H MOV AL, 36H OUT DX, AL
MOV SI,OFFSET FREQ_L
MOV DI,OFFSET TIME_LIST PLAY1: MOV DX,00H MOV AX,0F400H
DIV WORD PTR [SI] ;取出频率值计算计数初值,0F4240H / 输出频率 MOV DX,06C0H
OUT DX,AL ;装入计数初值 MOV AL,AH OUT DX,AL
MOV DL,[DI] ;取出演奏相对时间,调用延时子程序 CALL DALLY2 JMP AAA1 BEGIN:
MOV AX, DATA MOV DS, AX
MOV DX, 06C6H ;初始化8254工作方式 MOV AL, 36H ;定时器0 OUT DX, AL
MOV SI,OFFSET FREQ_LIST ;装入频率表起始地址
MOV DI,OFFSET TIME_LIST ;装入时间表起始地址 PLAY: MOV DX,0FH MOV AX,4240H
DIV WORD PTR [SI] MOV DX,06C0H
OUT DX,AL ;装入计数初值 MOV AL,AH
10
OUT DX,AL
MOV DL,[DI] ;取出演奏相对时间,调用延时子程序 CALL DALLY2 AAA1:MOV COUNT,0 MOV AL, 20H
OUT 20H, AL ;中断结束命令 POP AX POP DX POP DS
IRET
DALLY2 PROC ;延时子程序 D0: MOV CX,0010H D1: LOOP D1 DEC DL JNZ D0 RET
DALLY2 ENDP
MIR7 ENDP CODE ENDS END START
六、实验结果:
最终的实验可以实现红绿灯交替亮,当闯红灯时会发出不同的响铃,并还可以实现红绿灯亮时,单管进行10秒倒计时的功能。 七、实验心得:
通过本次课程设计,我发现自己的动手能力很差和对本门课程的知识掌握得不好。对各种芯片的功能和电路原理都不太懂。自己的在程序方面更加薄弱,差不多都是问同组的同学。但是通过这次课程设计,我对各种芯片更加了解,对课本的知识也更加掌握。在课程设计之前对很多知识都模棱两可的,不过感觉自己学得了很多,动手能力也得到了很大的进步。特别是在程序方面学到了很多,比如说8255的初始化。感谢老师和同学们的帮组才能很好地完成这次课程设计并能把不懂的问题得到解决。
11