单片机控制的交通灯

单片机控制的交通灯,第1张

题目 交通灯控制系统的设计

一、课程设计的目的与要求

1、课程设计目的:

(1)进一步理解和消化书本知识,运用所学知识和技能进行简单的设计。

(2)通过课程设计提高应用能力,分析问题和解决问题的能力。

(3)培养查阅资料的习惯,训练和提高自学,独立思考的能力。

2、课程设计要求

交通灯控制系统的设计

1) 掌握在单片机系统中扩展简单I/O接口的方法。

2) 掌握数据输出程序的设计方法。

3) 掌握模拟交通灯控制的实现方法。

4) 掌握外部中断技术的基本使用方法。

5) 掌握中断处理程序的编程方法。

从课程设计的目的出发,通过设计工作的各个环节,达到以下要求:

(1)能够正确理解课程设计的题目和意义,全面思考问题。

(2)运用科学合理的方法,认真按时完成。

二、课程设计课题的分析

1、电路的设计

1)原理

要完成本实验,首先必须了解交通灯的亮灭规律。本实验需要用到试验箱上八个发光二极管中的六个,即红、绿、黄各两个。将L1(红)、L2(绿)、L3(黄)作为东西方向的指示灯,将L5(红)、L6(绿)、L7(黄)作为南北方向的指示灯。交通灯的亮灭规律为:初始态是两个路口红灯全亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。闪烁若干次后,再切换到东西路口方向,重复上述过程。

各发光二极管的阳极通过保护电阻接到+5V的电源上,阴极接到输入端上,因此使其点亮使相应使相应输入端为低电平。

当有急救车到达时,两个方向上的红灯亮,以便让急救车通过,假设急救车通过路口的时间为10秒,急救车通过后,交通灯恢复中断前的状态。本程序以单次脉冲为中断申请,表示有急救车通过,单次脉冲输出端P-接CPU板上的INT0。

2)、硬件电路图

图1—1 交通灯控制系统的硬件接线图

74LS273的输出00—07接发光二极管L1—L8,74LS273的片选CS273接片选信号CS2,此时74LS273的片选地址为CFA0—CFA7之间任选。

3)、程序流程图

主程序流程

图1—2 主程序软件流程图

中断程序流程图

三、课程设计的结果

1、程序

NAME JIAOTONGGENG

OUTPORT EQU 0CFB0H ;端口地址

SAVE EQU 55H ;SAVE保存从端口CFA0输出的数据

CSEG AT 0000H

LJMP START

CSEG AT 4003H

LJMP INT

CSEG AT 4100H

START: SETB IT0 ;中断程序初始化

SETB EX0

SETB EA

MOV A,#11H ;置首显示码,两红灯全亮

MOV SAVE,A ;保存

ACALL DISP ;显示输出

ACALL DE3S ;延时3秒

LLL: MOV A,#12H ;东西路口绿灯亮,南北路口红灯亮

MOV SAVE,A

ACALL DISP

ACALL DE10S ;延时10秒

MOV A,#10H ;东西路口绿灯灭

MOV SAVE,A

ACALL DISP

MOV R2,#05H ;东西路口黄灯闪烁5次

TTT: MOV A,#14H

MOV SAVE,A

ACALL DISP

ACALL DE02S ;延时02秒

MOV A,#10H

MOV SAVE,A

ACALL DISP

ACALL DE02S

DJNZ R2,TTT

MOV A,#11H ;红灯全亮

MOV SAVE,A

ACALL DISP

ACALL DE02S ;延时02秒

MOV A,#21H ;东西路口红灯亮,南北路口绿灯亮

MOV SAVE,A

ACALL DISP

ACALL DE10S ;延时10秒

MOV A,#01H ;南北路口绿灯灭

MOV SAVE,A

ACALL DISP

MOV R2,#05H ;南北路口黄灯闪烁5次

KKK: MOV A,#41H

MOV SAVE,A

ACALL DISP

ACALL DE02S ;延时02秒

MOV A,#01H

MOV SAVE,A

ACALL DISP

ACALL DE02S

DJNZ R2,KKK

JMP LLL ;转SSS循环

DE10S: MOV R5,#100 ;延时10秒

JMP DE1

DE3S: MOV R5,#30 ;延时3秒

JMP DE1

DE02S: MOV R5,#02 ;延时02秒

DE1: MOV R6,#200

DE2: MOV R7,#126

DE3: DJNZ R7,DE3

DJNZ R6,DE2

DJNZ R5,DE1

RET

DISP: MOV DPTR,#OUTPORT

CPL A ;取反,点亮发光二极管

MOVX @DPTR,A

RET

;中断处理程序

INT: PUSH ACC ;有关寄存器入栈

PUSH PSW

MOV A,#11H ;两红灯全亮

ACALL DISP

ACALL DELAY

MOV A,SAVE ;将主程序中保存的数据再送给A

ACALL DISP

POP PSW ;有关寄存器出栈

POP ACC

RETI

DELAY:MOV R1,#100

DEL1 :MOV R2,#200

DEL2 :MOV R3,#126

DEL3 :DJNZ R3,DEL3

DJNZ R2,DEL2

DJNZ R1,DEL1

RET

END

2、现象

将程序输入到单片机中,运行程序,可以观察到现象:首先是两个路口的红灯全亮,延时3秒之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时10秒后,东西路口绿灯灭,黄灯开始闪烁。闪烁5次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时10秒后,南北路口的绿灯灭,黄灯开始闪烁。闪烁5次后,再切换到东西路口方向,重复上述过程。

当有中断申请时,两个方向上的红灯亮,经过10秒急救车通过之后,恢复到急救车到来之前的状态继续运行,可有多次的中断申请。

四、课程设计的心得与体会

1通过试验进一步理解和消化了书本知识,分析每个语句的含义,运用所学知识进行简单的程序设计。

了解了在单片机系统中扩展简单I/O接口的方法 外部中断技术的基本使用方法,掌握了中断处理程序的编程方法。

2通过在图书馆查阅各种单片机资料,培养了我自学和独立思考的能力。与同学交流研究,让我懂得了更多以前不明白的知识

3在课程设计过程中,不断调试程序和修改程序,提高了对单片机的应用能力,分析问题和解决问题的能力。

基于单片机的交通灯设计

时间:2010-12-08 21:43:12 来源: 作者:

一、 系统功能要求:

1 设计任务在一十字路口设置交通灯,并用单片机对其进行合理的控制。

时间方向 控制要求

白天 东西 绿灯 黄灯 红灯 南北 红灯 绿灯 黄灯

晚上 东西 黄灯 南北 红灯

2总体设计方案现在流行的一种设计为两主干线相交的十字路。本设计采用一主干道(南北方向),一从干道(东西方向)的路口,即主干道的通行时间为从干道的2倍。在正常情况下,两干道的交通灯按图1进行转换,并以倒计数的方式将剩余时间显示在每个干道对应的两位LED上;另发挥部分为当出现紧急情况时,路口的交通灯全为红灯,紧急情况解除时,恢复到原来的状态。

二、 总体设计方案提示:

1假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1东西绿灯通车,南北红灯。过一段时间转状态。

2东西绿灯灭,黄灯闪烁几次,南北仍然红灯。再转状态。

3南北绿灯通车,东西红灯。过一段时间转状态。

4南北绿灯灭,闪几次黄灯,延时几秒,东西仍然红灯。最后循环至状态1。

三.硬件设计

电路原理图如下:

四、软件设计

1、 流程图

2、程序设计

ORG 0000H

MOV P0,#00H ;确保P0为低电位

lJMP MAIN0

ORG 0030H

MAIN0: MOV 30H,#08H

MOV R6,#00H

MOV R7,#00H

MOV DPTR,#TABLE ;取数码管的译码

MOV TMOD,#01H ;设计定时方式及时间

MOV TL0,#0CDH

MOV TH0,#0BH

SETB TR0

MOV IE,#00H

MAIN: MOV P1,#0F3H ;南北绿灯,东西红灯

MOV R6,#1EH ;红灯30s倒计时

MOV R7,#19H ;绿灯25s倒计时

MAIN1:CALL DELAY ;1S延时子程序

JB P01,REL1 ;判断是否有东西方向按钮按下

CJNE R7,#00H,MAIN1 ;判断绿灯25s是否倒计完

MOV P1,#0F5H ;南北黄灯,东西红灯

MAIN2:CALL DELAY

MOV R7,#00H ;红灯继续倒计时,黄灯闪烁,保持0s

CPL P11 ;黄灯闪烁

CJNE R6,#00H,MAIN2 ;判断红灯是否倒计时完

MOV P1,#0DEH ;南北红灯,东西绿灯

MOV R7,#1EH

MOV R6,#19H

MAIN3:CALL DELAY

JB P00,REL2

CJNE R6,#00H,MAIN3

MOV P1,#0EEH

MAIN4:CALL DELAY

MOV R6,#00H

CPL P14

CJNE R7,#00H,MAIN4

JMP MAIN

REL1:MOV P1,#0F5H ;东西方向按钮按下,南北方向强制由绿灯变成黄灯警告

MOV R6,#05H

MOV R7,#00H

JMP MAIN2

REL2:MOV P1,#0EEH ;南北方向按钮按下,东西方向强制由绿灯变成黄灯警告

MOV R7,#05H

MOV R6,#00H

JMP MAIN4

;1s延时子程序

DELAY:MOV A,R6 ;进行南北方向倒计时时间的十进制调整

MOV B,#0AH

DIV AB

MOVC A,@A+DPTR ;找寻相应的数码管代码

MOV P2,#01H

MOV P3,A ;输出个位

MOV R4,#4 ;降低动态显示频率

LOOP2:MOV R3,#125

LOOP3:DJNZ R3,LOOP3

DJNZ R4,LOOP2

MOV A,B

MOVC A,@A+DPTR

MOV P2,#02H ;输出十位

MOV P3,A

MOV R4,#4

LOOP4:MOV R3,#125

LOOP5:DJNZ R3,LOOP5

DJNZ R4,LOOP4

MOV A,R7 ;进行东西方向倒计时时间的十进制调整

MOV B,#0AH

DIV AB

MOVC A,@A+DPTR

MOV P2,#04H

MOV P3,A

MOV R4,#4

LOOP6:MOV R3,#125

LOOP7:DJNZ R3,LOOP7

DJNZ R4,LOOP6

MOV A,B

MOVC A,@A+DPTR

MOV P2,#08H

MOV P3,A

MOV R4,#4

LOOP8:MOV R3,#125

LOOP9:DJNZ R3,LOOP9

DJNZ R4,LOOP8

JBC TF0,LOOP ;判断是否计满125ms

AJMP DELAY

LOOP:MOV TL0,#0CDH ;计满125ms重新给定时器赋值

MOV TH0,#0BH

MOV A,30H

DEC A

MOV 30H,A

JNZ DELAY ;判断是否计满8次125ms,即1s

DEC R6 ;计满1s,东西倒计时减1,南北倒计时减1

DEC R7

MOV 30H,#08H ;重新1s次数,重新计时

RET

TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H ;相应数值的数码管代码

DB 92H,82H,0F8H,80H,90H

END

ORG  0000H

LJMP START

ORG  0003H    ;INT 0 中断入口地址

LJMP INT0

ORG  0040H

START:

MOV SP,#60H

SETB EX0      ;INT 0 中断有效

SETB IT0

SETB EA

LCALL STATUS0 ;初始状态(都是红灯)

CIRCLE:

LCALL STATUS1 ;南北绿灯,东西红灯

LCALL STATUS2 ;南北绿灯闪转黄灯,东西红灯

LCALL STATUS3 ;南北红灯,东西绿灯

LCALL STATUS4 ;南北红灯,东西绿灯闪转黄灯

LJMP CIRCLE

INT0:

PUSH PSW      ;保护现场

PUSH 2

PUSH ACC

MOV DPTR,#8300H

MOV A,#0FH    ;南北,东西都亮红灯

MOVX @DPTR,A

MOV R2,#100   ;延时10秒

LCALL DELAY

POP ACC       ;恢复现场

MOVX @DPTR,A

POP 2

POP PSW

RETI

STATUS0:              ;南北红灯,东西红灯

MOV DPTR,#8300H

MOV A,#0FH

MOVX @DPTR,A

MOV R2,#10    ;延时1秒

LCALL DELAY

RET

STATUS1:              ;南北绿灯,东西红灯

MOV DPTR,#8300H

MOV A,#96H    ;南北绿灯,东西红灯

MOVX @DPTR,A

MOV R2,#200   ;延时20秒

LCALL DELAY

RET

STATUS2:              ;南北绿灯闪转黄灯,东西红灯

MOV DPTR,#8300H

MOV R3,#03H   ;绿灯闪3次

FLASH:

MOV A,#9FH

MOVX @DPTR,A

MOV R2,#03H

LCALL DELAY

MOV A,#96H

MOVX @DPTR,A

MOV R2,#03H

LCALL DELAY

DJNZ R3,FLASH

MOV A,#06H    ;南北黄灯,东西红灯

MOVX @DPTR,A

MOV R2,#10    ;延时1秒

LCALL DELAY

RET

STATUS3:              ;南北红灯,东西绿灯

MOV DPTR,#8300H

MOV A,#69H

MOVX @DPTR,A

MOV R2,#200   ;延时20秒

LCALL DELAY

RET

STATUS4:              ;南北红灯,东西绿灯闪转黄灯

MOV DPTR,#8300H

MOV R3,#03H   ;绿灯闪3次

FLASH1:

MOV A,#6FH

MOVX @DPTR,A

MOV R2,#03H

LCALL DELAY

MOV A,#69H

MOVX @DPTR,A

MOV R2,#03H

LCALL DELAY

DJNZ R3,FLASH1

MOV A,#09H   ;南北红灯,东西黄灯

MOVX @DPTR,A

MOV R2,#10   ;延时1秒

LCALL DELAY

NOP

RET

DELAY:                ;延时子程序

PUSH 2

PUSH 1

PUSH 0

DELAY1:

MOV 1,#00H

DELAY2:

MOV 0,#0B2H

DJNZ 0,$

DJNZ 1,DELAY2 ;延时 100 mS

DJNZ 2,DELAY1

POP 0

POP 1

POP 2

RET

END

这是我们的实验,程序肯定没问题。至于ULN2803,只是一个增大电流,电压的芯片,因为51单片机本身的电流太小。你改一下就好。至于其他不明白的地方,可以交流。QQ375778861

ORG 1000H

L:JNB P30,LP3

JNB P31,LP2 ;判断p31,p30口

;如果P30为1的话,正常运行交通灯

;如果P31为1的话,正常运行交通灯

;如果P31为0的话,依次点亮灯

;如果P30为0的话,停止交通灯,只有黄灯闪烁

;正常运行交通灯

LP1:

MOV P1,#61H

CLR P32

CLR P33

CLR P34

SETB P35 ;1,3 路口红灯亮,2,4 路口绿灯亮

LCALL DELAY1

MOV B,#04H ;设置循环次数为4次

M:MOV P1,#51H

CLR P35

SETB P34 ;1,3路口红灯亮,2,4路口黄灯亮

LCALL DELAY2

MOV P1,#41H

CLR P34 ;1,3路口红灯亮,2,4路口黄灯灭

LCALL DELAY2

DJNZ B,M

MOV P1,#0CH

SETB P32

SETB P33 ;1,3路口绿灯亮,2,4路口红灯亮

LCALL DELAY1

MOV B,#04H

N:MOV P1,#8AH

CLR P32 ;1,3路口黄灯亮,2,4路口红灯亮

LCALL DELAY2

MOV P1,#08H ;1,3路口黄灯灭,2,4路口红灯亮

LCALL DELAY2

DJNZ B,N

AJMP L

;黄灯闪

LP3: CLR P17

CLR P32

CLR P33

CLR P35

MOV P1,#92H

SETB P34 ;黄灯亮,其他的灯灭

LCALL DELAY2

MOV P1,#00H

CLR P34 ;所有的黄灯灭

LCALL DELAY2

AJMP L

;循环亮

LP2: CLR P32

CLR P33

CLR P34

CLR P35

MOV A,#01H ;赋初值

MOV R0,#08 ;循环变量,循环7次,控制7个灯

LOOP: MOV P1,A ;点亮第一个灯

LCALL DELAY2 ;延迟

RL A ;A的值加1,循环左移

DJNZ R0,LOOP ;RO的值减1不等于1则执行LOOP标号

SETB P32 ;P32灯亮

LCALL DELAY2 ;延迟

CLR P32 ;P32灯灭

SETB P33 ;下一个灯P33亮

LCALL DELAY2 ;延迟

CLR P33 ;P33灯灭

SETB P34 ;下一个灯P33亮

LCALL DELAY2 ;延迟

CLR P34 ;P34灯灭

SETB P35 ;P35灯亮

LCALL DELAY2 ;延迟

AJMP L

;延迟1

DELAY1 :

MOV R3,#200

DEL1: MOV R4,#250

DEL2: MOV R5,#50

DEL3: NOP ;空 *** 作

DJNZ R5,DEL3

DJNZ R4,DEL2

DJNZ R3,DEL1 ;延长5秒

RET

;延迟2

DELAY2 :

DEL4: MOV R3,#200

DEL5: MOV R4,#200

DEL6: NOP

DJNZ R4,DEL6

DJNZ R3,DEL5 ;延迟008秒

RET

END

以上就是关于单片机控制的交通灯全部的内容,包括:单片机控制的交通灯、用单片机做交通灯,这么做、AT89S51 单片机控制交通灯程序(汇编语言)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/12570425.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存