交通信号灯C语言源程序

合集下载

C语言实现红绿灯

C语言实现红绿灯

用C语言实现红绿灯源程序如下:#include <reg52.h>bit red,green,yellow,turnred; //定义红、黄、绿及转红标志code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管 0-9unsigned char Dis_Shiwei;//定义十位unsigned char Dis_Gewei; //定义个位void delay(unsigned int cnt) //用于动态扫描数码管的延时程序{while(--cnt);}main(){TMOD |=0x01;//定时器设置 10ms in 12M crystal定时器0,工作方式1,16位定时器TH0=0xd8; //65535-10000=55535=D8F0(十六进制) TL0=0xf0;IE= 0x82; //中断控制,EA=1开总中断,ET0=1:定时器0中断允许TR0=1; //开定时器0中断P1=0xfc;//红灯亮,根据红黄绿接灯的顺序。

red =1;while(1){P0=Dis_Shiwei;//显示十位,这里实现用8位数码管,即左1位P2=0;delay(300);//短暂延时P0=Dis_Gewei; //显示个位,左数,2位P2=1;delay(300);}}/********************************//* 定时中断 *//********************************/void tim(void) interrupt 1 using 1{static unsigned char second=60,count; //初值60TH0=0xd8;//重新赋值,10毫秒定时TL0=0xf0;count++;if (count==100){count=0;second--;//秒减1if(second==0){ //这里添加定时到0的代码,可以是灯电路,继电器吸合等,或者执行一个程序if(red) //红灭,先转黄{red=0;yellow=1;second=4;P1=0xF3;//黄灯亮4秒,黄灯为过渡灯,再根据情况转绿或转红 }else if(yellow && !turnred){yellow=0;green=1;second=25;P1=0xCF;//绿灯亮25秒,}else if(green){yellow=1;green=0;second=4;P1=0xF3;//黄灯亮4秒turnred=1;}else if(yellow && turnred) //绿灯灭,转黄灯,后红灯,turnred=1时{red=1;yellow=0;P1=0xFC;//红灯亮60秒second=60;turnred=0; //接下来是转黄,绿。

红绿灯C语言程序

红绿灯C语言程序

红绿灯C语言程序(P0口接数码管,平口接发光二极管)#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar i=0,c=0,s=1;//m_flag=1;////////////////////////////////////////void dxlv1_nbh1(void) //{P1=0x5a;}void dx0_nbh1(void) //{P1=0x0a;}void dxh1_nbl1(void) //{P1=0xa5;}void dxh1_nb0(void) //{P1=0xa0;}void nbs(void) // 南北灯闪{if(m_flag==1){dxh1_nb0();}else {dxh1_nbl1();}}void dxs(void){ // 东西灯闪if(m_flag==1){dx0_nbh1();}else {dxlv1_nbh1();}}//////主程序//////////////////void main(){TMOD=0x01;//定时器0工作在方式1TH0=-5000/256;//50msTL0=-5000%256;//20msIE=0x82;///允许定时器0中断TR0=1;///启动定时器0while(1){//0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6fif(s==10){P0=0x3f;} // 东西绿灯亮,南北红灯亮倒计时开始if(s==9)P0=0x06;if(s==8)P0=0x5b;if(s==7)P0=0x4f;if(s==6)P0=0x66;if(s==5)P0=0x6d;if(s==4)P0=0x7d;if(s==3)P0=0x07;if(s==2)P0=0x7f;if(s==1){P0=0x6f;P1=0x5a;}if(s>9&&s<13){dxs();} //10秒结束南北红灯继续,东西绿灯一秒一闪闪三次if(s==13){dxh1_nbl1(); P0=0x6f; }//东西红灯亮,南北绿灯亮倒计时开始if(s==22){P0=0x3f;}if(s==21)P0=0x06;if(s==20)P0=0x5b;if(s==19)P0=0x4f;if(s==18)P0=0x66;if(s==17)P0=0x6d;if(s==16)P0=0x7d;if(s==15)P0=0x07;if(s==14)P0=0x7f;if(s>21&&s<25){nbs();} //10秒结束东西向红灯亮继续,南北绿灯一秒一闪三次if(s==25){s=1; }// s归位}}/////T0中断子程序////////////void T0_INT()interrupt 1{TH0=-50000/256;//50msTL0=-50000%256;if(c==10)m_flag=0;c++;if(c==20)//50ms*20=1s{m_flag=1;c=0;s++;//s清零}}。

基于80C51单片机的交通灯C语言源程序

基于80C51单片机的交通灯C语言源程序

#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit SH_CP=P2^0;sbit DS=P2^1;sbit ST_CP=P2^2;uchar temp;uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; void NB_tong();void DX_tong();void NBY_show();void DXY_show();sbit RED_A=P1^0;//A代表NB南北sbit YELLOW_A=P1^1;sbit GREEN_A=P1^2;sbit RED_B=P1^3;//B代表DX东西sbit YELLOW_B=P1^4;sbit GREEN_B=P1^5;sbit K1=P3^0;sbit K2=P3^1;sbit K3=P3^3;sbit SPK=P3^7;//蜂鸣器uchar time=0,Count=0;//--------------------------------//延时//--------------------------------void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}//---------------------------------------//74HC595的驱动//---------------------------------------void In_595(){uchar i;for(i=0;i<8;i++){temp<<=1;DS=CY;SH_CP=1;_nop_();_nop_();SH_CP=0;}void Out_595(){ST_CP=0;_nop_();ST_CP=1;_nop_();ST_CP=0;}//---------------------------------------//T0定时器定时及各种情况下灯亮的调用//---------------------------------------void Timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;Count++;time=time%60;if(Count==20){time++;Count=0;}if(time<=30) NB_tong();if((time>30)&&(time<=35)) NBY_show();if((time>35)&&(time<=55)) DX_tong();if((time>55)&&(time<=60)) DXY_show();}//------------------------------------//按键处理//------------------------------------void EX_INT0() interrupt 0{if(K1==0) //K1按下强制NB南北通行,倒计时黑屏暂停;断开继续以前动作。

交通信号灯C语言源程序

交通信号灯C语言源程序
{
disp_ew = set_value[1];
EW_LED_GREEN=1;
EW_LED_YELLOW =0;
sign[1]=1;
sign[0]=0;
}
if(disp_ew == 0 && sign[1] ==1)
{
disp_ew = set_value[2] + set_value[3];
disp_sn = set_value[2];
disp_ew = set_value[0];
P1 = 0xf3;
falsh_sign = 0;
ET1 = 1;
TR1 = 1;
}
}
void scan_key()
{
while(P3^0 && P3^2 && P3^3);
delay_ms(15);
if(!P3^0)
{
set_process();
}
if(!P3^2)
if(set_value[2] < 0)
{
set_value[2] = set_value[2] + 100;
}
disp_sn = set_value[2];
}
if(key == 4)
{
set_value[3]--;
if(set_value[3] < 0)
{
set_value[3] = 9;
}
disp_sn = set_value[3];
}
delay_ms(1200);
}
}ቤተ መጻሕፍቲ ባይዱ
else
{
while(!P3^3);
if(key == 1)

51单片机用C语言实现交通灯_红绿灯_源程序

51单片机用C语言实现交通灯_红绿灯_源程序

c o d eu n s i g n e dc h a rt a b [ ] = { 0 x 3 f , 0 x 0 6 , 0 x 5 b , 0 x 4 f , 0 x 6 6 , 0 x 6 d , 0 x 7 d , 0 x 0 7 , 0 x 7 f , 0 x 6 f } ; / / 共阴数码管 0 9 u n s i g n e dc h a rD i s _ S h i w e i ; / / 定义十位 u n s i g n e dc h a rD i s _ G e w e i ;/ / 定 g n e di n tc n t ) { w h i l e ( c n t ) ; } m a i n ( ) { T M O D| = 0 x 0 1 ; / / 定时器设置 1 0 m si n1 2 Mc r y s t a l 定时器 0 ,工作方式 1 ,1 6 位定时器 T H 0 = 0 x d 8 ; / / 6 5 5 3 5 1 0 0 0 0 = 5 5 5 3 5 = D 8 F 0 (十六进制) T L 0 = 0 x f 0 ; I E =0 x 8 2 ;/ / 中断控制,E A = 1 开总中断,E T 0 = 1 :定时器 0 中断允许 T R 0 = 1 ; / / 开定时器 0 中断 P 1 = 0 x f c ; / / 红灯亮,根据红黄绿接灯的顺序。 r e d= 1 ; w h i l e ( 1 ) { P 0 = D i s _ S h i w e i ; / / 显示十位,这里实现用 8 位数码管,即左 1 位 P 2 = 0 ; d e l a y ( 3 0 0 ) ; / / 短暂延时 P 0 = D i s _ G e w e i ;/ / 显示个位,左数,2 位 P 2 = 1 ;

C++项目-路口交通灯控制程序源代码

C++项目-路口交通灯控制程序源代码
minute--; second=59; } timetrans=2; } printf("\r"); Sleep(500); if(minute==0&&second==n) return 1; } return 0; } #endif
#include <math.h>
#include <iostream>
#include"diytime.h"
using namespace std;
HWND GetConsoleHwnd(void)
{
#define MY_BUFSIZE 1024
HWND hwndFound;
char pszNewWindowTitle[MY_BUFSIZE];
cppdiytimeh存放并将其放到同一文件夹下编译c编译环境红绿灯控制
分两个文件【红绿灯控制.cpp】【diytime.h】存放,并将其放到同一文件夹下编译 C++编译环境
////////////////红绿灯控制.cpp////////////////
#include <stdio.h>
#include <windows.h>
HBRUSH hBrushy = CreateSolidBrush(RGB(255,255,0));
HBRUSH hBrushg = CreateSolidBrush(RGB(0,255,0));
HBRUSH hBrushr = CreateSolidBrush(RGB(255,0,0)); HBRUSH hBrushb = CreateSolidBrush(RGB(0,0,0)); HWND hConsole = GetConsoleHwnd(); HDC pdcg=GetDC(hConsole); HDC pdcr=GetDC(hConsole); HDC pdcy=GetDC(hConsole); HDC pdcb=GetDC(hConsole); HPEN hOldPen = (HPEN)SelectObject(pdcg,hBrushg); hOldPen = (HPEN)SelectObject(pdcr,hBrushr); hOldPen = (HPEN)SelectObject(pdcy,hBrushy); hOldPen = (HPEN)SelectObject(pdcb,hBrushb); while(1) {

51单片机用C语言实现交通灯

51单片机用C语言实现交通灯

51单片机用C语言实现交通灯51 单片机用C 语言实现交通灯(红绿灯)源程序交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改。

源程序如下:#include bit red,green,yellow,turnred; //定义红、黄、绿及转红标志code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管0- 9unsigned char Dis_Shiwei;//定义十位unsigned char Dis_Gewei; //定义个位void delay(unsigned int cnt) //用于动态扫描数码管的延时程序{while(--cnt);}main() {TMOD |=0x01;//定时器设置10ms in 12M crystal 定时器0,工作方式1,16 位定时器TH0=0xd8; //65535-10000=55535=D8F0(十六进制)TL0=0xf0;IE= 0x82; //中断控制,EA=1 开总中断,ET0=1:定时器0 中断允许TR0=1; //开定时器0中断P1=0xfc;//红灯亮,根据红黄绿接灯的顺序。

red =1;while(1) {P0=Dis_Shiwei;//显示十位,这里实现用8 位数码管,即左1 位P2=0;delay(300); //短暂延时P0=Dis_Gewei; //显示个位,左数,2 位P2=1;delay(300);}}void tim(void) interrupt 1 using 1{static unsigned char second=60,count; //初值60TH0=0xd8;//重新赋值,10 毫秒定时TL0=0xf0;count++;if (count==100) {count=0;second--;//秒减1if(second==0){ //这里添加定时到0 的代码,可以是灯电路,继电器吸合等,或者执行一个程序if(red) //红灭,先转黄{red=0;yellow=1;second=4;P1=0xF3;//黄灯亮4 秒,黄灯为过渡灯,再根据情况转绿或转红}else if(yellow && !turnred){yellow=0;green=1;second=25;P1=0xCF;// 绿灯亮25 秒,}else if(green){yellow=1;green=0;second=4;P1=0xF3;//黄灯亮4 秒turnred=1;}else if(yellow && turnred) //绿灯灭,转黄灯,后红灯,turnred=1 时{red=1;yellow=0;P1=0xFC;//红灯亮60 秒second=60;turnred=0; //接下来是转黄,绿。

51单片机控制交通灯原理图及C语言程序

51单片机控制交通灯原理图及C语言程序

Proteus仿真原理图:Keil C源程序:#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit RED_DONGXI = P1^0;//南北方向红灯亮sbit YELLOW_DONGXI = P1^1;//南北方向黄灯亮sbit RED_NANBEI = P1^3;//东西方向红灯亮sbit GREEN_DONGXI = P1^2;//南北方向绿灯亮sbit YELLOW_NANBEI = P1^4;//东西方向黄灯亮sbit GREEN_NANBEI = P1^5;//东西方向绿灯亮sbit DXweixuan1 = P1^6;//南北方向数码管位选1sbit DXweixuan2 = P1^7;//南北方向数码管位选2sbit NBweixuan1 = P3^0;//东西方向数码管位选1sbit NBweixuan2 = P3^1;//东西方向数码管位选2sbit L1=P3^5;sbit L2=P3^6;sbit L3=P3^7;uint aa, bai,shi,ge,bb;uint shi1,ge1,shi2,ge2;uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uint code table1[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};void delay(uint z);void init(uint a);void display(uint shi1,uint ge1,uint shi2,uint ge2);void xtimer0();void init1();void init2();void init3();void init4();void init5();void xint1();void xint0();void LED_ON();void LED_OFF();void main(){P0=0xFF;P1=0xFF;P2=0x00;P3=0xFF;EA=1;EX0=1;IT0=0;init1();while(1){init2();//第2个状态init3(); //第3个状态init4(); //第4个状态init5();//第5个状态}}void init1()//第一个状态:东西、南北方向均亮红灯5S {uint temp;temp=5;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_DONGXI=0; //第一个状态东西、南北均亮红灯5SRED_NANBEI=0;GREEN_DONGXI=1;GREEN_NANBEI=1;YELLOW_DONGXI=1;YELLOW_NANBEI=1;if(aa==20)//定时20*50MS=1S{aa=0;temp--;}shi1=shi2=temp/10;ge1=ge2=temp%10;if(temp==0){temp=5;break;}display(ge1,shi1,ge2,shi2);}}void init2()//第二个状态:东西亮红灯30S~5S、南北亮绿灯25~0S;{uint temp;temp=26;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_DONGXI=1;RED_NANBEI=0;GREEN_DONGXI=0;GREEN_NANBEI=1;YELLOW_DONGXI=1;//第二个状态:东西亮绿灯25S、南北亮红灯YELLOW_NANBEI=1;if(aa==20)//定时20*50MS=1S{aa=0;temp--;shi1=(temp+5)/10;ge1=(temp+5)%10;shi2=temp/10;ge2=temp%10;if(temp==0){temp=26;break;}}display(ge1,shi1,ge2,shi2);}}void init3() //第三个状态:东西绿灯变为黄灯闪5次、南北亮红灯5S {uint temp;temp=6;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_NANBEI=0;GREEN_DONGXI=1;if(aa==20)//定时20*50MS=1S{aa=0;temp--;YELLOW_DONGXI=~YELLOW_DONGXI;shi1=temp/10;shi2=shi1;ge1=temp%10;ge2=ge1;}if(temp==0){temp=6;break;}display(ge1,shi1,ge2,shi2);}}void init4()//第四个状态:东西亮绿灯25~0S,南北方向亮红灯30~5S;{uint temp;temp=26;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_DONGXI=0;RED_NANBEI=1;YELLOW_DONGXI=1;//第一个状态东西、南北均亮红灯5SGREEN_NANBEI=0;if(aa==20){aa=0;temp--;shi1=temp/10;shi2=(temp+5)/10;ge1=temp%10;ge2=(temp+5)%10;if(temp==0){temp=26;break;}}display(ge1,shi1,ge2,shi2);}}void init5()//第五个状态:东西亮红灯、南北绿灯闪5次转亮黄灯5S {uint temp;temp=6;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;while(1){RED_NANBEI=1;RED_DONGXI=0;GREEN_DONGXI=1;GREEN_NANBEI=1;if(aa==20){aa=0;temp--;YELLOW_NANBEI=~YELLOW_NANBEI;shi1=temp/10;shi2=shi2;ge1=temp%10;ge2=ge1;if(temp==0){temp=6;break;}}display(ge1,shi1,ge2,shi2);}}void display(uint shi1,uint ge1,uint shi2,uint ge2) {DXweixuan1=0;DXweixuan2=1;NBweixuan1=1;NBweixuan2=1;P0=table[ge1];delay(5);DXweixuan1=1;DXweixuan2=0;NBweixuan1=1;NBweixuan2=1;P0=table[shi1];delay(5);DXweixuan1=1;DXweixuan2=1;NBweixuan1=0;NBweixuan2=1;P0=table[ge2];delay(5);DXweixuan1=1;DXweixuan2=1;NBweixuan1=1;NBweixuan2=0;P0=table[shi2];delay(5);}void xint0() interrupt 0 {RED_NANBEI=0;RED_DONGXI=0;GREEN_NANBEI=1;GREEN_DONGXI=1;YELLOW_NANBEI=1;YELLOW_DONGXI=1;P0=0x00;NBweixuan1=0;NBweixuan2=0;DXweixuan1=0;DXweixuan2=0;delay(2);return ;}void xint1() interrupt 2 {RED_NANBEI=1;RED_DONGXI=1;GREEN_NANBEI=0;GREEN_DONGXI=0;YELLOW_NANBEI=1;YELLOW_DONGXI=1;P0=0x00;NBweixuan1=0;NBweixuan2=0;DXweixuan1=0;DXweixuan2=0;delay(2);return ;}void xtimer0() interrupt 1 {TH0=(65535-50000)/256;TL0=(65535-50000)%256;aa++;}void delay(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<110;y++); }。

单片机-交通灯程序(C语言)

单片机-交通灯程序(C语言)

/****************************************************************************** ** 实验名: 动态显示数码管实验* 使用的IO :* 实验效果: 数码管显示76543210。

* 注意:当位选用P1口的时候注意可能会有一位不亮,那么调整J21******************************************************************************* /#include<reg51.h>//--定义使用的IO口--//#define GPIO_DIG P0#define GPIO_PLACE P1#define GPIO_TRAFFIC P2sbit RED10 = P2^0; //上人行道红灯sbit GREEN10 = P2^1; //上人行道绿灯sbit RED11 = P2^2;sbit YELLOW11= P2^3;sbit GREEN11 = P2^4;sbit RED00 = P3^0; //右人行道红灯sbit GREEN00 = P3^1; //右人行道绿灯sbit RED01 = P2^5;sbit YELLOW01= P2^6;sbit GREEN01 = P2^7;//--定义全局变量--//unsigned char code DIG_PLACE[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制查表的方法控制unsigned char code DIG_CODE[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsigned char DisplayData[8];//用来存放要显示的8位数的值unsigned char Time, Second; //用来存放定时时间//--声明全局函数--//void DigDisplay(); //动态显示函数void Timer0Cofig(void);/****************************************************************************** ** 函数名: main* 函数功能: 主函数* 输入: 无* 输出: 无******************************************************************************* /void main(void){Second = 1;Timer0Cofig();while(1){if(Second == 70){Second = 1;}//--宝田路通行,30秒--//if(Second < 31){DisplayData[0] = 0x00;DisplayData[1] = 0x00;DisplayData[2] = DIG_CODE[(30 - Second) % 100 / 10];DisplayData[3] = DIG_CODE[(30 - Second) %10];DisplayData[4] = 0x00;DisplayData[5] = 0x00;DisplayData[6] = DisplayData[2];DisplayData[7] = DisplayData[3];DigDisplay();//--宝田路通行--//GPIO_TRAFFIC = 0xFF; //将所有的灯熄灭RED00 = 1;GREEN00 = 1;GREEN11 = 0; //宝田路绿灯亮GREEN10 = 0; //宝田路人行道绿灯亮RED01 = 0; //前进路红灯亮RED00 = 0; //前进路人行道红灯亮}//--黄灯等待切换状态,5秒--//else if(Second < 36){DisplayData[0] = 0x00;DisplayData[1] = 0x00;DisplayData[2] = DIG_CODE[(35 - Second) % 100 / 10];DisplayData[3] = DIG_CODE[(35 - Second) %10];DisplayData[4] = 0x00;DisplayData[5] = 0x00;DisplayData[6] = DisplayData[2];DisplayData[7] = DisplayData[3];DigDisplay();//--黄灯阶段--//GPIO_TRAFFIC = 0xFF; //将所有的灯熄灭RED00 = 1;GREEN00 = 1;YELLOW11 = 0; //宝田路黄灯亮RED10 = 0; //宝田路人行道红灯亮YELLOW01 = 0; //前进路红灯亮RED00 = 0; //前进路人行道红灯亮}//--前进路通行--//else if(Second < 66){DisplayData[0] = 0x00;DisplayData[1] = 0x00;DisplayData[2] = DIG_CODE[(65 - Second) % 100 / 10];DisplayData[3] = DIG_CODE[(65 - Second) %10];DisplayData[4] = 0x00;DisplayData[5] = 0x00;DisplayData[6] = DisplayData[2];DisplayData[7] = DisplayData[3];DigDisplay();//--黄灯阶段--//GPIO_TRAFFIC = 0xFF; //将所有的灯熄灭RED00 = 1;GREEN00 = 1;RED11 = 0; //宝田路红灯亮RED10 = 0; //宝田路人行道红灯亮GREEN01 = 0; //前进路绿灯亮GREEN00 = 0; //前进路人行道绿灯亮}//--黄灯等待切换状态,5秒--//else{DisplayData[0] = 0x00;DisplayData[1] = 0x00;DisplayData[2] = DIG_CODE[(70 - Second) % 100 / 10];DisplayData[3] = DIG_CODE[(70 - Second) %10];DisplayData[4] = 0x00;DisplayData[5] = 0x00;DisplayData[6] = DisplayData[2];DisplayData[7] = DisplayData[3];DigDisplay();//--黄灯阶段--//GPIO_TRAFFIC = 0xFF; //将所有的灯熄灭RED00 = 1;GREEN00 = 1;YELLOW11 = 0; //宝田路黄灯亮RED10 = 0; //宝田路人行道红灯亮YELLOW01 = 0; //前进路红灯亮RED00 = 0; //前进路人行道红灯亮}}}/****************************************************************************** ** 函数名: DigDisplay* 输入: 无* 输出: 无******************************************************************************* /void DigDisplay(){unsigned char i;unsigned int j;for(i=0; i<8; i++){GPIO_PLACE = DIG_PLACE[i]; //发送位选GPIO_DIG = DisplayData[i]; //发送段码j = 10; //扫描间隔时间设定while(j--);GPIO_DIG = 0x00; //消隐}}/****************************************************************************** ** 函数名: Timer0Cofig* 函数功能: 配置定时器* 输入: 无* 输出: 无******************************************************************************* /void Timer0Cofig(void){TMOD = 0x01; //定时器0选择工作方式1TH0 = 0x3C; //设置初始值,定时50MSTL0 = 0xB0;EA = 1; //打开总中断ET0 = 1; //打开定时器0中断TR0 = 1; //启动定时器0}/****************************************************************************** ** 函数名: Timer0* 输入: 无* 输出: 无******************************************************************************* /void Timer0() interrupt 1{TH0 = 0x3C; //设置初始值TL0 = 0xB0;Time++;if(Time == 20){Second ++;Time = 0;}}。

模拟红绿灯c程序

模拟红绿灯c程序

算法描述:1、定义green函数(清屏显示(纵==green 横==red延时30s)定义red函数(清屏显示(横==green 纵==red)延时30s)定义yellow1 yellow2函数(清屏显示延时3s)2、建立循环:调用green函数3、调用yellow1函数4、调用red函数5、调用yellow2函数6、返回继续循环执行。

源程序代码:#include <stdlib.h>#include <stdio.h>#include <windows.h>void green(){system("cls");printf("纵==green 横==red ");Sleep(30000);}void red(){system("cls");printf("纵==red 横==green");Sleep(30000);}void yellow1(){system("cls");printf("纵==yellow 横==red");Sleep(3000);}void yellow2(){system("cls");printf("纵==red 横==yellow");Sleep(3000);}int main(){while(true){green();yellow1();red();yellow2();}return 0;}程序功能:模拟十字路口的红绿灯的变换。

1、进入程序后,程序一直循环,以模拟红绿灯的不断变换。

2、十字路口分为纵横两方向,在模拟中分别用纵横表示。

3、设计每次红灯时间33s,绿灯时间30是,黄灯时间3s。

符合一般十字路口要求。

4、执行时,纵向红灯亮33s,同时横向绿灯亮30,接着横向黄灯亮3s;然后横向变为红灯亮33s,同时纵向绿灯亮30s,接着黄灯亮3s。

交通灯控制系统C程序代码

交通灯控制系统C程序代码
delay(100); //延时
i=v%100/10; //暂存十位
P0=led_seg_code[i];
P2=0xfd;
delay(100); //延时
-----------
void timer1() interrupt 3 //T1中断
{ T1_cnt++;
EW_red=1 ;//东西方向红灯
break;
}
}
}
}
//-------------------------
main()
{//初始化各变量
cnt_sn=init_sn[0];
cnt_ew=init_ew[0];
T1_cnt=0;
state_val_sn=0; //启动后,默认工作在序号为1 的状态
if (state_val_ew>2) state_val_ew=0;
cnt_ew=init_ew[state_val_ew];
switch (state_val_ew) //根据状态值,刷新各信号灯的状态
{ case 0: EW_green=1 ;//东西方向绿灯
EW_yellow=1;//东西方向黄灯
//晶振:11.0592M T1-250微秒溢出一次
/*变量的定义:
show_val_sn,show_val_ew: 显示的值0-59
state_val_sn,state_val_ew: 状态值 南北方向0-绿灯亮;1-黄灯亮;2-红灯亮
T1_cnt: 定时器计数溢出数
cnt_sn,cnt_ew: 倒计时的数值
init_sn[3],init_ew[3] 倒计时

交通灯C语言程序

交通灯C语言程序

#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar data buf[4];uchar data sec_dx=20; //东西数默认uchar data sec_nb=30; //南北默认值uchar data set_timedx=20; //设置东西方向的时间uchar data set_timenb=30; //设置南北方向的时间int n;uchar data countt0;//定时器0中断次数//定义5组开关sbit k4=P3^7; //切换方向sbit k1=P3^5; //时间加sbit k2=P3^6; //时间减sbit k3=P3^4; //确认sbit k5=P3^1; //禁止// P3^2 //只允许东西方向通行,中断0// P3^3 //只允许南北方向通行,中断1sbit Red_nb=P2^6; //南北红灯标志sbit Yellow_nb=P2^5; //南北黄灯标志sbit Green_nb=P2^4; //南北绿灯标志sbit Red_dx=P2^3; //东西红灯标志sbit Yellow_dx=P2^2; //东西黄灯标志sbit Green_dx=P2^1; //东西绿灯标志sbit Buzz=P3^0;bit Buzzer_Indicate;bit set=0; //调时方向切换键标志=1时,南北,=0时,东西bit dx_nb=0; //东西南北控制位bit shanruo=0;uchar code table[11]={ //共阴极字型码0x3f, //--00x06, //--10x5b, //--20x4f, //--30x66, //--40x6d, //--50x7d, //--60x07, //--70x7f, //--80x6f, //--90x00 //--NULL};//函数的声明部分void delay(int ms); //延时子程序void key(); //按键扫描子程序void key_to1(); //键处理子程序void key_to2();void key_to3();void display(); //显示子程序void logo(); //开机LOGOvoid Buzzer();//主程序void main(){TMOD=0X11; //定时器设置TH0=0X3C; //定时器0置初值0.05STL0=0XB0;EA=1; //开总中断ET0=1; //定时器0中断开启TR0=1; //启动定时0EX0=1; //开外部中断0EX1=1; //开外部中断1logo();P2=0Xc3; // 开始默认状态,东西绿灯,南北黄灯sec_nb=sec_dx+5; //默认南北通行时间比东西多5秒while(1){key(); //调用按键扫描程序display(); //调用显示程序Buzzer();}}//函数的定义部分void key(void) //按键扫描子程序{if(k1!=1) //当K1(时间加)按下时{display(); //调用显示,用于延时消抖if(k1!=1){TR0=0; //关定时器shanruo=0;P2=0x00;if(set==0)set_timedx++; //南北加1Selseset_timenb++; //东西加1Sif(set_timenb==100)set_timenb=1;if( set_timedx==100)set_timedx=1; //加到100置1sec_nb=set_timenb ; //设置的数值赋给东西南北sec_dx=set_timedx; //do{display();}while(k1!=1);}}if(k2!=1) //当K2(时间减)按键按下时{display(); //调用显示,用于延时消抖if(k2!=1){TR0=0; //关定时器shanruo=0;P2=0x00;if(set==0)set_timedx--; //南北减1Selseset_timenb--; //东西减1Sif(set_timenb==0)set_timenb=99;if( set_timedx==0 )set_timedx=99; //减到1重置99sec_nb=set_timenb ; //设置的数值赋给东西南北sec_dx=set_timedx;do{display(); //调用显示,用于延时}while(k2!=1);}}if(k3!=1) //当K3(确认)键按下时{display(); //调用显示,用于延时消抖if(k3!=1){TR0=1; //启动定时器Buzzer_Indicate=0;sec_nb=set_timenb; //从中断回复,仍显示设置过的数值sec_dx=set_timedx; //显示设置过的时间if(set==0) //时间倒时到0时{P2=0X00; //东西绿灯,南北红灯Green_dx=1;Red_nb=1;sec_nb=sec_dx+5; //回到初值}else{P2=0x00; //南北绿灯,东西红灯Green_nb=1;Red_dx=1;sec_dx=sec_nb+5;}}}if(k4!=1) //当K4(切换)键按下{display(); //调用显示,用于延时消抖if(k4!=1){TR0=0;set=!set; //取反set标志位,以切换调节方向dx_nb=set;do{display();}while(k4!=1);}}if(k5!=1) //当K5(禁止)键按下时{display(); //调用显示,用于延时消抖if(k5!=1){TR0=0; //关定时器P2=0x00;Red_dx=1;Red_nb=1; //全部置红灯sec_dx=00; //四个方向的时间都为00sec_nb=00;Buzzer_Indicate=1;do{display();}while(k5!=1);}}}void display(void) //显示子程序{buf[1]=sec_nb/10; //第1位东西秒十位buf[2]=sec_nb%10; //第2位东西秒个位buf[3]=sec_dx/10; //第3位南北秒十位buf[0]=sec_dx%10; //第4位南北秒个位P1=0xff; // 初始灯为灭的P0=0x00;P1=0xfe; //片选LED1P0=table[buf[1]]; //送东西时间十位的数码管编码delay(1); //延时P1=0xff; //关显示P0=0x00;P1=0xfd; //片选LED2P0=table[buf[2]];delay(1);P1=0xff;P0=0x00;P1=0Xfb; //片选LED3P0=table[buf[3]];delay(1);P1=0xff;P0=0x00;P1=0Xf7;P0=table[buf[0]]; //片选LED4delay(1);}void time0(void) interrupt 1 using 1 //定时中断子程序{TH0=0X3C; //重赋初值TL0=0XB0;TR0=1; //重新启动定时器countt0++; //软件计数加1if(countt0==10){if((sec_nb<=5)&&(dx_nb==0)&&(shanruo==1)) //东西黄灯闪{Green_dx=0;Yellow_dx=0;}if((sec_dx<=5)&&(dx_nb==1)&&(shanruo==1)) //南北黄灯闪{Green_nb=0;Yellow_nb=0;}}if(countt0==20) // 定时器中断次数=20时(即1秒时){ countt0=0; //清零计数器sec_dx--; //东西时间减1sec_nb--; //南北时间减1if((sec_nb<=5)&&(dx_nb==0)&&(shanruo==1)) //东西黄灯闪{Green_dx=0;Yellow_dx=1;}if((sec_dx<=5)&&(dx_nb==1)&&(shanruo==1)) //南北黄灯闪{Green_nb=0;Yellow_nb=1;}if(sec_dx==0&&sec_nb==5) //当东西倒计时到0时,重置5秒,用于黄灯闪烁时间{sec_dx=5;shanruo=1;}if(sec_nb==0&&sec_dx==5) //当南北倒计时到0时,重置5秒,用于黄灯闪烁时间{sec_nb=5;shanruo=1;}if(dx_nb==0&&sec_nb==0) //当黄灯闪烁时间倒计时到0时,{P2=0x00; //重置东西南背方向的红绿灯Green_nb=1;Red_dx=1;dx_nb=!dx_nb;shanruo=0;sec_nb=set_timenb; //重赋南北方向的起始值sec_dx=set_timenb+5; //重赋东西方向的起始值}if(dx_nb==1&&sec_dx==0) //当黄灯闪烁时间到{P2=0X00; //重置东西南北的红绿灯状态Green_dx=1;Red_nb=1;dx_nb=!dx_nb;shanruo=0;sec_dx=set_timedx; //重赋东西方向的起始值sec_nb=set_timedx+5; //重赋南北方向的起始值}}}//外部中断0void int0(void) interrupt 0 using 1 //只允许东西通行{TR0=0; //关定时器P2=0x00;Green_dx=1; //东西方向置绿灯Red_nb=1; //南北方向为红灯Buzzer_Indicate=0;sec_dx=00; //四个方向的时间都为00sec_nb=00;}//外部中断1void int1(void) interrupt 2 using 1 //只允许南北通行{TR0=0; //关定时器P2=0x00;Green_nb=1; //置南北方向为绿灯Red_dx=1; //东西方向为红灯Buzzer_Indicate=0;sec_nb=00; //四个方向的时间都为00 sec_dx=00;}void logo()//开机的Logo "- - - -"{for(n=0;n<50;n++){P0=0x40;P1=0xfe;delay(1);P1=0xfd;delay(1);P1=0Xfb;delay(1);P1=0Xf7;delay(1);P1 = 0xff;}}void Buzzer(){if(Buzzer_Indicate==1)Buzz=!Buzz;else Buzz=1;}void delay(int ms) //延时子程序{uint j,k;for(j=0;j<ms;j++) //延时msfor(k=0;k<124;k++); //大约1毫秒的延时}。

交通灯C实现--AT89S51单片机--红黄绿灯

交通灯C实现--AT89S51单片机--红黄绿灯

交通灯C语言实现单片机:AT89C51#include<reg52.h>#define uchar unsigned char#define ON 1#define OFF 0sbit NSG=P2^5; //南北绿灯sbit NSY=P2^4; //南北黄灯sbit NSR=P2^3; //南北红灯sbit EWG=P2^2; //东西绿灯sbit EWY=P2^1; //东西黄灯sbit EWR=P2^0; //东西红灯sbit LED_D=P3^7; //南北数码管sbit LED_C=P3^6;sbit LED_B=P3^1; //东西数码管sbit LED_A=P3^0;/*===============倒计时=========================*/uchar EWF=15,NSF=12,X=15,Y=27,Z=30,SHU=30;uchar count;void InitialT1(void){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0=1;EA=1;}//中断void ISRT1(void) interrupt 1{TMOD=0x01;TH0=(65536-50000)/256; //重装初值TL0=(65536-50000)%256;EA=1;TR0=1;ET0=1;count++;if(count>19) //定时到了1秒{EWF--;NSF--;X--;Y--;Z--;SHU--;count=0;}}/*=================延时=======================*/void Delay10uS(uchar second){uchar x,y;for(x=second;x>0;x--)for(y=110;y>0;y--);}/*==================led控制========================*/ uchar discode[]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void display1(uchar num1,uchar num2) //东西方向{P0=discode[num1]; LED_A=ON; Delay10uS(1); LED_A=OFF;P0=discode[num2]; LED_B=ON; Delay10uS(1); LED_B=OFF;}void display2(uchar num3,uchar num4) //南北方向{P0=discode[num3]; LED_C=ON; Delay10uS(1); LED_C=OFF;P0=discode[num4]; LED_D=ON; Delay10uS(1); LED_D=OFF;}main(){int i;/*=============初始状态:东西南北都红灯==================*/ NSR=ON; //南北红灯开NSY=OFF;NSG=OFF;EWR=ON; //东西红灯开EWY=OFF;EWG=OFF;for(i=0;i<500;i++) //~=1s{Delay10uS(20);}NSR=OFF; //南北红灯关EWR=OFF; //东西红灯关while(1){InitialT1(); // 初始化计时器/*=============状态1:东西绿灯(12s) 南北红灯(15s)==================*/ /*=============状态2:东西黄灯(3s) 南北红灯(15s)=================*/ EWG=ON; //东西绿灯开NSR=ON; //南北红灯开while(EWF!=0){display2(EWF/10,EWF%10);// 南北红灯(15s)display1(NSF/10,NSF%10);// 东西绿灯(12s)while(EWF==3){while(X!=0){display2(EWF/10,EWF%10);// 南北红灯(3s)display1(X/10,X%10);// 东西黄灯(3s)EWG=OFF; // 东西绿灯关EWY=ON; //东西黄灯开}}}NSR=OFF; //南北红灯关EWG=OFF; //东西绿灯关EWY=OFF; //东西黄灯关/*=============状态3:东西红灯(15s) 南北绿灯(12s)==================*/ /*=============状态4:东西红灯(15s) 南北黄灯(3s)==================*/ EWR=ON; //东西红灯开NSG=ON; //南北绿灯开while(Z!=0){display1(Z/10,Z%10);// 东西红灯(15s)display2(Y/10,Y%10);// 南北绿灯(12s)while(Z==3){while(SHU!=0){display2(Z/10,Z%10);// 东西红灯(3s)display1(SHU/10,SHU%10);// 南北绿灯(3s)NSG=OFF; //南北绿灯关NSY=ON; //南北黄灯开}}}EWR=OFF; //东西红灯关NSG=OFF; //南北绿灯关NSY=OFF; //南北黄灯关/*=====================重新赋值===============================*/EWF=15,NSF=12,X=15,Y=27,Z=30,SHU=30;}}。

基于单片机的交通灯设计c语言程序

基于单片机的交通灯设计c语言程序

基于单片机的交通灯设计c语言程序交通信号灯是城市交通中非常常见的设施之一,起到了引导和控制车辆、行人通行的重要作用。

基于单片机的交通信号灯设计是一个非常典型的实际应用案例,通过编写C语言程序,可以实现对交通信号灯状态的控制和调节。

首先,我们需要了解交通信号灯的基本原理和工作流程。

一般而言,交通信号灯包括红灯、黄灯和绿灯三种状态,分别对应停止、准备和通行的指示。

交通信号灯会按照一定的时间间隔,循环地在这三个状态之间切换,以控制车辆和行人的通行。

在基于单片机的交通信号灯设计中,我们可以借助定时器和IO口来实现状态的切换和指示灯的亮灭。

下面是一个简单的C语言程序示例:```c#include <reg52.h>sbit red = P1^0; //红灯控制引脚sbit yellow = P1^1; //黄灯控制引脚sbit green = P1^2; //绿灯控制引脚void delay(unsigned int xms) //延时函数{unsigned int i, j;for(i=xms; i>0; i--){for(j=110; j>0; j--);}}void main(){while(1){red = 1; //红灯亮yellow = 0; //黄灯灭green = 0; //绿灯灭delay(3000); //延时3秒red = 0; //红灯灭yellow = 1; //黄灯亮green = 0; //绿灯灭delay(2000); //延时2秒red = 0; //红灯灭yellow = 0; //黄灯灭green = 1; //绿灯亮delay(5000); //延时5秒}}```上述程序通过P1口的不同引脚控制红灯、黄灯和绿灯的亮灭。

通过循环的方式,定时器每隔一段时间就切换交通信号灯的状态,从而实现交通信号灯的正常工作。

这只是一个简单的交通信号灯设计示例,实际的交通信号灯设计还可能涉及到更多的状态和控制逻辑。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include "reg51.h"#include "absacc.h"sbit SN_LED_RED=P1^3;sbit SN_LED_GREEN=P1^5;sbit SN_LED_YELLOW=P1^4;sbit EW_LED_RED=P1^0;sbit EW_LED_GREEN=P1^2;sbit EW_LED_YELLOW=P1^1;unsigned char code disptab[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, 0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};unsigned char code bittab[] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; unsigned char num=0; //数码管序号unsigned char led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; char set_value[4] = {60,4,40,4}; //设置数码管在显示值unsigned char sign[4]={1,0,0,0};unsigned char disp_ew,disp_sn;unsigned char falsh_sign,direction_sign,flash_count;unsigned int secnum;unsigned char key;void delay_ms(unsigned int a);void add_process();void sub_process();void set_process();void scan_key();void init();void delay_ms(unsigned int a){unsigned char i;while(a--){i=70;while(i--);}}void add_process(){delay_ms(600);if(!P3^2){delay_ms(500);if(P3^2){if(key == 1){set_value[0] = set_value[0] + 10;if(set_value[0] > 99){set_value[0] = set_value[0] % 10;}disp_ew = set_value[0];}if(key == 2){set_value[1]++;if(set_value[1] > 9){set_value[1] = 0;}disp_ew = set_value[1];}if(key == 3){set_value[2] = set_value[2] + 10;if(set_value[2] > 99){set_value[2] = set_value[2] % 10;}disp_sn = set_value[2];}if(key == 4){set_value[3]++;if(set_value[3] > 9){set_value[3] = 0;}disp_sn = set_value[3];}}while(!P3^2){if(key == 1){set_value[0] = set_value[0] + 10;if(set_value[0] > 99){set_value[0] = set_value[0] % 10;}disp_ew = set_value[0];}if(key == 2){set_value[1]++;if(set_value[1] > 9){set_value[1] = 0;}disp_ew = set_value[1];}if(key == 3){set_value[2] = set_value[2] + 10;if(set_value[2] > 99){set_value[2] = set_value[2] % 10;}disp_sn = set_value[2];}if(key == 4){set_value[3]++;if(set_value[3] > 9){set_value[3] = 0;}disp_sn = set_value[3];}delay_ms(1200);}}else{while(!P3^2);if(key == 1){set_value[0]++;if(set_value[0] > 99){set_value[0] = 0;}disp_ew = set_value[0];}if(key == 2){set_value[1]++;if(set_value[1] > 9){set_value[1] = 0;}disp_ew = set_value[1];}if(key == 3){set_value[2]++;if(set_value[2] > 99){set_value[2] = 0;}disp_sn = set_value[2];}if(key == 4){set_value[3]++;if(set_value[3] > 9){set_value[3] = 0;}disp_sn = set_value[3];}}}void sub_process(){delay_ms(600);if(!P3^3){delay_ms(500);if(P3^3){while(!P3^3);if(key == 1){set_value[0] = set_value[0] - 10;if(set_value[0] < 0){set_value[0] = set_value[0] + 100;}disp_ew = set_value[0];}if(key == 2){set_value[1]--;if(set_value[1] < 0){set_value[1] = 9;}disp_ew = set_value[1];}if(key == 3){set_value[2] = set_value[2] - 10;if(set_value[2] < 0){set_value[2] = set_value[2] + 100;}disp_sn = set_value[2];}if(key == 4){set_value[3]--;if(set_value[3] < 0){set_value[3] = 9;}disp_sn = set_value[3];}}while(!P3^3){if(key == 1){set_value[0] = set_value[0] - 10;if(set_value[0] < 0){set_value[0] = set_value[0] + 100;}disp_ew = set_value[0];}if(key == 2){set_value[1]--;if(set_value[1] < 0){set_value[1] = 9;}disp_ew = set_value[1];}if(key == 3){set_value[2] = set_value[2] - 10;if(set_value[2] < 0){set_value[2] = set_value[2] + 100;}disp_sn = set_value[2];}if(key == 4){set_value[3]--;if(set_value[3] < 0){set_value[3] = 9;}disp_sn = set_value[3];}delay_ms(1200);}}else{while(!P3^3);if(key == 1){set_value[0]--;if(set_value[0] < 0){set_value[0] = 99;}disp_ew = set_value[0];}if(key == 2){set_value[1]--;if(set_value[1] < 0){set_value[1] = 9;}disp_ew = set_value[1];}if(key == 3){set_value[2]--;if(set_value[2] < 0){set_value[2] = 99;}disp_sn = set_value[2];}if(key == 4){set_value[3]--;if(set_value[3] < 0){set_value[3] = 9;}disp_sn = set_value[3];}}}void set_process(){while(!P3^0);ET1 = 0;TR1 = 0;key = key + 1;falsh_sign = 1;if(key > 5){key = 1;}if(key == 1){disp_ew = set_value[0];P1 = 0xfb;direction_sign = 1;}if(key == 2){disp_ew = set_value[1];P1 = 0xfd;direction_sign = 1;}if(key == 3){disp_sn = set_value[2];P1 = 0xdf;direction_sign = 2;}if(key == 4){disp_sn = set_value[3];P1 = 0xef;direction_sign = 2;}if(key == 5){disp_sn = set_value[0] + set_value[1];disp_ew = set_value[0];P1 = 0xf3;falsh_sign = 0;ET1 = 1;TR1 = 1;}}void scan_key(){while(P3^0 && P3^2 && P3^3);delay_ms(15);if(!P3^0){set_process();}if(!P3^2){add_process();}if(!P3^3){sub_process();}elsereturn ;}void disp_t0(void) interrupt 1{TR0 = 0;num++;num=(num%4);P2=0xff;P0=0xff;P2=bittab[num];switch(num){case 0: P0=disptab[disp_sn%10]; break;case 1: P0=disptab[disp_sn/10]; break;case 2: P0=disptab[disp_ew%10]; break;case 3: P0=disptab[disp_ew/10]; break;default: ;}TH0 = 0xD8;TL0 = 0xF0;TR0 = 1;}void disp_count_t1(void) interrupt 3{TH1 = 0x3C;TL1 = 0xB0;secnum++;if(secnum == 20){disp_sn--;disp_ew--;if(disp_ew == 0 && sign[0] ==1){disp_ew = set_value[1];EW_LED_GREEN=1;EW_LED_YELLOW =0;sign[1]=1;sign[0]=0;}if(disp_ew == 0 && sign[1] ==1){disp_ew = set_value[2] + set_value[3];disp_sn = set_value[2];SN_LED_RED =1;EW_LED_YELLOW =1;EW_LED_RED =0;SN_LED_GREEN =0;sign[2] =1;sign[1] =0;}if(disp_sn == 0 && sign[2] == 1 ){disp_sn = set_value[3];SN_LED_GREEN = 1;SN_LED_YELLOW = 0;sign[3] = 1;sign[2] = 0;}if(disp_sn == 0 && sign[3] == 1){disp_sn = set_value[0] + set_value[1];disp_ew = set_value[0];EW_LED_RED = 1;SN_LED_YELLOW = 1;EW_LED_GREEN = 0;SN_LED_RED = 0;sign[0] = 1;sign[3] = 0;}secnum = 0;}}void init(){direction_sign = 0;falsh_sign = 0;flash_count = 0;secnum = 0;key = 0;P0 = 0xff;disp_sn = set_value[0] + set_value[1];disp_ew = set_value[0];EW_LED_GREEN = 0;SN_LED_RED = 0;P3=0xf8;TMOD = 0x11;TH0 = 0xD8;TL0 = 0xF0;TH1 = 0x3C;TL1 = 0xB0;EA = 1;TR0 = 1;ET0 = 1;TR1 = 1;ET1 = 1;}void main(){init();while(1){scan_key();}}。

相关文档
最新文档