交通灯课程设计任务Word
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机课程设计课题交通灯
目录
任务书 ................................... 摘要..................................
一、绪论 (1)
1.1 概述 (1)
1.2 设计目的 (1)
1.3 设计要求 (1)
二、总体设计 (2)
2.1总框图 (2)
2.2 电路图 (3)
2.3 工作原理 (3)
2.4 所用元件 (4)
三、各部分电路设计 (4)
3.1芯片介绍 (4)
3.2晶振电路 (6)
3.3 复位电路 (7)
3.4 显示电路 (8)
3.5 数码管 (9)
3.6 C语言程序 (10)
四、整体电路图 (15)
五、设计总结 (16)
六、致谢 (17)
参考文献 (24)
摘要
本设计是交通信号灯控制系统,随着社会的不断的进步,社会的不断发展。
交通也日渐复杂,交通的自动化也不断更新,交通的一些指挥系统光靠人来完成是远远不够的,这就需要设计各种交通指挥自动化系统来完成这些复杂的工作。
从而使交通指挥系统更加有秩序,更加安全。
至此本人设计了交通信号灯控制系统,来指挥十字路口车辆的停通,使红绿灯指挥系统实现自动化,无人化。
该交通灯控制系统控制的是A和B两个方向上的车辆通行,系统共采用6个发光二极管来模拟各路交通信号灯,2个LED七段数码管以倒计时的方式显示各个方向上允许通行或禁止通行的信号灯剩余的时间。
并能通过控制开关的关与断来控制A、B通道上的红绿灯亮的状态,从而可以应付各种特殊情况。
、
关键词:STC89C51 LED 交通灯程序
一、绪论
1.1概述
近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。
交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
1.2设计目的
1 熟练掌握AT89C51开发板的使用方法和注意事项、keil软件编辑、Proteus等对电路的设计和仿真的操作方法及应用编程器烧操作方法
2 了解简单单片机应用系统的设计方法,进一步理解和消化书本知识,运用所学知识和技能进行简单的设计
通过某一电路的综合设计,了解某一电路的综合设计过程、设计要求进而提高应用能力,分析问题和解决问题的能力
4 通过单片机的控制实现对二极管的控制来模拟交通灯控制系统,并利用开关来模拟几种特殊情况(如要求所述),巩固单片机知识培养查阅资料的习惯,训练和提高自学,独立思考的能力,帮助学生养成良好实验习惯
1.3设计要求:
利用STC89C51单片机为核心,制作一个单片机控制的交通灯控制系统:
1、A道和B道上均有车辆要求通过时,A、B道轮流放行。
A道放行5分钟(调试时改为5秒钟),B道放行4分钟(调试时改为4秒钟);
2、一道有车而另一道无车(实验时用开关K0和K1控制),交通灯控制系统立即让有车道放行;
3、有紧急车辆要求通过时,系统要能禁止普通车辆通行,A、B 道均为红灯,紧急车由K2开关模拟;
4、绿灯转换为红灯时黄灯亮1秒钟。
二、总体设计:
2.1 总框图:
2.2电路图:
图1 电路原理图
2.3工作原理:
通过输入的程序控制单片机端口高低电平从而实现对二极管的
亮灭的控制,其中也有定时器和中断的综合应用,中断:当中断源发出中断请求时,如果允许的话,单片机暂时中止当时正在执行的主程序,转到中断服务处理程序处理中断服务请求,处理完中断服务请求后,再回到原来被中止的程序之处(断点),继续执行被中断的程序;定时器则是相当精确的计时器。
本设计使用的是定时器1,定时器T 0是有特殊功能寄存器TH0、TH1构成;通过工作方式寄存器TMOD选择定时器的工作方式,计算出初值并写入TH0、TH1,然后应用中断
从而执行中断程序,首先要对IE赋值,开放中断,然后使TR0置位,启动定时器。
2.4 所用元件:
STC89C51单片机、IC底座 USB接口、八位共阳数码管、复位开关、按钮开关、红黄绿LED灯、排针、12MHZ晶振、 10uf电容、30pf电容、 4.7K电阻。
三、各部分电路设计:
3.1芯片介绍:
STC89C51单片机引脚图如下:
图2 STC89C51引脚图
STC89C51单片机是标准的40引脚双列直插式集成电路芯片,其各引脚功能可分为如下3大类:
1.电源引脚:
电源引脚接入单片机的工作电源。
(1)VCC(40脚):接+5V电源;
(2)VSS(20脚):接地。
2.时钟引脚:
该引脚外接晶体引线端
3.控制引脚:
此类引脚提供控制信号,有的引脚还有复用功能:
(1)RST(9脚):复位信号输入端,高电平有效。
在此引脚加上持续时间大于2个机器周期的高电平,就可以是单片机复位。
在单片机正常工作时,此引脚应为<0.5V的低电平。
v(31脚):EA为该引脚的第一功能,及外部程序存 (2) EA/PP
储器访问允许控制端。
当EA引脚接高电平时,在PC值不超出0FFFH时,单片机读片内程序存储器中的程序;当PC值超出时,将自动转向读取片外程序存储器空间中的程序。
当EA引脚接高电平时,只读取片外程序存储器空间中的内容,读取的地址范围为0000H~FFFFH,片内的4KB Flash程序存储器不起作用。
v为该引脚的第二功能,即在对片内Flash进行编程时,PP v引PP
脚接入编程电压。
(3)ALE/PROG(30脚)ALE为CPU访问外部程序存储器或外部数
据存储器提供一个地址锁存信号,将低8位地址锁存在片外地址锁存器中。
PROG为该引脚的第二功能,即在对片内Flash进行编程时,此引脚作为编程脉冲输入端。
(4)PSEN(29脚):片外程序存储器的读选通信号低电平有效。
3.2晶振电路:
下图所示为时钟电路原理图,在AT89C51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。
时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。
3.3
24
图4单片机复位电路3.4 显示电路:
图5数码管显示电路
这是一个7位8段的共阳极数码管,把它的八个一脚按一定的顺序分别与单片机P0口的八个脚相连接,然后剩余两个口中的一个与+5v的电源相连接,根据单片机中编写的相应程序可以控制数码管的显示情况,从而达到显示时间的目的。
3.5数码管:
图6数码管引脚图
led数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。
led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。
位数有半位,1,2,3,4,5,6,8,10位等等....,led数码管根据LED的接法不同分为共阴和共阳两类,本实验用的是共阳极的数码管。
了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
图2是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。
3.6 C语言程序:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint z);
uint num1,num2;
uchar code table[]=
{
~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F };
//*********南北方向*****************
sbit SN_G = P1^0;
sbit SN_Y = P1^1;
sbit SN_R = P1^2;
//*********东西方向*****************
sbit EW_G = P1^3;
sbit EW_Y = P1^4;
sbit EW_R = P1^5;
//*********控制开关*****************
sbit SN_K = P3^0; //南北通行
sbit EW_K = P3^1; //东西通行
sbit STOP_K = P3^2; //全部都停
char T0_50ms, T_LOOP, t_ew, t_sn;
bit ew;
//----------------------------------
void init()
{
TMOD = 0x11;
TH0 = (65536 - 50000) / 256; //50ms@12MHz TL0 = (65536 - 50000) % 256;
TR0 = 1;
ET0 = 1;
EA = 1;
T_LOOP = 0;
T0_50ms = 0;
ew = 1;
}
//----------------------------------
void E_W(void)
{
EW_G = 0; EW_Y = 1; EW_R = 1;
SN_G = 1; SN_Y = 1; SN_R = 0;
}
//---------------------------------- void S_N(void)
{
EW_G = 1; EW_Y = 1; EW_R = 0;
SN_G = 0; SN_Y = 1; SN_R = 1; }
//---------------------------------- void STOP(void)
{
EW_G = 1; EW_Y = 1; EW_R = 0;
SN_G = 1; SN_Y = 1; SN_R = 0;
P0=0xFF;P2=0xFF;
}
//---------------------------------- void main()
{
init();
while(1) {;}
}
//---------------------------------- void T0_INT(void) interrupt 1 using 0 {
TL0 = (65536 - 50000) % 256; //重新写入初始值
TH0 = (65536 - 50000) / 256; //50ms@12MHz
T0_50ms++;
if (T0_50ms == 20) {
T0_50ms = 0;
while (STOP_K == 0) STOP();
while (EW_K == 0) {E_W();P0=0xFF; P2=0xFF;}
while (SN_K == 0) {S_N();P2=0xFF; P0=0xFF;}
if (ew)
{
{
P0=table[num1++];
if(num1==6)
{
num1=0;P0=0xFF;
}
}
t_ew++;
if (t_ew <= 4) E_W();
if (t_ew == 5) {E_W(); EW_Y = 0;}
if (t_ew ==6) { //时间比要求的大一些,便于观察比较
t_ew = 0;
ew = 0;
S_N();
} }
else {
P2=table[num2++];
if(num2==5)
{ num2=0;P2=0xFF;
}
t_sn++;
if (t_sn <= 3) S_N(); //时间
if (t_sn == 4) {S_N(); SN_Y = 0;}
if (t_sn == 5) { //B道放行4分钟(调试时改为4秒钟)
t_sn = 0;
ew = 1;
E_W();
} } }
}
四、整体电路图:
五、设计总结:
本次设计提供了一个检验我们所学知识的机会,更全面地,综合性运用各种知识的实战经验,为我们接下来的毕业设计打下了一个很好的基础。
从到图书馆和网上查找资料到对电路的设计对电路的调试再到最后电路的成型,使我对所学知识的结构体系有了一个更加深刻的认识和直接的感觉,同时也增加了对于专业知识的运用掌握能力,对自己以后的工作和学习都是一份不可多得的经历。
在设计的过程中自己发现了所学的单片机的知识掌握的不牢,对于一些细节把握的不够精准。
对于一些器件的实际运用不是很熟悉。
同时在设计的过程中,遇到很多事前没想到的问题,例如开关的使用和线路的布局真自己开始做才发现没有自己想象的那么简单,有了一定的思路,结合在一起的时候,也不是那么的容易。
仿真的时候由于对软件的不熟悉,以至于花费了很多时间在元器件的寻找上。
能够根据资料自己设计电路图,不仅是对自己知识的一次检测更是对自己综合能力的一次检验。
同时在编写程序的时候,更是对自己所学知识的检测,如定时器的使用、中断的使用,同时也加深了自己对一些程序的理解和实际运用过程,这也是单片机学习中最重要的部分。
通过这次单片机课程设计,使自己在知识和动手能力方面都有了很大提高,使自己对编程和仿真软件的操作能力大大增强,也极大地提高了自己学习单片机的兴趣,对所学的课程有了一个更加深刻的认识和理解,相信这些都对自己以后的生活学习产生很大的帮助。
六、致谢:
这段时间的课程设计的时间里,我要感谢老师和同学对我的帮助还有的设计伙伴,在这里我要特别感谢我的指导老师刘宏老师,没有他们对我的指导和帮助,我不可能在这么短的时间里顺利的完成这次课程设计的全部内容。
再一次感谢他们对我的无私帮助。
参考文献:
《单片机原理及应用》杨恢先
《十天学会单片机》郭天祥
《单片机的C语言应用程序设计》马忠梅,
(本资料素材和资料部分来自网络,仅供参考。
请预览后才下载,期待您的好评与关注!)。