交通信号灯课程设计报告.docx
- 文档编号:29320923
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:22
- 大小:79.15KB
交通信号灯课程设计报告.docx
《交通信号灯课程设计报告.docx》由会员分享,可在线阅读,更多相关《交通信号灯课程设计报告.docx(22页珍藏版)》请在冰豆网上搜索。
交通信号灯课程设计报告
交通信号灯课程设计报告
交通信号灯自动控制系统
*******目录*******
一、设计内容
二、设计要求
三、交通信号灯模拟控制系统设计程序流程图
四、交通信号灯模拟控制系统原理图
五、交通信号灯模拟控制系统主程序
六、运行步骤
七、检测与调试
八、课程设计体会
九、参考文献
十、说明
一、设计内容:
设计并制作一个如上图所示的十字路口交通信号自动控制模拟指示系统。
设该路口由A、B两条通行干道相交而成,四个路口各设一组红、黄、绿三色信号灯,用两位数码管作倒计时显示。
二、设计要求:
1.系统基本功能要求
(1)以秒为计时单位,两位数码管以十进制递减计数形式作定时显示,在递减计数回零瞬间完成换灯操作。
(2)通过键盘红、黄、绿三色信号灯所亮时间在0~99秒内任意设定。
(3)十字路口的通行起始状态可人工设定,运行中可通过人工干预使十字路口通行状况固定于任何一种工作模式。
2.发挥部分
(1)具有时间控制功能,交通信号灯工作时间:
05:
00~23:
00;其余时间两个干道上的黄色信号灯闪烁显示;
(2)绿色信号灯倒计时最后3秒和黄色信号灯显示时闪烁显示。
(闪烁频率:
1Hz);
(3)其它功能。
三、交通信号灯模拟控制系统设计程序流程图
1、主程序流程图:
开始
程序初使化
调用显示主程序
东西绿灯亮,南北红灯亮,
进入倒计时,打开数码管显示
东西和南北黄灯亮,进入倒
计时,打开数码管显示
东西红灯亮,南北绿灯亮,进入倒
计时,打开数码管显示
图5
2、中断服务程序流程图:
外部中断0:
外部中断1:
按键按下
按键按下
转去中断服务子程序
转去中断服务子程序
设置个位计数值
设置十位计数值
中断返回
中断返回
图6图7
计数器T0外部中断:
确定按键按下
转去中断服务子程序
分别进行三组灯的组合状态的时间倒计数并进入此三种状态的一下死循环
中断返回
图8
3、交通灯工作换灯流程:
否
是
是
否
四、交通信号灯模拟控制系统原理图
1.直流电源图:
2.交通信号灯模拟控制系统原理图:
五、交通信号灯模拟控制系统主程序
#include
#include
#defineuintunsignedint
#defineucherunsignedchar
uchercodetable[]={0x40,0x40,0xf9,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
sbitk0=P3^0;
sbitk1=P3^1;
sbitk2=P3^2;
sbitk3=P3^3;
sbitk4=P3^4;
sbitk5=P3^5;
sbitk6=P3^6;
sbitk7=P3^7;
uchertt,tt1,tt2,sec,min,shi;//初始定义
voidtime1();
voiddelay(uintz);
voidmain()
{
inti,j,num1,num2,l,n,m,h1,h2,h3;
ucheraa,bb,dd,ee;
EA=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//中断定义
ET0=1;
EX0=1;
EX1=1;
num1=1;
num2=1;
P3=0xef;
aa=0xb6;
bb=0x96;
dd=0x6b;
ee=0x69;
shi=8;
P0=0xf2;
if(k0==1)
{
delay(5);
if(k0==1)
while(k0)
{
if(k7==0)
{
delay(5);
if(k7==0)
num1++;
while(!
k7);
if(num1==11)//交通灯初值及工作状态设置num1=1;
}
if(k6==0)
{
delay(5);
if(k6==0)
num2++;
while(!
k6);
if(num2==11)
num2=1;
}
P1=table[num1];
P2=table[num2];
if(k1==0)
{
delay(5);
if(k1==0)
{
aa=0x6b;
bb=0x69;
dd=0xb6;
ee=0x96;
}
}
}
}
else
{
num1=4;
num2=1;
}
m=num1;
n=num2;
if(k0==0)//调节当前时间(即对时)
{
delay(5);
if(k0==0)
{
while(!
k0)
{
if(k7==0)
{
delay(5);
if(k7==0)
{
shi++;
if(shi==24)
shi=0;//调时
h1=shi;
h2=h1/10+1;
h3=h1%10+1;
P2=table[h3];
P1=table[h2];
while(!
k7);
}
}
if(k6==0)
{
delay(5);
if(k6==0)
{
min++;
if(min==60)
min=0;
h1=min;
h2=h1/10+1;
h3=h1%10+1;//调分
P2=table[h3];
P1=table[h2];
while(!
k6);
}
}
if(k1==0)
{
delay(5);
if(k1==0)
{
sec++;
if(sec==60)
sec=0;
h1=sec;
h2=h1/10+1;
h3=h1%10+1;//调秒
P2=table[h3];
P1=table[h2];
while(!
k1);
}
}
}
}
}
TR0=1;//开启定时器中断
if(num1==1)
while
(1)
{
j=n;
i=m;//工作循环程序
for(j=n;j>0;j--)
{
if(j<5)
{
l=j;
break;
}
P0=aa;
P1=table[i];
P2=table[j];
delay(1000);
if((shi>22)||(shi<5))
time1();
}
if(j==l)
for(j=l;j>0;j--)
{
P1=table[i];
P2=table[j];
P0=bb;
delay(500);
P0=aa;
delay(500);
}
for(j=n;j>0;j--)
{
if(j<5)
{
l=j;
break;
}
P0=dd;
if((shi>22)||(shi<5))
time1();
P1=table[i];
P2=table[j];
delay(1000);
}
if(j==l)
for(j=l;j>0;j--)
{
P1=table[i];
P2=table[j];
P0=ee;
delay(500);
P0=dd;
delay(500);
}
}
while
(1)
{
num2=n;
num1=m;
for(j=n;j>0;j--)
{
i=m;
P0=aa;
P1=table[i];
P2=table[j];
delay(1000);
if((shi>22)||(shi<5))
time1();
}
num1--;
for(i=num1;i>0;i--)
{
for(j=10;j>0;j--)
{
if((shi>22)||(shi<5))
time1();
if(i==1)
if(j<5)
break;
P0=aa;
P1=table[i];
P2=table[j];
delay(1000);
}
if(i==1)
for(j=4;j>0;j--)
{
P1=table[i];
P2=table[j];
P0=bb;
delay(500);
P0=aa;
delay(500);
}
}
num1=m;
for(j=n;j>0;j--)
{
i=m;
P0=dd;
P1=table[i];
P2=table[j];
delay(1000);
if((shi>22)||(shi<5))
time1();
}
num1--;
for(i=num1;i>0;i--)
{
for(j=10;j>0;j--)
{
if((shi>22)||(shi<5))
time1();
if(i==1)
if(j<5)
break;
P0=dd;
P1=table[i];
P2=table[j];
delay(1000);
}
if(i==1)
for(j=4;j>0;j--)
{
P1=table[i];
P2=table[j];
P0=ee;
delay(500);
P0=dd;
delay(500);
}
}
}
}
voiddelay(uintz)
{
uintt1,y;//延时函数
for(t1=z;t1>0;t1--)
for(y=125;y>0;y--);
}
voidtime1()
{
for(;(shi>22)||(shi<5);)
{
P0=0xdd;
delay(500);
P0=0xff;
delay(500);//23点到5点的工作函数
P1=table[1];
P2=table[1];
}
}
voidenter0()interrupt0
{
delay(5);
if(k2==0)
{//外部中断0函数
P1=0x00;
P2=0x00;
P0=0xb6;
}
}
voidenter1()interrupt2
{
delay(5);
if(k3==0)
{//外部中断1函数
P1=0x40;
P2=0x40;
P0=0x6b;
}
}
voidenter2()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==20)
{
sec++;
tt=0;//外部中断0函数
}
if(sec==60)
{
min++;
sec=0;
}
if(min==60)
{
min=0;
shi++;
}
if(shi==24)
shi=0;
}
六、运行步骤
①给单片机(交通灯系统)上电(或者已上电按复位键)。
②以连续方式从0100H开始执行程序,初始态0为南北路口的红灯亮东西路口的绿灯亮,并设置了初始时间24秒,数码管显示24秒。
③此时可以设置红绿灯时间(ADD键加,DEC键减每次各一,注意本设置红灯与绿灯为同一初始时间)。
④按下ok开始键系统关闭设置红绿灯时间功能进入倒计时,系统进入运行,经过一段时间,转为状态1东西和南北路口黄灯亮经过5秒延时并关闭数码管显示,进入状态2南北路口绿灯亮东西路口红灯亮经过倒计时之后返回初始0状态实现循环。
(注意此时不能设置红绿灯时间)
七、检测与调试:
1、硬件调试:
硬件调试是利用开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。
硬件调试可分为静态调试与动态调试两步进行。
静态调试
静态调试是在用户系统未工作时的一种硬件检测。
第一步:
目测。
检查外部的各种元件或者是电路是否有断点。
第二步:
用万用表测试。
先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。
第三步:
加电检测。
给板加电,检测所有的插座或是器件的电源端是否符合要求的值
第四步:
是联机检查。
因为只有用单片机开发系统才能完成对用户系统的调试。
动态调试
动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。
动态调试的一般方法是由近及远、由分到合。
由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。
当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。
由分到合的调试既告完成。
由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。
调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
2、软件调试:
软件调试是通过对用户程序(本次采用伟福仿真软件)的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
程序后,编辑,查看程序是否有逻辑的错误。
八、课程设计体会
通过这一阶段的单片机课程设计,我对单片机有了更深的了解。
学会如何用编程方法消除抖动,更牢固的掌握了各个中断的用法,特别是定时∕计数器的两种用法的混合使用,在编程时经常因为考虑不周而出现了几次修改,但可幸的是编程思路的正确,让我不用很大篇幅的修改,使我在不动大框架中学到了很多知识,并且巩固了以往的知识!
从这之后我更加认识到最初构想思路的重要性。
九、参考资料
1.童诗白,华成英主编.《模拟电子技术基础(第四版)》高等教育出版社
2.谢维成杨加国主编《单片机原理与应用及C51程序设计(第2版)》清华大学出版社
十、说明
本课程设计的先修课程是:
模拟电子技术、数子电子技术、单片机原理与技术。
一个完整的交通灯相当于一个简单的单片机系统,该系统有交通灯设置电路、单片机、显示电路等构成。
单片机是集成的IC芯片,只需根据实际设计要求选型。
其他部分都需要根据应用要求和性能指标自行设计。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通 信号灯 课程设计 报告