单片机交通灯控制器课程设计.docx
- 文档编号:2028623
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:30
- 大小:283.22KB
单片机交通灯控制器课程设计.docx
《单片机交通灯控制器课程设计.docx》由会员分享,可在线阅读,更多相关《单片机交通灯控制器课程设计.docx(30页珍藏版)》请在冰点文库上搜索。
单片机交通灯控制器课程设计
江西理工大学
单片机综合课程设计报告
设计题目:
交通灯控制器
设计者:
学号:
班级:
指导老师:
设计报告
电路设计
软件设计
平时分
总评
格式
(5)
内容
(15)
原理图
(15)
板子外观
(15)
程序
(15)
调试情况
(15)
(20)
完成时间:
2010年7月
第1章MCS-51单片机概述1
1.1引言1
1.2单片机概述1
1.3芯片简介1
第2章交通灯控制器2
2.1设计目的3
2.2设计要求3
2.3设计方案3
第3章交通灯控制器设计4
3.1交通灯控制器硬件设计4
3.1.1材料选用4
3.1.2交通灯硬件电路连接图4
3.1.3数码管的连接5
3.2控制器的软件设计6
3.2.1主程序6
3.2.2第一状态程序6
3.2.3第二状态程序7
3.2.4第三状态程序8
3.2.5第四状态程序9
3.2.6第五状态程序10
3.2.7每秒钟的设定10
附录11
致谢18
参考文献19
第1章MCS-51单片机概述
1.1引言
当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。
但这一技术在19世纪就已出现了。
1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。
这是世界上最早的交通信号灯。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。
它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。
1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。
电气启动的红绿灯出现在美国,这种红绿灯由红绿黄三色圆形的投光器组成,1914年始安装于纽约市5号大街的一座高塔上。
红灯亮表示“停止”,绿灯亮表示“通行”。
1918年,又出现了带控制的红绿灯和红外线红绿灯。
带控制的红绿灯,一种是把压力探测器安在地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下嗽叭,就使红灯变为绿灯。
红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。
红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。
信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。
绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。
左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。
红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。
1.2单片机概述
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:
中央处理器、存储器和I/O接口电路等。
因此,单片机只需要和适当的软件与外部设备相结合,便可成为一个单片机控制系统。
单片机经过1、2、3、3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引角的多功能化,以与低电压底功耗。
1.3.芯片简介
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。
INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。
下图是MCS-51系列单片机的内部结构示意图
图2
图1-1MCS-51结构框图
MCS-51的引脚说明:
MCS-51系列单片机中的8031、8051与8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
图1-2MCS-51的引脚图
第2章交通灯控制器
2.1设计目的
(1)掌握单片机定时,计数器的编程应用。
(2)通过对交通灯控制程序的编写与调试,掌握中断程序的结构
(3)进一步熟练使用开发系统的各种调试方法。
2.2设计要求
东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。
红灯亮禁止通行,绿灯亮允许通行。
黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。
2.3设计方案
设东西道比南北道的车流量大,指示灯燃亮的方案如表2-1
330S
3S
225S
3S
……
东西道
绿灯亮
黄灯闪
红灯亮
红灯亮
……
南北道
红灯亮
红灯亮
绿灯亮
黄灯闪
……
表2-1指示灯燃亮图
(1)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;南北道为绿灯,此道车辆通过,行人禁止通行。
时间为25秒。
(2)黄灯闪烁3秒,警示车辆和行人红、绿灯的状态即将切换。
(3)当东西方向为绿灯,此道车辆通行;南北方向为红灯,南北道车辆禁止通过,行人通行。
时间为30秒。
东西方向车流大通行时间长。
(4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。
系统状态流程图:
图2-1系统状态流程图
第3章交通灯控制器设计
系统总框图如下:
图3-1系统总框图
3.1交通灯控制器硬件设计
3.1.1材料选用:
选用设备89V51单片机一片选用设备:
89v51弹片机一片,共阴极的两位七段数码管一个,发光二极管红黄绿灯各四个,开关键盘、连线若干。
3.1.2交通灯硬件电路连接图
图3-2硬件电路连接图
3.1.3数码管的连接
LED灯的显示原理:
通过同名管脚上所加电平的高低来控制发光二极管是否点量而显示不同的字形。
图3-37段数码管引脚连接图
①控制2管亮⑥控制1管亮
①②g2亮⑥⑩d1亮
①③f2亮⑥⑨dp1亮
①④a2亮⑥⑧e1亮
①⑤b2亮⑥⑦c1亮
①⑦c2亮⑥⑤b1亮
①⑧e2亮⑥④a1亮
①⑨dp2亮⑥③f1亮
①⑩d2亮⑥②g1亮
3.2控制器的软件设计
图3-4程序流程图
3.2.1主程序:
voidmain()
{
P0=0XFF;
P1=0xFF;
P2=0xFF;
EA=1;//打开外部中断
EX0=1;//允许外部中断0中断
IT0=0;//INT0为沿触发方式
init1();
while
(1)
{
init2();//第2个状态
init3();//第3个状态
init4();//第4个状态
init5();//第5个状态
}
}
3.2.2第一状态程序
voidinit1()//第一个状态:
东西、南北方向均亮红灯5S
{
uinttemp;
temp=6;//变量赋初值
TMOD=0x01;//定时器0工作于方式1
TH0=0x4c;
TL0=0x00;//定时器赋初值
EA=1;//开外部中断
ET0=1;//开定时中断
TR0=1;//开定时器0
while
(1)
{
RED_DONGXI=0;//第一个状态东西、南北均亮红灯5S
RED_NANBEI=0;
GREEN_DONGXI=1;
GREEN_NANBEI=1;
YELLOW_DONGXI=1;
YELLOW_NANBEI=1;
if(aa==10)//定时20*50MS=1S
{
aa=0;//定时完成一次后清0
temp--;//变量自增
//delay(10);
if(temp>250)//定时100S
{
temp=6;//变量清0
break;
}
shi=temp%100/10;//显示十位
ge=temp%10;//显示个位
}
display(ge,shi);
}
}
3.2.3第二状态程序
voidinit2()//第二个状态:
东西亮绿灯30S、南北亮红灯
{
uinttemp;
temp=31;//变量赋初值
TMOD=0x01;//定时器0工作于方式1
TH0=0x4c;
TL0=0x00;//定时器赋初值
EA=1;//开外部中断
ET0=1;//开定时中断
TR0=1;//开定时器0
while
(1)
{
RED_DONGXI=1;
RED_NANBEI=0;
GREEN_DONGXI=0;
GREEN_NANBEI=1;
YELLOW_DONGXI=1;//第二个状态:
东西亮绿灯30S、南北亮红灯
YELLOW_NANBEI=1;
if(aa==20)//定时20*50MS=1S
{
aa=0;//定时完成一次后清0
temp--;//变量自增
if(temp==4)//定时100S
{
temp=30;//变量清0
break;
}
shi=temp%100/10;//显示十位
ge=temp%10;//显示个位
}
display(ge,shi);
}
}
3.2.4第三状态程序
voidinit3()//第三个状态:
东西绿灯闪3次转亮黄灯、南北亮红灯3S
{
uinttemp;
temp=4;//变量赋初值
TMOD=0x01;//定时器0工作于方式1
TH0=0x4c;
TL0=0x00;//定时器赋初值
EA=1;//开外部中断
ET0=1;//开定时中断
TR0=1;//开定时器0
while
(1)
{
RED_NANBEI=0;
GREEN_DONGXI=1;
//YELLOW_DONGXI=~YELLOW_DONGXI;
if(aa==20)//定时20*50MS=1S
{
aa=0;//定时完成一次后清0
temp--;//变量自增
YELLOW_DONGXI=~YELLOW_DONGXI;
if(temp>200)//定时100S
{
temp=4;//变量清0
break;
}
shi=temp%100/10;//显示十位
ge=temp%10;//显示个位
}
display(ge,shi);;
}
}
3.2.5第四状态程序
voidinit4()//第四个状态:
东西亮红灯、南北亮绿灯25S
{
uinttemp;
temp=26;//变量赋初值
TMOD=0x01;//定时器0工作于方式1
TH0=0x4c;
TL0=0x00;//定时器赋初值
EA=1;//开外部中断
ET0=1;//开定时中断
TR0=1;//开定时器0
while
(1)
{
RED_DONGXI=0;
RED_NANBEI=1;
YELLOW_DONGXI=1;//第一个状态东西、南北均亮红灯5S
GREEN_NANBEI=0;
if(aa==20)//定时20*50MS=1S
{
aa=0;//定时完成一次后清0
temp--;//变量自增
if(temp==4)//定时100S
{
temp=25;//变量清0
break;
}
shi=temp%100/10;//显示十位
ge=temp%10;//显示个位
}
display(ge,shi);
}
}
3.2.6第五状态程序
voidinit5()//第五个状态:
东西亮红灯、南北绿灯闪3次转亮黄灯3S
{
uinttemp;
temp=4;//变量赋初值
TMOD=0x01;//定时器0工作于方式1
TH0=0x4c;
TL0=0x00;//定时器赋初值
EA=1;//开外部中断
ET0=1;//开定时中断
TR0=1;//开定时器0
while
(1)
{
RED_NANBEI=1;
RED_DONGXI=0;
GREEN_DONGXI=1;
GREEN_NANBEI=1;
//YELLOW_NANBEI=~YELLOW_NANBEI;
if(aa==20)//定时20*50MS=1S
{
aa=0;//定时完成一次后清0
temp--;//变量自增
YELLOW_NANBEI=~YELLOW_NANBEI;
if(temp>200)//定时100S
{
temp=4;//变量清0
break;
}
shi=temp%100/10;//显示十位
ge=temp%10;//显示个位
}
display(ge,shi);
}
}
3.2.7每秒钟的设定
利用MCS-51内部定时器产生溢出中断来确定1秒的时间,采用在主程序中设定一个初值为20的软件计数器和使T0定时50毫秒.这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。
在中断服务子程序中,CPU先使软件计数器减1,然后判断它是否为零。
为零表示1秒已到可以返回到输出时间显示程序。
附录:
程序源代码
#include
#include
#defineucharunsignedchar//宏定义
#defineuintunsignedint//宏定义
sbitRED_DONGXI=P1^0;
sbitYELLOW_DONGXI=P1^1;
sbitGREEN_DONGXI=P1^2;
sbitRED_NANBEI=P1^3;
sbitYELLOW_NANBEI=P1^4;
sbitGREEN_NANBEI=P1^5;
uintaa,bai,shi,ge,bb;//定义变量
/*数码管显示0-9*/
uintcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*子函数声明*/
voiddelay(uintz);
voiddelay0(uintz);
//voidinit(uinta);
voiddisplay(uintshi,uintge);
voidxtimer0();
voidinit1();
voidinit2();
voidinit3();
voidinit4();
voidinit5();
voidxint1();
voidxint0();
voidLED_ON();
voidLED_OFF();
/*********************************************************
主函数
*********************************************************/
voidmain()
{
P0=0XFF;
P1=0xFF;
P2=0xFF;
EA=1;//打开外部中断
EX0=1;//允许外部中断0中断
IT0=0;//INT0为沿触发方式
init1();
while
(1)
{
init2();//第2个状态
init3();//第3个状态
init4();//第4个状态
init5();//第5个状态
}
}
voidinit1()//第一个状态:
东西、南北方向均亮红灯5S
{
uinttemp;
temp=6;//变量赋初值
TMOD=0x01;//定时器0工作于方式1
TH0=0x4c;
TL0=0x00;//定时器赋初值
EA=1;//开外部中断
ET0=1;//开定时中断
TR0=1;//开定时器0
while
(1)
{
RED_DONGXI=0;//第一个状态东西、南北均亮红灯5S
RED_NANBEI=0;
GREEN_DONGXI=1;
GREEN_NANBEI=1;
YELLOW_DONGXI=1;
YELLOW_NANBEI=1;
if(aa==10)//定时20*50MS=1S
{
aa=0;//定时完成一次后清0
temp--;//变量自增
//delay(10);
if(temp>250)//定时100S
{
temp=6;//变量清0
break;
}
shi=temp%100/10;//显示十位
ge=temp%10;//显示个位
}
display(ge,shi);
}
}
voidinit2()//第二个状态:
东西亮绿灯30S、南北亮红灯
{
uinttemp;
temp=31;//变量赋初值
TMOD=0x01;//定时器0工作于方式1
TH0=0x4c;
TL0=0x00;//定时器赋初值
EA=1;//开外部中断
ET0=1;//开定时中断
TR0=1;//开定时器0
while
(1)
{
RED_DONGXI=1;
RED_NANBEI=0;
GREEN_DONGXI=0;
GREEN_NANBEI=1;
YELLOW_DONGXI=1;//第二个状态:
东西亮绿灯30S、南北亮红灯
YELLOW_NANBEI=1;
if(aa==20)//定时20*50MS=1S
{
aa=0;//定时完成一次后清0
temp--;//变量自增
if(temp==4)//定时100S
{
temp=30;//变量清0
break;
}
shi=temp%100/10;//显示十位
ge=temp%10;//显示个位
}
display(ge,shi);
}
}
voidinit3()//第三个状态:
东西绿灯闪3次转亮黄灯、南北亮红灯3S
{
uinttemp;
temp=4;//变量赋初值
TMOD=0x01;//定时器0工作于方式1
TH0=0x4c;
TL0=0x00;//定时器赋初值
EA=1;//开外部中断
ET0=1;//开定时中断
TR0=1;//开定时器0
while
(1)
{
RED_NANBEI=0;
GREEN_DONGXI=1;
//YELLOW_DONGXI=~YELLOW_DONGXI;
if(aa==20)//定时20*50MS=1S
{
aa=0;//定时完成一次后清0
temp--;//变量自增
YELLOW_DONGXI=~YELLOW_DONGXI;
if(temp>200)//定时100S
{
temp=4;//变量清0
break;
}
shi=temp%100/10;//显示十位
ge=temp%10;//显示个位
}
display(ge,shi);;
}
}
voidinit4()//第四个状态:
东西亮红灯、南北亮绿灯25S
{
uinttemp;
temp=26;//变量赋初值
TMOD=0x01;//定时器0工作于方式1
TH0=0x4c;
TL0=0x00;//定时器赋初值
EA=1;//开外部中断
ET0=1;//开定时中断
TR0=1;//开定时器0
while
(1)
{
RED_DONGXI=0;
RED_NANBEI=1;
YELLOW_DONGXI=1;//第一个状态东西、南北均亮红灯5S
GREEN_NANBEI=0;
if(aa==20)//定时20*50MS=1S
{
aa=0;//定时完成一次后清0
temp--;//变量自增
if(temp==4)//定时100S
{
temp=25;//变量清0
break;
}
shi=temp%100/10;//显示十位
ge=temp%10;//显示个位
}
display(ge,shi);
}
}
voidinit5()//第五个状态:
东西亮红灯、南北绿灯闪3次转亮黄灯3S
{
uinttemp;
temp=4;//变量赋初值
TMOD=0x01;//定时器0工作于方式1
TH0=0x4c;
TL0=0x00;//定时器赋初值
EA=1;//开外部中断
ET0=1;//开定时中断
TR0=1;//开定时器0
while
(1)
{
RED_NANBEI=1;
RED_DONGXI=0;
GREEN_DONGXI=1;
GREEN_NANBEI=1;
//YELLOW_NANBEI=~YELLOW_NANBEI;
if(aa==20)//定时20*50MS=1S
{
aa=0;//定时完成一次后清0
temp--;//变量自增
YELLOW_NANBEI=~YELLOW_NANBEI;
if(temp>200)//定时100S
{
temp=4;//变量清0
break;
}
shi=temp%100/10;//显示十位
ge=temp%10;//显示个位
}
display(ge,shi);
}
}
/*显示子函数*/
voiddisplay(uintshi,uintge)
{
P0=0xfd;
P2=table[shi];//显示十位
d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 交通灯 控制器 课程设计
文档标签
- 单片机交通灯课程设计
- 交通灯控制器课程设计实验
- 单片机课程设计交通灯控制
- 单片机课程设计交通灯控制系统
- 交通灯控制器单片机设计
- 交通灯课程设计控制器
- 单片机课程设计定时器控制
- 道路交通灯控制器课程设计
- 单片机课程设计彩灯控制器
- 单片机控制交通灯设计
- 交通灯控制微机课程设计
- 单片机课程设计简易交通信号控制器单片机课程设计
- 模拟交通灯控制器课程设计
- 单片机交通灯控制器课程设计
- 单片机课程设计单片机动态控制64个彩灯单片机课程设计
- 单片机交通灯课程设计报告
- 单片机交通灯毕业课程设计
- 单片机课程设计交通灯设计
- 单片机课程设计交通灯模拟
- 单片机交通灯课程设计资料
- 单片机交通灯课程设计报告
- 单片机课程设计报告交通灯
- 单片机课程设计双机通讯