重庆邮电大学第六届电子制作大赛
为方便电路,仅接一个四位数码管显示,具体有程序实现。通过同名管脚上所加电平的高低来控制法官二极管是否点亮而显示不同数字,由于数码管显示需要大一点的电流,而单片机管脚输出的电流不足以驱动它发亮,所以在数码管的位选处接NPN型三极管驱动它。
图8检测、报警电路
P2.2和P3.6外接传感器和蜂鸣器,当传感器检测到有人闯红灯时蜂鸣器就以滴滴声报警。由于单片机的I/O口输出电流太小,不能驱动蜂鸣器发出声音,所以要接一个电流放大电路,三极管的基极经过限流电阻R3后由单片机的P3.6控制。 (8)电源电路
图9
二、软件部分
交通灯控制器的软件设计采用C语言编程实现,算法及程序结构主要有,子函 数调用、程序初始化、程序的模块化、中断定时处理、按键检测判断、以及循环等。
1、燃亮时序
交通灯燃亮时序控制运用if判断语句,判断按键或程序初始化后设定的交
通灯时序状态值选择哪个灯亮,再通过C语言的循环结构构和顺序结构循环控制灯亮的顺序。
2、系统延时
系统延时通过软延时的方法,运用C语言的循环结构for语句,通过调用延 时子函数的方法产生约(1/12)*24*(N+110)us的延时,N为延时函数参数值。
-11-
重庆邮电大学第六届电子制作大赛
3、计数显示间隔1秒的精确定时
本系统延时由于受到单片机资源的限制,主要采用单片机定时器定时和软
延时相结合的方式。首先设置50ms计数初值为50000,当计数溢出并置标志位TR0为1时产生
中断,进入中断程序后,再通过软件延时的方式设置20次循环标志,只有当计数器中断了20次即
延时共1S时数码管才开始计数,以此实现1S的精确定时。
4、显示判断
通过设置显示类型的标志位,按键检测产生标志位变化,用if语句判断执行显示类型
5、模式切换、复位、暂停及传感检测
通过if语句判断检测到的外部输入信号,选择执行。
6、程序控制流程图如下图。
-12-
重庆邮电大学第六届电子制作大赛
开始 初始化 设定初值 按键事件检测与处 理 数码管显示程序处理 绿灯倒计时 光电管为低平? Y 检测车流量 N 倒计时完毕? Y 黄灯倒计时5秒 红灯倒计时 Y 光电管低电平?检测闯红灯 N 倒计时完毕? Y 结束
N -13-
重庆邮电大学第六届电子制作大赛
7、系统程序
#include
sbit s1=P3^6; //流量liul sbit s4=P2^0; //闯红灯chuh sbit ra=P1^0; sbit ya=P1^1; sbit ga=P1^2; sbit rb=P1^3; sbit yb=P1^4; sbit gb=P1^5;
sbit chuangan=P2^1;
uint pp,cc,aa=20,bb=20,num,i,j,tt,dd,ee,ff,gg,m,n,kk,ll; uint num1=0,num2=0,m1=1,m2=1,m3=1,n1=1,n2=1; uint shia,shib,gea,geb,shi1,ge1,shi2,ge2,shi3,ge3,shi4,ge4; uint hh1=1,hh2=1,hh3=1,hh4=1; uint m3,h1=1,h2=1,h3=1,h4=1;
uchar code tabd[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//7段数码管段码表共阳
uchar code tabw[]={0x80,0x40,0x20,0x10};//位选表 void delay(uint);
void display(uchar,uchar,uchar,uchar);
void traf(uchar,uchar,uchar,uchar,uchar,uchar); void main() {
pp=5;m3=1;aa=0;bb=0; traf(1,1,1,1,1,1);
ll=1;kk=1;n=1;m=1;dd=1; cc=1;tt=1;ff=0;gg=0; led=1; beep=1;
-14-
重庆邮电大学第六届电子制作大赛
/*************************************************/ TMOD=0x01;//定时器设置 TH0=(65536-50000)/256;
TL0=(65536-50000)%6; //50ms初值 EA=1; ET0=1; TR0=1;
/************************************************/ while(1) {
shia=aa/10;
gea=aa; //交通灯计数参量 shib=bb/10; geb=bb; shi1=num1/1000;
ge1=(num100)/100;
shi2=((num100)0)/10; //A车道车流量计数参量 ge2=((num100)0); shi3=num2/1000;
ge3=(num200)/100;
shi4=((num200)0)/10; // A车道闯红灯计数参量 ge4=((num200)0);
/**********************************************/ if(n1==1&&n2==1)
{display(shia,gea,shib,geb); } //调用显示函数,显示交通灯计数 else if(n1==0&&n2==1)
{ display(shi1,ge1,shi2,ge2); }//调用显示函数,显示车流量计数 else if(n1==1&&n2==0)
{display(shi3,ge3,shi4,ge4); }// 调用显示函数,显示闯红灯计数 if(s1==0) {EA=0; n1=0; }
else if(s1==1) //车流量数码管显示判断 {n1=1; EA=1; }
if(s4==0) {n2=0; EA=0;
-15-
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库基于51单片机的智能十字路口交通灯系统设计(3)在线全文阅读。
相关推荐: