带时间显示的交通信号灯控制系统设计.docx
- 文档编号:20147033
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:17
- 大小:179.83KB
带时间显示的交通信号灯控制系统设计.docx
《带时间显示的交通信号灯控制系统设计.docx》由会员分享,可在线阅读,更多相关《带时间显示的交通信号灯控制系统设计.docx(17页珍藏版)》请在冰豆网上搜索。
带时间显示的交通信号灯控制系统设计
带时间显示的交通信号灯
控制系统设计
系别:
电气与信息工程系
专业:
班级:
学生姓名:
学号:
指导教师:
时间:
2011年11月24日
摘要………………………………………………………………………………3
一、设计任务与要求…………………………………………………………4
二、硬件单元电路设计…………………………………………………………4
1.LED数码显示模块……………………………………………………4
2.发光二极管模拟信号灯电路…………………………………………………6
3.时钟电路模块…………………………………………………………6
4.复位电路模块………………………………………………………………7
5.主控制系统模块……………………………………………………………7
6.设计完整的电路图………………………………………………………8
三、流程框图………………………………………………………………………9
四、子程序编写…………………………………………………………………………10
1、延时子程序………………………………………………………………………10
2、显示子程序…………………………………………………………………10
五、总结…………………………………………………………………………………11
六、程序清单……………………………………………………………………12
摘要
交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。
交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
本系统采用单片机AT89S52为中心器件来设计交通灯控制器,系统实用性强、操作简单、扩展性强。
本设计就是采用单片机模拟十字路口交通灯的各种状态显示以及倒计时时间。
本设计系统由单片机I/O口扩展系统、交通灯状态显示系统、LED数码显示系统、复位电路等几大部分组成。
系统除基本的交通灯功能外,还具有倒计时等功能,较好的模拟实现了十字路口可能出现的状况。
软件上采用C51编程,主要编写了主程序,LED数码管显示程序,中断程序延时程序等。
经过整机调试,实现了对十字路口交通灯的模拟。
一、设计任务与要求
1.原理图设计。
2.南北方向:
绿灯亮30S放行,黄灯亮4S警告,然后红灯亮54S禁止。
3.东西方向:
绿灯亮50S放行,黄灯亮4S警告,然后红灯亮34S禁止。
4.南北方向红灯亮时,同时用2位LED进行54S递减时间显示。
5.东西方向红灯亮时,同时用2位LED进行34S递减时间显示。
6.单片机程序设计、调试。
二、硬件单元电路设计
1、LED数码显示模块
静态显示方式:
静态显示方式是指当显示器显示某一字符时,发光二极管的位选始终被选中。
在这种显示方式下,每一个LED数码管显示器都需要一个8位的输出口进行控制。
由于单片机本身提供的I/O口有限,实际使用中,通常通过扩展I/O口的形式解决输出口数量不足的问题。
静态显示主要的优点是显示稳定,在发光二极管导通电流一定的情况下显示器的亮度大,系统运行过程中,在需要更新显示内容时,CPU才去执行显示更新子程序,这样既节约了CPU的时间,又提高了CPU的工作效率。
其不足之处是占用硬件资源较多,每个LED数码管需要独占8条输出线。
随着显示器位数的增加,需要的I/O口线也将增加。
(2)动态显示方式:
动态显示方式是指一位一位地轮流点亮每位显示器(称为扫描),即每个数码管的位选被轮流选中,多个数码管公用一组段选,段选数据仅对位选选中的数码管有效。
对于每一位显示器来说,每隔一段时间点亮一次。
显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。
通过调整电流和时间参数,可以既保证亮度,又保证显示。
若显示器的位数不大于8位,则显示器的公共端只需一个8位I/O口进行动态扫描(称为扫描口),控制每位显示器所显示的字形也需一个8位口(称为段码输出)。
本设计采用动态显示法。
2、发光二级管模拟信号灯电路
3、时钟电路模块
时钟电路由一个晶体振荡器12MHZ和两个30pF的瓷片电容组成。
时钟电路用于产生单片机工作所需要的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。
单片机本身就如一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信
号控制下严格地工作。
4、复位电路模块
复位电路是使单片机的CPU或系统中的其他部件处于某一确定的初始状态,并从这状态开始工作,除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位电路以重新启动。
本设计采用的是按键复位电路。
其电路如下图所示:
5、主控制系统模块
主控制器采用AT89S52,是ATMEL公司生产的一款性能稳定的8位单片机。
AT89S52具有1个8KB的FLASH程序存储器,1个512字节的RAM,4个8位的双向可位寻址I/O端口,3个16位定时/计数器及1个串行口和6个向量二级中断结构。
单片机的P3口分别用于控制南北及东西的通行灯,P0口和P2口用于2组4位LED计时器的控制。
其主控电路如下图所示:
6、设计完整的电路图
三、流程框图
N
Y
N
N
N
Y
四、子程序编写
1、延时子程序
一秒基准时间采用定时器0定时:
voidtimer0(void)interrupt1using0//定时器0方式1,50ms中断一次
{
TH0=0x3c;
TL0=0xb0;
TMOD=0x11;
mrp++;
if(mrp==20)
{
sec--;
if(sec==0)TR0=0;
mrp=0;//对计数单元的清零
}
}
但显示子程序中的延时部分采用纯软件延时:
/*延时子程序*/
voidDelayX1ms(uintcount)
{
uintj;
while(count--!
=0)
{
for(j=0;j<80;j++);
}
}
2、显示子程序
/*显示函数*/
voiddisp()
{
chari,j=0xfe;
chark=0;
for(i=0;i<8;i++)
{
P2=j;
k=find_code[i];
P0=dis_code[k];
DelayX1ms
(2);
j=_crol_(j,1);
}
}
五、总结
通过这次课程设计,我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。
使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是C语言)的掌握方面都能向前迈了一大步。
本次课程设计的过程是艰辛的,不过收获却是很大的。
在设计过程中,会出现了一些问题,但都是常见的小问题,如:
代码中双引号的使用并不是在英语书写状态下,输入字母出错等,在调试时出现异常,不过这些都是经常性错误,经过调试修改都一一解决,程序顺利完成,并实现了其功能。
综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更进一步的理解和认识。
在此,由于自身能力有限,在课程设计中碰到了很多的问题,我通过查阅相关书籍、资料以及和周围同学交流。
由于使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。
但是在我们设计和调试的过程中,也发现了一些问题,譬如红灯和绿灯的切换还不够迅速,红绿灯规则不效率还不是很高等等,这需要在实践中进一步完善。
当然,通过这次课程设计,我也发现了自身的很多不足之处,在以后的学习中,我会不断的完善自我。
六、程序清单
/*带时间显示的交通信号灯控制系统设计
交通信号灯电气0901WangPeng*/
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdxg=P3^5;//东西绿灯
sbitdxy=P3^6;//东西黄灯
sbitdxr=P3^7;//东西红灯
sbitnbg=P3^3;//南北绿灯
sbitnby=P3^2;//南北黄灯
sbitnbr=P3^1;//南北红灯
uchark_z;
ucharmrp,sec;
voidDelayX1ms(uintcount);
/*"P."显示代码序号*/
chardatafind_code[8]={11,11,11,11,11,11,11,10};
/*共阳数码管字型码*/
/*0,1,2,3,4,5,6,7,8,9,p.,灭,-*/
charcodedis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c,0xff};
/************************************************************/
/*显示函数*/
voiddisp()
{
chari,j=0xfe;
chark=0;
for(i=0;i<8;i++)
{
P2=j;
k=find_code[i];
P0=dis_code[k];
DelayX1ms
(2);
j=_crol_(j,1);
}
}
/***********************************************************/
/*延时子程序*/
voidDelayX1ms(uintcount)
{
uintj;
while(count--!
=0)
{
for(j=0;j<80;j++);
}
}
/**********************************************************
*函数原型:
keychuli();
*功能:
处理与键盘相连的P1口的内容,作为键值。
*/
ucharkeychuli()
{
uchark;
k=P1;//P1口内容送K
k=~k;//取反
return(k);//返回键值
}
/**********************************************************
函数原型:
key();
功能:
键盘扫描函数,函数返回值即键值。
*/
ucharkey()
{
ucharkeyzhi,keyzhii;//电子钟键盘按键键值临时存放
keyzhi=keychuli();//调P1口处理函数
if(keyzhi!
=0)//有键动作延时去抖动,否则函数返回
{
disp();
disp();
keyzhi=keychuli();//再次调P1口处理函数
if(keyzhi!
=0)//真正有键按下,取键值并暂存
{
keyzhii=keyzhi;
while(keyzhi!
=0)//判按键是否释放,没有释放延时去抖动等待释放
{
disp();
disp();
keyzhi=keychuli();
}
keyzhi=keyzhii;//按键释放后恢复按键键值
}
}
return(keyzhi);//返回按键键值
}
/*********************************************************
显示缓存更新*/
voidxsgx()
{
find_code[0]=sec%10;
find_code[1]=sec/10;
}
/**********************************************************/
voidtimer0(void)interrupt1using0//定时器0方式1,50ms中断一次
{
TH0=0x3c;
TL0=0xb0;
TMOD=0x11;
mrp++;
if(mrp==20)
{
sec--;
if(sec==0)TR0=0;
mrp=0;//对计数单元的清零
}
}
/*******************************************************/
main()
{
TMOD=0x01;//time0为定时器,方式1
TH0=0x3c;//预置计数初值
TL0=0xb0;
EA=1;
ET0=1;
while
(1)
{
disp();//显示P.
k_z=key();//按键扫描
if(k_z==1)
break;
}
find_code[7]=11;
while
(1)
{
sec=34;
TR0=1;
while
(1)//东西红灯34秒
{
xsgx();
disp();//显示时间
dxr=0;//东西红灯开
if(sec>4)
{
nbg=0;//南北绿灯开
}
else
{
nbg=1;nby=0;//南北绿关,黄灯亮4秒
}
if(sec==0)
{
sec=54;
P3=0xff;
break;
}
}
while
(1)//南北红灯54秒
{
TR0=1;
xsgx();
disp();//显示时间
nbr=0;
if(sec>4)
{
dxg=0;//东西绿灯开
}
else
{
dxg=1;dxy=0;//东西绿灯关,黄灯亮4秒
}
if(sec==0)
{
P3=0xff;
break;
}
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 时间 显示 交通 信号灯 控制系统 设计