交通信号灯课程设计报告Word下载.docx
《交通信号灯课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《交通信号灯课程设计报告Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
00~23:
00;
其余时间两个干道上的黄色信号灯闪烁显示;
(2)绿色信号灯倒计时最后3秒和黄色信号灯显示时闪烁显示。
(闪烁频率:
1Hz);
(3)其它功能。
1、主程序流程图:
开始
程序初使化
调用显示主程序
东西绿灯亮,南北红灯亮,
进入倒计时,打开数码管显示
东西和南北黄灯亮,进入倒
计时,打开数码管显示
东西红灯亮,南北绿灯亮,进入倒
图5
2、中断服务程序流程图:
外部中断0:
外部中断1:
按键按下
转去中断服务子程序
转去中断服务子程序
设置个位计数值
设置十位计数值
中断返回
中断返回
图6图7
计数器T0外部中断:
确定按键按下
分别进行三组灯的组合状态的时间倒计数并进入此三种状态的一下死循环
图8
3、交通灯工作换灯流程:
否
是
否
1.直流电源图:
2.交通信号灯模拟控制系统原理图:
#include<
reg51.h>
#include<
stdio.h>
#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);
while(k0)
if(k7==0)
num1++;
while(!
k7);
if(num1==11)//交通灯初值及工作状态设置num1=1;
}
if(k6==0)
num2++;
k6);
if(num2==11)
P1=table[num1];
P2=table[num2];
if(k1==0)
aa=0x6b;
bb=0x69;
dd=0xb6;
ee=0x96;
else
num1=4;
m=num1;
n=num2;
if(k0==0)//调节当前时间(即对时)
if(k0==0)
k0)
shi++;
if(shi==24)
shi=0;
//调时
h1=shi;
h2=h1/10+1;
h3=h1%10+1;
P2=table[h3];
P1=table[h2];
min++;
if(min==60)
min=0;
h1=min;
//调分
sec++;
if(sec==60)
sec=0;
h1=sec;
//调秒
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;
P0=bb;
delay(500);
P0=dd;
P0=ee;
num2=n;
num1=m;
num1--;
for(i=num1;
i>
i--)
for(j=10;
if(i==1)
for(j=4;
voiddelay(uintz)
uintt1,y;
//延时函数
for(t1=z;
t1>
t1--)
for(y=125;
y>
y--);
voidtime1()
for(;
(shi>
5);
)
P0=0xdd;
P0=0xff;
//23点到5点的工作函数
P1=table[1];
P2=table[1];
voidenter0()interrupt0
if(k2==0)
{//外部中断0函数
P1=0x00;
P2=0x00;
P0=0xb6;
voidenter1()interrupt2
if(k3==0)
{//外部中断1函数
P1=0x40;
P2=0x40;
P0=0x6b;
voidenter2()interrupt1
tt++;
if(tt==20)
tt=0;
//外部中断0函数
①给单片机(交通灯系统)上电(或者已上电按复位键)。
②以连续方式从0100H开始执行程序,初始态0为南北路口的红灯亮东西路口的绿灯亮,并设置了初始时间24秒,数码管显示24秒。
③此时可以设置红绿灯时间(ADD键加,DEC键减每次各一,注意本设置红灯与绿灯为同一初始时间)。
④按下ok开始键系统关闭设置红绿灯时间功能进入倒计时,系统进入运行,经过一段时间,转为状态1东西和南北路口黄灯亮经过5秒延时并关闭数码管显示,进入状态2南北路口绿灯亮东西路口红灯亮经过倒计时之后返回初始0状态实现循环。
(注意此时不能设置红绿灯时间)
七、检测与调试:
1、硬件调试:
硬件调试是利用开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。
硬件调试可分为静态调试与动态调试两步进行。
静态调试
静态调试是在用户系统未工作时的一种硬件检测。
第一步:
目测。
检查外部的各种元件或者是电路是否有断点。
第二步:
用万用表测试。
先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。
第三步:
加电检测。
给板加电,检测所有的插座或是器件的电源端是否符合要求的值
第四步:
是联机检查。
因为只有用单片机开发系统才能完成对用户系统的调试。
动态调试
动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。
动态调试的一般方法是由近及远、由分到合。
由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。
当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。
由分到合的调试既告完成。
由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。
调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
2、软件调试:
软件调试是通过对用户程序(本次采用伟福仿真软件)的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
程序后,编辑,查看程序是否有逻辑的错误。
通过这一阶段的单片机课程设计,我对单片机有了更深的了解。
学会如何用编程方法消除抖动,更牢固的掌握了各个中断的用法,特别是定时∕计数器的两种用法的混合使用,在编程时经常因为考虑不周而出现了几次修改,但可幸的是编程思路的正确,让我不用很大篇幅的修改,使我在不动大框架中学到了很多知识,并且巩固了以往的知识!
从这之后我更加认识到最初构想思路的重要性。
九、参考资料
1.童诗白,华成英主编.《模拟电子技术基础(第四版)》高等教育出版社
2.谢维成杨加国主编《单片机原理与应用及C51程序设计(第2版)》清华大学出版社
本课程设计的先修课程是:
模拟电子技术、数子电子技术、单片机原理与技术。
一个完整的交通灯相当于一个简单的单片机系统,该系统有交通灯设置电路、单片机、显示电路等构成。
单片机是集成的IC芯片,只需根据实际设计要求选型。
其他部分都需要根据应用要求和性能指标自行设计。