51单片机交通灯课程设计_第1页
51单片机交通灯课程设计_第2页
51单片机交通灯课程设计_第3页
51单片机交通灯课程设计_第4页
51单片机交通灯课程设计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——51单片机交通灯课程设计

一设计方案

系统完成内容如下:

正常状况下,A、B道(A、B道交织组成十字路口,A是主道,B是支道)轮番放行,A道放行60秒(两个数码管从60秒开始倒数,其中5秒用于警告),B道放行30秒(两个数码管从30秒开始倒数,其中5秒用于警告)。3)、一道有车而另一道无车(用按键开关S1、S2模拟)时,使有车车道放行。4)、有紧急车辆通过(用按键开关S0模拟)时,A、B道均为红灯(两次按下S0后,回复正常状态)。要求:3)、编写系统的程序,完成系统的分、秒的计时功能2.具体编程过程:根据要求我首先想到

显示界面:采用数码管和LED灯相结合的方法,由于实际既要求倒计时施主输出,又要求又状态灯输出等,为便利观看并考虑到现实状况,用2个数码管与12个LED分别显示时间和提醒信息。这种方案既满足系统功能要求,又减少了系统实现的繁杂度。考虑到数码显示我采用了动态显示的方法,这是原理图里只有一个数码显示管亮的原因。按键方面我用了三个,一个用于A道无车,一个用于B道无车,一个用于特别状况,都红的状况。主控制方案

采用AT89C51单片机作为控制器,控制整个反感实行通行倒计时及A

道、B道、一道有车和特别状况都为无车状况、通过变成方案设计占用单片机的端口尽量最少,硬件也做到能少最好的地步。

二设计原理分析

1、首先了解实际交通灯的变化状况和规律。假设一个十字路口如上图所以,

为东南西北走向。初始状态0:为东西绿灯亮,南北红灯亮;然后转状态1:东西绿灯亮黄灯亮,南北红灯亮黄灯亮;过后转状态2:东西红灯亮,南北绿灯亮;再转状态3:东西红灯亮黄灯亮,南北绿灯亮黄灯亮。一段时间后,又循环至状态0。中间可通过中断按钮产生中断,跳入中断程序执行中断。

信号灯的显示状况是一致的,所以只要用两组就行了,因此,采用单片机内部的I/O口上的P1口中的6个引脚即可来控制6个信号灯。

3、通过编写程序,实现对发光二极管的控制,来模拟交通信号灯的管理。每延时一段时间,灯的显示状况都会按交通灯的显示规律进行状态转换。

4、通过延时时间送显,可以在原有的交通信号灯系统的基础上,增加其倒计时间的显示功能,实现其功能的扩展。

5.通过脉冲中断编写中断程序,可实现中断。

四、硬件资源及其分派

主要用到的硬件:P1口、P3口、LED数码管、LED发光二级管、定时器T0硬件分派:

2、P3口中的P3.0(RXD)和P3.1(TXD)作特别用途,数据(倒计时时间)从RXD端输入,TXD端输出。

3、LED发光二极管用来显示灯亮状况。4、定时/计数器T0用来产生1秒的定时

5.Led显示器十位与p0相连接,个位与p2连接用来显示时间,下面是LED显示接口及原理。

1LED是发光二极管的英文缩写,LED显示器是由发光二极管构成的,它在

单片机中的应用十分普遍。寻常所说的LED显示器由7个发光二极管组成,其排列形状如下图。此外,显示器中还有一个圆点型发光二极管以dp表示,用于小数点表示。通过七个发光二极管亮暗的不同组合,可以显示多种数字、字母以及其它符号。LED显示中的发光二极管共有两种连接方法:

2共阳极接法:把发光二极管的阳极连在一起构成公共阳极。使用时公共阳极接+5V。这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不亮。

3共阴极接法:把发光二极管的阴极连在一起构成公共阴极。使用时公共阴极接地。这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不亮。

4控制数码管驱动级的控制电路有静态式和动态式两类:

5静态驱动:它是指每个数码管都要用一个译码器译码驱动。

6动态驱动:它是所的数码管使用一个专门的译码驱动器,使各位数码管逐个轮番显示,它的扫描速度极快,因此显示效果与静态驱动一致。

7采用动态数码管显示,可以大幅度地降低硬件成本和电源的功耗,由于某一时刻只有一个数码管工作,就是所谓的分时显示,显示所需要的硬件电路可分时复用。

共阳与共阴数码管自行代码

三具体实现的程序

#includeat89x52.hbitflag;

voidAdao(void);voidBdao(void);voidtheshu(void);

#defineuintunsignedchar#defineucharunsignedcharvoiddelay_ms(uintdelay);voidjjj(void);ucharsum=0;ucharcount=0;ucharflag3=0;

voidxianshi(void);bitflag;

sbitp36=P3^6;sbitp37=P3^7;sbitp32=P3^2;

ucharcodeLED_Val[]={0xc0,0xf9,0xa4,0x0b0,0x99,0x92,0x82,0x0f8,0x80,0x98};uchardatanum[4];

uchardataled_point[2]={0xfd,0xfe};voiddisp(uintdisp_value);

voidbcd(uintbcd_value);ucharatt;

voidsystem(void);//定时1svoidT0_srv(void)interrupt1using2{

TH0=0x3c;TL0=0xb0;count++;

if(count==20){count=0;flag=1;sum++;}}//中断全红的状况voidint_0srv(void)interrupt0using1{flag3++;

}

/////////int//111///特别voidjjj(void){

uchartemp1,temp=sum;sum=0;temp1=P1;P1=0x36;//delay_ms(2);//if(!INT0)if(flag3==1){while(sum15){

disp(15-sum);

//while(!INT0);}}////////////if(flag3==2){

P1=temp1;sum=temp;flag3=0;}}

///////////////////////////////延时voiddelay_ms(uintdelay){

uchari;

while(delay--){

for(i=0;i125;i++);}}////////////////////////B道正常状况voidBdao(void){

sum=0;

while(sum25){if(flag3!=0)jjj();if(p36==0){EA=0;P1=0x1e;

EA=1;if(p37==0){EA=0;P1=0x33;}EA=1;P1=0x33;disp(30-sum);//while(!flag);flag=0;//sum++;}

//sum=0;

while(sum30){if(flag3==1)jjj();while(p36==0){

EA=0;P1=0x1e;}EA=1;while(p37==0){EA=0;P1=0x33;}EA=1;P1=0x2D;disp(30-sum);while(!flag);flag=0;//sum++;}

sum=0;P1=0;}

////////////////////////A到正常voidAdao(void){

while(sum55){if(flag3==1)jjj();

while(p36==0){EA=0;P1=0x1e;

EA=1;while(p37==0){EA=0;P1=0x33;}EA=1;disp(60-sum);P1=0x1e;

////////while(!flag);flag=0;//sum++;}

//sum=0;//P1=0x11;while(sum60){if(flag3==1)jjj();while(p36==0){

EA=0;P1=0x1e;}EA=1;while(p37==0){

EA=0;P1=0x33;}EA=1;P1=0x2D;disp(60-sum);while(!flag);flag=0;sum++;}}

///////////////////////系统初始化voidsystem(void){

TMOD=0x01;TH0=0x3c;TL0=0xb0;ET0=1;EA=1;TR0=1;

EX0=1;IT0=1;}

///////////////////////显示函数

voiddisp(uintdisp_value){

uchari;

bcd(disp_value);for(i=0;i2;i++){

P2=0;

P0=LED_Val[num[i]];P2=led_point[i];delay_ms(50);}}

////////////

voidbcd(uintbcd_value){

num[0]=bcd_value/10;num[1]=bcd_value%10;}

//////////////////主函数voidmain(void){P1=0x00;

system();while(1){

Adao();

Bdao();}}

课程设计总结

本次课程设计时间虽然十分短暂,但给我的收获是十分大的。在上课的时候,就对单片机产生了十分浓重的兴趣。对单片机编程有了新的认识,在课程有通过自己动手实际做,对编程和硬件焊接都有了新的认识,这次我做的十字路口红绿灯的问题。在编程时由于对有些基础知识把握不够确凿,编程时出了好多麻烦,和走了好多弯路。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论