感悟网 导航

求用C语言编写的交通灯程序,C51单片机控制,无左转右转 在单片机程序中,右转和左转间加delay(500)会怎么运行...

作者&投稿:元米 (若有异议请与网页底部的电邮联系)
用51单片机编写城市道路交通灯c语言程序,有左转右转~

#include
#define uchar unsigned char
#define uint unsigned int
sbit RED_A=P3^0; //东西向指示灯
sbit YELLOW_A=P3^1;
sbit GREEN_A=P3^2;
sbit RED_B=P3^3; //南北向指示灯
sbit YELLOW_B=P3^4;
sbit GREEN_B=P3^5;
sbit KEY1=P1^0;
sbit KEY2=P1^1;
sbit KEY3=P1^2;
//延时倍数,闪烁次数,操作类型变量
uchar Flash_Count=0,Operation_Type=1,LEDsng,LEDsns,LEDewg,LEDews,discnt;
uint Time_Count=0,time;
uchar ledtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
void displaysn()
{
LEDsng=((time-Time_Count)/20)%10;
LEDsns=((time-Time_Count)/20)/10;
LEDewg=0x10;
LEDews=0x10;
}
void displayew()
{
LEDewg=((time-Time_Count)/20)%10;
LEDews=((time-Time_Count)/20)/10;
LEDsng=0x10;
LEDsns=0x10;
}
//定时器0 中断函数
void T0_INT() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
switch(Operation_Type)
{
case 1: //东西向绿灯与南北向红灯亮
if((Time_Count%20)==0)displayew();
RED_A=0;YELLOW_A=0;GREEN_A=1;
RED_B=1;YELLOW_B=0;GREEN_B=0;
if(++Time_Count!=time) return;
Time_Count=0;
Operation_Type=2;
break;
case 2: //东西向黄灯开始闪烁,绿灯关闭
LEDewg=0x0;
LEDews=0x0;
if(++Time_Count!=8) return;
Time_Count=0;
YELLOW_A=~YELLOW_A;GREEN_A=0;
if(++Flash_Count!=10) return; //闪烁
Flash_Count=0;
Operation_Type=3;
break;
case 3: //东西向红灯与南北向绿灯亮
if((Time_Count%20)==0)displaysn();
RED_A=1;YELLOW_A=0;GREEN_A=0;
RED_B=0;YELLOW_B=0;GREEN_B=1;
if(++Time_Count!=time) return;
Time_Count=0;
Operation_Type=4;
break;
case 4: //南北向黄灯开始闪烁,绿灯关闭
LEDsng=0x0;
LEDsns=0x0;
if(++Time_Count!=8) return;
Time_Count=0;
YELLOW_B=~YELLOW_B;GREEN_A=0;
if(++Flash_Count!=10) return; //闪烁
Flash_Count=0;
Operation_Type=1;
break;
}
}
void t1_isr() interrupt 3
{
TR1=0;
TH1=(65536-3000)/256;
TL1=(65536-3000)%256;
TR1=1;
switch(discnt)
{
case 0:
P2=0x02;
P0=ledtab[LEDewg];
break;
case 1:
P2=0x01;
P0=ledtab[LEDews];
break;
case 2:
P2=0x08;
P0=ledtab[LEDsng];
break;
case 3:
P2=0x04;
P0=ledtab[LEDsns];
break;
default:discnt=0;break;
}
discnt++;
discnt&=0x03;
}
void delay()
{
uint i;
for(i=0;i<1000;i++);
}
//主程序
void main()
{
TMOD=0x11; //T0 方式1
EA=1;
ET0=1;
TR0=1;
TH1=(65536-3000)/256;
TL1=(65536-3000)%256;
TR1=1;
ET1=1;
time=100;
Time_Count=100;
Time_Count=0;
Operation_Type=1;
while(1)
{
if(KEY1==0) //按一下加1S
{
delay();
if(KEY1==0)
{
while(KEY1==0);
TR0=0;
time+=20;
LEDsng=(time/20)%10;
LEDsns=(time/20)/10;
LEDewg=0x10;
LEDews=0x10;
}
}
if(KEY2==0) //按一下减1S
{
delay();
if(KEY2==0)
{
while(KEY2==0);
TR0=0;
time-=20;
if(time==0)time=20;
LEDewg=(time/20)%10;
LEDews=(time/20)/10;
LEDsng=0x10;
LEDsns=0x10;
}
}
if(KEY3==0) //启动
{
delay();
if(KEY3==0)
{
while(KEY2==0);
TR0=1;
Time_Count=0;
}
}
}
}

Delay(500),是延时一段时间,加入到流水灯中,是每个LED灯点亮的间隔时间。

//以下代码经过Keil C51软件调试通过
#include "reg51.h" //头文件包含

//宏定义
#define uint unsigned int
#define uchar unsigned char

#define ON 0 //0的时候灯亮
#define OFF 1 //1的时候灯亮

//管脚定义
//南北道 黄灯亮3秒 红灯亮 30秒 黄灯3秒 绿灯38秒
//东西道 黄灯亮3秒 绿灯亮 28秒 黄灯3秒 红灯40秒
sbit PortDX_Yellow = P1^0; //东西方向黄灯
sbit PortDX_Red = P1^1; //东西方向红灯
sbit PortDX_Green = P1^2; //东西方向绿灯
sbit PortNB_Yellow = P1^3; //南北方向黄灯
sbit PortNB_Red = P1^4; //南北方向红灯
sbit PortNB_Green = P1^5; //南北方向绿灯

void delay(uint ms) // 毫秒级延时(AT89C52 @ 11.0592MHz)
{
uint ti;
while(ms--)
{
for(ti=0;ti<112;ti++){}//112
}
}

/*==================== 主函数 ====================*/
void main(void)
{
delay(400); //开机延时400ms
while(1)
{
PortNB_Yellow = ON ;PortNB_Red = OFF;PortNB_Green = OFF;//南北黄灯亮3秒
PortDX_Yellow = ON ;PortDX_Red = OFF;PortDX_Green = OFF;//东西黄灯亮3秒
delay(3000);
PortNB_Yellow = OFF;PortNB_Red = ON ;PortNB_Green = OFF;//南北红灯亮28秒
PortDX_Yellow = OFF;PortDX_Red = OFF;PortDX_Green = ON ;//东西绿灯亮28秒
delay(28000);
PortNB_Yellow = OFF;PortNB_Red = ON ;PortNB_Green = OFF;//南北红灯亮2秒
PortDX_Yellow = ON ;PortDX_Red = OFF;PortDX_Green = OFF;//东西黄灯亮2秒
delay(2000);
PortNB_Yellow = ON ;PortNB_Red = OFF;PortNB_Green = OFF;//南北黄灯亮1秒
PortDX_Yellow = ON ;PortDX_Red = OFF;PortDX_Green = OFF;//东西黄灯亮1秒
delay(1000);
PortNB_Yellow = ON ;PortNB_Red = OFF;PortNB_Green = OFF;//南北黄灯亮2秒
PortDX_Yellow = OFF;PortDX_Red = ON ;PortDX_Green = OFF;//东西红灯亮2秒
delay(2000);
PortNB_Yellow = OFF;PortNB_Red = OFF;PortNB_Green = ON ;//南北绿灯亮38秒
PortDX_Yellow = OFF;PortDX_Red = ON ;PortDX_Green = OFF;//东西红灯亮38秒
delay(3800);
}
}

1.当为黄灯时南北、东西两道同时为黄灯;以提示行人或车辆下一个灯色即将到来时间 3秒。
2.当南北为红灯,南北道车辆禁止通行,时间30秒;南北道为绿灯,南北道车辆通过时间38秒 。
3.当东西道绿灯,东西道车辆通行,时间为28秒;东西道为红灯,东西道车辆禁止通过时间为40秒。
4.这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。

《求一交通灯的C语言程序》
答:C语言编程如下: #include <REG51.H> unsigned char t0,t1; //定义全局变量,用来保存延时时间循环次数 //函数名:delay0_5s1 //函数功能:用T1的方式1编制0.5秒延时程序,假定系统采用12MHz晶振,定 // 时器1、工作方式1定时50ms,再循环10次即可定时到0.5秒 //形式参数:无 //返...

《用51单片机编写城市道路交通灯c语言程序,有左转右转》
答:include<reg51.h> define uchar unsigned char define uint unsigned int sbit RED_A=P3^0; //东西向指示灯 sbit YELLOW_A=P3^1;sbit GREEN_A=P3^2;sbit RED_B=P3^3; //南北向指示灯 sbit YELLOW_B=P3^4;sbit GREEN_B=P3^5;sbit KEY1=P1^0;sbit KEY2=P1^1;sbit KEY3=P1^2;/...

《强帮我做c语言版51芯片十字路口交通灯程序》
答:include<reg52.h> include<intrins.h> define uint unsigned int define uchar unsigned char unsigned char code dis_7[10]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};char i;sfr p0=0x80;sfr p1=0x90;sbit red1=p1^0;sbit green1=p1^1;sbit yellow1=p1^2;sbit r...

《求助一个单片机设计的交通灯程序,用C语言编写。》
答:{ red1=1;yel2=1;//红灯1黄灯2关 gre1=0;red2=0;//绿灯1红灯2亮 }

《单片机C语言编交通灯,请教~~》
答:switch(num2) //红绿灯 { case(0): //10s内s绿灯亮 sr=0;hg=0;sg=1;hr=1;break;case(1): //5S:竖黄横红 sg=0;sy=1;delay(5);sy=0;delay(5);break;case(2): //10s:竖红横绿 sg=0;sr=1;sy=0;hg=1;hr=0;break;case(3): //5S:竖红横黄 hg=0;hy=1;delay(5...

《...帮忙设计一个交通灯控制的C语言程序。谢谢。。(汇编指令太麻烦咯...》
答:sbit RED_A = P0^0;sbit YELLOW_A = P0^1;sbit GREEN_A = P0^2;sbit RED_B = P0^3;sbit YELLOW_B = P0^4;sbit GREEN_B = P0^5;uchar Flash_Count = 0, Operation_Type=1;void DelayMS(uint x){ uchar i;while (x--) for (i=0;i<120;i++);} void Traffic...

《跪求51单片机交通信号灯c语言程序设计》
答:YELLOW11 = 0; //宝田路黄灯亮 RED10 = 0; //宝田路人行道红灯亮 YELLOW01 = 0; //前进路红灯亮 RED00 = 0; //前进路人行道红灯亮 } //--前进路通行--// else if(Second < 66) { DisplayData[0] = 0x00; DisplayData[1] = 0x00; Display...

《单片机模拟交通灯C语言例子,看不懂,求解释》
答:例:void hanshu(){ return; while(1); }这个子函数不会陷入死循环,while(1)根本执行不到。您的函数中到达return后其实子函数Light()也结束了,其实跳出了该函数,返回到main中了,只不过由于main中的while的作用再次重头进入了而已。4、return在switch语句中还有终止查找的作用。这个您百度百科...

《交通灯控制电路设计(当灯颜色切换时候闪烁三次;数码管上显示倒计时;外...》
答:基于单片机控制的交通信号灯 单片机C语言设计十字交通信号灯 构思流程 c51交通灯控制器 在马路的十字路过东西南北各设置红、黄、绿3种信号灯。由P1.0~P1.2控制南北方向,其中P1.0为红灯,P1.1为黄灯,P1.2为绿灯。P1.3~P1.5控制东西方向,其中P1.3为红灯,P1.4为黄灯,P1.5为绿灯。

《51单片机交通灯程序 东西红灯亮60秒,南北绿灯亮55秒 东西绿灯亮55秒,南...》
答:sbit nb P1.1 void delay(void) //误差 0us { unsigned char a,b,c;for(c=167;c>0;c--)for(b=171;b>0;b--)for(a=16;a>0;a--);_nop_; //if Keil,require use intrins.h } void mian(){ char a;while(1){ nb=1;dx=0;for(a=0;a<60;a++)delay();dx=1...

   

返回顶部
本页内容来自于网友发表,若有相关事宜请照下面的电邮联系
感悟网