单片机交通灯控制程序由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“单片机控制交通灯程序”。
#include #define uchar unsigned char #define uint unsigned int uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40 };//*************digit display port******* sbit led_w1=P1^1;sbit led_w2=P1^0;sbit led_w3=P1^3;sbit led_w4=P1^2;
//*****define led port ********** sbit R1=P2^4;//east and west red led sbit Y1=P2^3;//east and west yellow led sbit G1=P2^2;//east and west green led sbit R2=P2^5;//south and north red led sbit Y2=P2^6;//south and north yellow led sbit G2=P2^7;//south and north green led
//*********define key************** sbit k0=P3^0;//emergency sbit k1=P3^1;//east and west pa sbit k2=P3^2;//south and north pa sbit k3=P3^3;//start and subtract 1 sbit k4=P3^4;//pause and add 1 sbit k5=P3^5;//set time
//*********define variable********* bit flag,flag_t;uchar dx_time,nb_time;uchar cnt,pa_time,cnt1,y_time;uchar k0num,k1num,k2num,k3num,k4num,k5num;
//*********define key******** void delay(uint i){ uint x,y;for(x=i;x>0;x--)
for(y=110;y>0;y--);} void timer0_init(){ TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=1;ET1=1;}
void led_display(uchar dx,nb){ uchar dx1,dx2,nb1,nb2;dx2=dx/10;dx1=dx%10;nb2=nb/10;nb1=nb%10;if(dx>99){
led_w1=1;
led_w2=1;} else {
led_w1=0;
P0=table[dx1];
delay(5);
led_w1=1;
if(dx0)led_w2=1;
else
{
led_w2=0;
P0=table[dx2];
delay(5);
led_w2=1;
} } if(nb>99){
led_w3=1;
led_w4=1;} else {
led_w3=0;
P0=table[nb1];
delay(5);
led_w3=3;
if(nb0)led_w4=1;
else
{
led_w4=0;
P0=table[nb2];
delay(5);
led_w4=4;
} } } //*************light work********** void circle_led(){ if(!flag){
if(pa_time>5)
{
led_display(pa_time-5,pa_time);
R1=1;Y1=1;G1=0;
//east and west pa
R2=0;Y2=1;G2=1;
//south and north stop
}
if(pa_time0)
{
if(cnt>=10)led_display(pa_time,pa_time);
else led_display(100,pa_time);
R1=1;G1=1;
//east and west yellow led flash
if(cnt>=10)Y1=0;
else Y1=1;
R2=0;Y2=1;G2=1;
}
if(pa_time==0)
{
pa_time=nb_time;
flag=1;
} } else {
if(pa_time>5)
{
led_display(pa_time,pa_time-5);
R1=0;Y1=1;G1=1;
//east and west stop
R2=1;Y2=1;G2=0;
//south and north pa
}
if(pa_time0)
{
if(cnt>=10)led_display(pa_time,pa_time);
else led_display(pa_time,100);
R1=0;Y1=1;G1=1;
R2=1;G2=1;
//south and north yellow led flash
if(cnt>=10)Y2=0;
else Y2=1;
}
if(pa_time==0)
{
pa_time=dx_time;
flag=0;
} } }
void emergency()
//east and west,south and north stop { led_display(0,0);R1=0;Y1=1;G1=1;R2=0;Y2=1;G2=1;} void dx_pa()
//east and west pa,south and north stop { led_display(100,100);if(y_time0){
TR1=1;
R1=0;Y1=1;G1=1;
R2=1;G2=1;
//south and north yellow led flash
if(cnt1>=10)Y2=0;
else Y2=1;} if(y_time==0){
TR1=0;
R1=1;Y1=1;G1=0;
R2=0;Y2=1;G2=1;} } void nb_pa()
//south and north pa,east and west stop { led_display(100,100);if(y_time0){
TR1=1;
R1=1;G1=1;
if(cnt1>=10)Y1=0;//east and west yellow led flash
else Y1=1;
R2=0;Y2=1;G2=1;
} if(y_time==0){
TR1=0;
R1=0;Y1=1;G1=1;
R2=1;Y2=1;G2=0;} }
//***********keyboard scan************ void keyscan(){
if(!k5num)
{
if(k0==0)//*******emergency*******
{
delay(10);
if(k0==0)
{
while(!k0);
TR0=0;
k0num=1;
}
}
if(!k1num&&!k0num)
{
if(k1==0)
{
delay(10);
if(k1==0)
{
while(!k1);
k1num=1;
k2num=0;
y_time=5;//单方向通行时,黄灯闪烁时间
TR0=0;
TR1=1;
}
}
}
if(!k2num&&!k0num)
{
if(k2==0)
{
delay(10);
if(k2==0)
{
while(!k2);
k1num=0;
k2num=1;
y_time=5;//单方向通行时,黄灯闪烁时间
TR0=0;
TR1=1;
}
}
}
if(k3==0)
{
delay(10);
if(k3==0)
{
while(!k3);
if(k1num||k2num)pa_time=dx_time;//由东西或南北通行返回时,重新开始执行。
k0num=0;
k1num=0;
k2num=0;
k4num=0;
k5num=0;
TR0=1;
TR1=0;
flag_t=0;
}
} {
} if(!k4&&!k0num)
//pause { delay(10);if(k4==0){
while(!k4);
TR0=0;
k4num=1;} }
if(k4num==1)
//暂停键按下时,才可以调整两个方向通行时间 if(k5==0){ delay(10);if(k5==0){
k5num++;
while(!k5);
switch(k5num)
{
case 1:
TR0=1;
flag_t=1;//调整时间时,pa_time值不变。
k5num=1;
break;
case 2:
k5num=2;
break;
case 3:
TR0=0;
k5num=0;
pa_time=dx_time;//重新赋值
break;
} } } if(k5num!=0){ if(k3==0){
delay(10);
if(k3==0)
{
while(!k3);
switch(k5num)
{
case 1:
dx_time--;
if(dx_time
break;
case 2:
nb_time--;
if(nb_time
break;
}
}
}
if(k4==0)
{
delay(10);
if(k4==0)
{
while(!k4);
switch(k5num)
{
case 1:
dx_time++;
if(dx_time>=100)
break;
case 2:
nb_time++;
if(nb_time>=100)
break;
}
}
}
} } } void main(){ timer0_init();dx_time=45;nb_time=30;
dx_time=99;nb_time=99;dx_time=10;nb_time=10;
pa_time=dx_time;while(1){ keyscan();if(k0num)emergency();else { switch(k4num){
case 0:
if(!k1num&&!k2num)
circle_led();
else
{
if(k1num)dx_pa();
if(k2num)nb_pa();
}
break;
case 1:
switch(k5num)
{
case 0:
if(!k1num&&!k2num)
circle_led();
else
{
if(k1num)dx_pa();
if(k2num)nb_pa();
}
break;
case 1:
R1=1;Y1=1;G1=1;//调整时间时,关闭所有灯
R2=1;Y2=1;G2=1;
if(cnt
led_display(100,nb_time);
else
led_display(dx_time,nb_time);
break;
case 2:
R1=1;Y1=1;G1=1;//调整时间时,关闭所有灯
R2=1;Y2=1;G2=1;
if(cnt
led_display(dx_time,100);
else
led_display(dx_time,nb_time);
break;
}
break;
}
}
} } void timer0()interrupt 1 { TH0=(65536-50000)/256;TL0=(65536-50000)%256;cnt++;if(cnt==20){
cnt=0;
if(flag_t==0)pa_time--;//调整时间时,不执行此操作
} } void timer1()interrupt 3 { TH1=(65536-50000)/256;TL1=(65536-50000)%256;cnt1++;if(cnt1==20){
cnt1=0;
y_time--;//单方向通行时,黄灯闪烁时间。
} }
【导语】刀豆文库的会员“carolzkf”为你整理了“单片机交通灯参考文献”范文,希望对你的学习、工作有参考借鉴作用。[1]何悠. 基于单片机的智能交通灯控制系统实现方案分析[......
《单片机原理与接口技术课程设计报告》课题:以交通灯为主的多功能任务设计班级 学号 学生姓名指导教师淮阴工学院 电子与电气工程学院2015-6 1目录一、课程设计目的.............
毕业设计程序源代码ORG 0000H;主程序的入口地址LJMP MAIN;跳转到主程序的开始处ORG 0003H;外部中断0的中断程序入口地址ORG 000BH;定时器0的中断程序入口地址LJMP T0_INT;跳......
#include #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; sbit beep=P2^3; unsigned int pp; unsigned char code table[]={0x3f......
交通灯控制系统设计摘要:本系统由单片机系统、键盘、LED 显示、交通灯演示系统组成。系统包括人行道、左转、右转、以及基本的交通灯的功能。系统除基本交通灯功能外,还具有倒......