课程设计
单片机制作交通指示灯
电气工程学院
电信102班
马青林
1001020222
前言
交通的发达,标志着城市的发达,相对交通的管理则显得越来越重要。对于复杂的城市交通系统,为了确保安全,保证正常的交通秩序,十字路口的信号控制必需按照一定的规律变化,以便于车辆行人能顺利地通过十字路口。考虑到单片机具有物美价廉、功能强、使用方便灵活、可靠性高等特点,拟采用MCS - 51系列的单片机来实现十字路口交通信号灯的控制。 正常情况下,十字路口的红绿灯应交替变换, 以下设计中,用发光二极管来模拟信号灯,要求使用 8051定时器/ 计数器0作为定时器,假设南北和东西的通车时间都为30 s ,外部中断的延时为10 s ,要求对通行时间进行倒计时,从P1 口输出,以此来实现十字路口交通灯的指示功能。
交通灯在安全行车过程中起着十分重要的作用, 现在交通灯一般设在十字路口, 在醒目位置用红、绿、黄三种颜色的指示灯, 加上一个倒计时的显示计时器来控制行车, 对于一般情况下的安全行车、车辆分流发挥着作用,根据行车过程中出现的实际情况, 如何全面有效地利用交通灯指示交通情况,我们尝试用单片机来控制交通灯, 在软、硬件方面采取一些改进措施, 使交通灯在控制中灵活而有效。
当前,交通事业蓬勃发展,交通流量年年增长,大、中、小城市的
汽车、摩托车等各种车辆与日俱增,道路交通繁忙,经常有严重堵车现象,特别是在交叉口,机动车、非机动车、行人来往非常混乱,为了在叉口的各条干道实现合理的科学分流。本人根据单片机具有物美价廉、功能强,所以设计以下的控制系统,具体如下:
一.设计目的:
1、通过交通信号灯控制系统的设计,掌握80C51并行口传输数据的方法,以控制发光二极管的亮与灭;
2、用80C51作为输出口,控制十二个发光二极管熄灭,模拟交通灯管理.
3、通过单片机控制设计,熟练掌握汇编语言和C语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力;
4、完成控制系统的硬件设计、软件设计、仿真调试。
5,由于对面对的两个交通灯现象一样,同时合为一个,所以实验中控制6个灯就可以了。
二.设计要求:
交通信号灯模拟控制系统设计利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭。用8051做输出口,控制十二个发光二极管
燃灭,模拟交通灯管理。在一个交通十字路口有一条主干道(东西方向),一条从干道(南北方向),主干道的通行时间比从干道通行时间长,四个路口安装红,黄,绿,灯各一盏;
如图所示:
三.设计任务和内容:
任务:设计一个能够控制十二盏交通信号灯的模拟系统。并且要求交通信号灯按照交通规则的模试来运行。实验通过控制六个交通灯就好了。
内容:因为本课程设计是交通灯的单片机控制设计,所以要了解实际交通灯的变化情况和规律。假设一个十字路口为东西南北走向。然后转状态1南北红灯,东西绿灯通车。过一段时间转状态2东西绿灯灭,黄灯闪烁几次,南北仍然红灯。再转状态3,南北绿灯通车,东西红灯。过一段时间转状态4,南北绿灯灭,闪几次黄灯,东西仍然红灯。最后循环至状态1。
四.控制系统的总体要求:
因东西同属一个车道,南北属一条车道,因此控制一边的灯就可以了,现象一样
1.东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车;
2.延时一段时间后,东西路口的绿灯熄灭,黄灯开始延时并且开始闪烁,闪烁5次后,东西路口红灯亮,而同时南北路口的绿灯亮,南
北路口方向开始通车;
3.延时一段时间之后,南北路口的绿灯熄灭,黄灯开始延时并且开始闪烁,闪烁5次之后,再切换到东西路口方向;
之后重复1到3过程。。。。。。。
五.交通信号灯模拟控制系统设计程序流程图:
六、C程序为:#include"reg51.h"
#define uint unsigned int
#define uchar unsigned char
sbit r1=P0^2;
sbit y1=PO^1;
sbit b1=P0^0;
sbit r2=P0^7;
sbit y2=P0^6;
sbit b2=P0^5;
void delay(void)
{
uint i;
for(i=0;i<34530;i++);
}
void main(void)
{
uint i=0;
while(1)
{
r1=1;y1=0;b1=0;
r2=0;y2=0;b2=1;
for(i=0;i<5;i++)
delay();
r1=1;y1=0;b1=0;
r2=0;y2=1;b2=0;
for(i=0;i<1;i++)
delay();
r1=0;y1=0;b1=1;
r2=1;y2=0;b2=0;
for(i=0;i<5;i++)
delay();
r1=0;y1=1;b1=0;
r2=1;y2=0;b2=0;
for(i=0;i<1;i++)
delay
}
}
七、模拟交通灯电路原理图
八、调试与仿真
打开Keil程序,执行菜单命令“Project”、“New Project”创建“模拟交通
信号灯”项目,并选择单片机型号为AT89C51。
执行菜单命令“File”、“New”创建文件,输入汇编(C语言)源程序,
保存为“交通信号灯.ASM”或“模拟交通灯.C”。在“Project”栏的File项目管
理窗口中右击文件组,选择“Add File to Group ‘Source Group1’”,将源程序“模
拟交通灯.ASM”(或“模拟交通灯.C”)添加到项目中。
执行菜单命令“Project”、“Option for Target 'Target 1'”,在逃出的对话
框中选择“Output”选项卡,选中“Create HEX File ”。 在“Debug”选项卡中,
选中“Use:Proteus VSM Simulator”。
执行菜单命令“Project”、“Build Target”,编译源程序。如果编译成功,
则在“Debug Window”窗口中显示没有错误,并创建了“模拟交通灯.HEX”文
件。
在已绘制好的原理图的Proteus ISIS菜单栏中,执行菜单命令“Debug”、
“Use Remote Debug Monitor”将该项选中,使proteus与Keil真正连接起来,使
他们联合调试。
第二篇:微机课设报告交通灯控制系统设计
《微机原理实验》
课程设计报告
交通灯控制系统设计
学生姓名学 号专 业 电气工程与自动化 班 级同组学生 提交日期 2010 年 6 月20 日 指导教师
目 录
摘要·················································3
设计内容·············································3
设计原理及说明·······································4
设计过程·············································5
设计结果与分析·······································8
体会与建议···········································8
程序源代码···········································9
参考文献············································15
一、摘要
利用微机实验箱,以本市现行的交通灯控制信息为依据,用查询的方法实现交通灯控制系统。
二、设计内容
通过16个发光二极管及数码管,模拟十字路口的红绿灯,具体时间的分配和控制如下:
(1)东西方向绿灯亮,南北方向红灯亮,并且数码管10s倒计时显示
(2)东西方向黄灯亮,南北方向红灯亮,并且数码管5s倒计时显示
(3)东西方向红灯亮,南北方向绿灯亮,并且数码管10s倒计时显示
(4)东西方向红灯亮,南北方向黄灯亮,并且数码管5s倒计时显示 具体如下图所示:
要求:用8255的A口、B口控制16位LED灯,选择方式0,输出I/O接口电路控制数码管,使用软件延迟或硬件延迟,其中使用硬件延迟芯片8254计时更为精确。
三、设计原理及说明
8255的性质及简介:
并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位、32位等。8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/出方式、方式1--选通输入/出方式、方式2--双向选通工作方式。8255的内部结构及引脚如图1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图1-2所示。
实验说明:
由于实验室的仪器上只有16个发光二极管,所以还得弄清楚是每个发光二极管所代表的灯的颜色及方向。16个发光二级管,且从高到低依次为:D15D14D13D12D11D10D9D8 D7D6D5D4D3D2D1D0。在设计的过程中做了如下的规定:R表示红灯,G表示绿灯,Y表示黄灯,E表示方向东,W表示方向西,S表示方向南,N表示方向北,D15D14表示ER,D13D12表示SR,D11D10表示EG,D9D8表示SG,D7D6表示WR,D5D4表示NR,D3D2表示WG,D1D0表示NG,D15D14D11D10表示EY,D7D6D3D2表示WY,D13D12D9D8表示SY,D5D4D1D0表示NY。最后要在实验室通过软件进行调试,调试通过后即可看到设计的结果。
四、设计过程
(1)根据要求分析可知:
东西方向绿灯亮的同时南北方向红灯亮
东西方向黄灯亮的同时南北方向红灯亮 东西方向红灯亮的同时南北方向绿灯亮 东西方向红灯亮的同时南北方向黄灯亮
(2)完成单元电路的设计及参数计算
(3) 电路元器件的选择
(4)软件流程图的设计
(5)软件的设计(程序)
① 芯片初始化,写8255的方式字
② 延时,延时是通过设置指令的循环次数实现的
③ 东西方向绿灯亮,南北方向红灯亮,且数码管10s倒计时显示 ④ 东西方向黄灯亮,南北方向红灯亮,且数码管5s倒计时显示 ⑤ 东西方向红灯亮,南北方向绿灯亮,且数码管10s倒计时显示 ⑥ 东西方向红灯亮,南北方向黄灯亮,且数码管5s倒计时显示 ⑦ 判断是否有键按下
⑧ 返回到DOS
(6)电路接线图的设计:设计电路图见下图
(7)进行软、硬件调试
连接实验线路,将已写好的完整程序在汇编环境下进行编译,若无错误即可在TD-PIT++实验系统上进行调试。
五、设计结果与分析
灯亮的顺序满足设计内容的要求,不足之处在于使用软件延时,不是很精确,即计时时间只是大体上满足课设的要求。
六、体会与建议
实验所得结论基本课设的要求,但是存在一些不足之处。如果用硬件延时,则可以改变这一情况。但是要考虑到用8254如何计时1s的问题,有同学在设计中利用8254的工作方式3产生方波信号,当PC0检测到高电平,且下一时刻再次检测到低电平时,即两次检测PC0口分别为高、低电平时,便得到1秒的计时。而我在做这次实验时没有考虑到这一问题。但是在这次实验中,我也学到了一些东西,譬如刚开始的时候,我
们组设计的电路是很复杂的,后来经过与别的组的同学一起讨论以后,我们的线路得以精简,要在正确的基础上精简线路与程序是很重要的。另外,通过这次实验,我对8255芯片有了进一步的认识,同时对程序的设计也有了进一步的了解。
七、程序源代码
;****************根据查看端口资源修改下列符号值*******************
IOY0 EQU 0D400H ;片选IOY0对应的端口始地址
MY8255_A EQU IOY0+00H*4 ;8255的A口地址
MY8255_B EQU IOY0+01H*4 ;8255的B口地址
MY8255_C EQU IOY0+02H*4 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX,MY8255_MODE ;定义8255工作方式
MOV AL,10000000B ;工作方式0,A口和B口为输出10000000B OUT DX,AL
MOV DX,MY8255_A ;写A口发出的起始数据
MOV AL,00111100B
OUT DX,AL
MOV DX,MY8255_B ;写B口发出的起始数据
MOV AL,00111100B
OUT DX,AL
MOV DX,MY8255_C ;写C口发出的起始数据9
MOV AL,11110110B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;写C口发出的起始数据8 MOV AL,11111110B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;写C口发出的起始数据7 MOV AL,11100000B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,10111110B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,10110110B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,01100110B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,11110010B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,11011010B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,01100000B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,11111100B
OUT DX,AL 写C口发出的起始数据6 写C口发出的起始数据5 写C口发出的起始数据4 写C口发出的起始数据3 写C口发出的起始数据2 写C口发出的起始数据1 写C口发出的起始数据0
CALL DALLY
MOV DX,MY8255_A ;写A口发出的起始数据 MOV AL,11111100B
OUT DX,AL
MOV DX,MY8255_B ;写B口发出的起始数据 MOV AL,11111100B
OUT DX,AL
MOV DX,MY8255_C ;
MOV AL,01100110B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,11110010B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,11011010B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,01100000B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,11111100B
OUT DX,AL
CALL DALLY
;再次
MOV DX,MY8255_MODE ;
MOV AL,10000000B ;
OUT DX,AL
MOV DX,MY8255_A ;
MOV AL,11000011B
OUT DX,AL
写C口发出的起始数据4 写C口发出的起始数据3 写C口发出的起始数据2 写C口发出的起始数据1 写C口发出的起始数据0 定义8255工作方式 工作方式0,A口和B口为输出10001001B 写A口发出的起始数据
MOV DX,MY8255_B ;写B口发出的起始数据 MOV AL,11000011B
OUT DX,AL
MOV DX,MY8255_C ;写C口发出的起始数据9 MOV AL,11110110B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,11111110B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,11100000B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,10111110B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,10110110B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,01100110B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,11110010B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,11011010B
OUT DX,AL
CALL DALLY 写C口发出的起始数据8 写C口发出的起始数据7 写C口发出的起始数据6 写C口发出的起始数据5 写C口发出的起始数据4 写C口发出的起始数据3 写C口发出的起始数据2
MOV DX,MY8255_C ;写C口发出的起始数据1 MOV AL,01100000B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;写C口发出的起始数据0 MOV AL,11111100B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_A ;
MOV AL,11110011B
OUT DX,AL
MOV DX,MY8255_B ;
MOV AL,11110011B
OUT DX,AL
MOV DX,MY8255_C ;
MOV AL,01100110B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,11110010B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,11011010B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,01100000B
OUT DX,AL
CALL DALLY
MOV DX,MY8255_C ;
MOV AL,11111100B
OUT DX,AL
CALL DALLY
写A口发出的起始数据 写B口发出的起始数据 写C口发出的起始数据4 写C口发出的起始数据3 写C口发出的起始数据2 写C口发出的起始数据1 写C口发出的起始数据0
MOV AH,1 ;判断是否有按键按下
INT 16H
JZ BACK ;无按键则跳回继续循环,有则退出
QUIT: MOV AX,4C00H ;结束程序退出
INT 21H
DALLY PROC NEAR ;软件延时子程序
PUSH CX
PUSH AX
MOV CX,07FFFH
D1: MOV AX,0FFFFH
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALLY ENDP
BACK: JMP START
CODE ENDS
END START
八 参考文献
1. 王位喜 《微机原理实验与课程设计指导书》 南京航空航天大学金
城学院实验中心,20xx年1月
2. 沈国荣 《微机原理与接口技术》 南京大学出版社,20xx年1月