红绿灯C语言程序
C语言红绿灯课程设计

C语言红绿灯课程设计一、课程目标知识目标:1. 让学生理解并掌握C语言中条件语句的使用,特别是if-else结构;2. 使学生能够运用循环语句(如for循环)编写程序;3. 帮助学生掌握C语言中函数的定义和调用方法;4. 让学生了解并使用C语言中的常用库函数进行程序设计。
技能目标:1. 培养学生运用C语言解决实际问题的能力,如模拟红绿灯控制系统;2. 培养学生分析问题、设计算法、编写程序、调试程序的能力;3. 提高学生团队协作和沟通能力,通过小组讨论和分享,优化程序设计。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习积极性,树立自信心;2. 培养学生勇于尝试、不断实践的精神,养成遇到问题积极解决的良好习惯;3. 引导学生认识到编程在生活中的应用,体会科技对生活的改变,培养社会责任感。
课程性质:本课程为实践性较强的课程,结合实际生活中的红绿灯控制系统,使学生将所学知识应用于实际项目中。
学生特点:学生具备一定的C语言基础,对编程有一定了解,但实践经验不足。
教学要求:结合学生特点,采用案例教学、任务驱动等方法,引导学生通过实践掌握C语言编程技能。
教学过程中注重培养学生的问题分析能力、团队协作能力和创新能力。
通过课程学习,使学生达到预期的学习成果。
二、教学内容1. C语言基础知识回顾:变量、数据类型、运算符、表达式。
2. 条件语句:if-else结构,switch-case结构,条件表达式的使用。
3. 循环语句:for循环,while循环,do-while循环,循环控制语句(break,continue)。
4. 函数:函数的定义,函数的调用,局部变量和全局变量,递归函数。
5. 常用库函数:stdio.h中的输入输出函数,stdlib.h中的系统调用函数。
6. 红绿灯控制系统设计:分析红绿灯工作原理,设计程序流程图,编写程序代码。
7. 程序调试与优化:学习使用调试工具,分析程序运行过程中的错误,优化程序性能。
C语言实训——交通灯程序

DJNZ R3,LP1
RET
END
C语言编程如下:
#include <REG51.H>
unsigned char t0,t1;//定义全局变量,用来保存延时时间循环次数
//函数名:delay0_5s1
//函数功能:用T1的方式1编制0.5秒延时程序,假定系统采用12MHz晶振,定
22pF
2
电阻
300
12
发光二极管
12
跟我做3——制作电路板
采用万能板焊接电路元器件,制作电路板。
跟我做4——编写交通灯控制程序
程序设计的思路为:由主程序负责向P1口发送交通灯显示数据,
用寄存器R2存放调用0.5s延时子程序的次数,只要修改调用次数就可获得不同的延时时间。延时子程序采用定时器T1,工作方式1实现50ms定时,用寄存器R3存放循环次数,循环10次便可获得0.5s的延时。主程序流程图如图1.8.3所示。
DJNZ R2,YEL1
MOV P1,#0KEH
MOV R2,#32H
DISP2: ACALL DELAY_500MS
DJNZ R2,DISP2
MOV R2,#06H
WARN2: CPL P1.0
ACALL DELAY_500MS
DJNZ R2,WARN2
MOV P1,#0DDH
MOV R2,#04H
i=P1;//保护现场,暂存P1口、t0、t1、TH1、TH0
j=t0;
k=t1;
l=TH1;
m=TH0;
EA=1;//开中断
P1=0xf3;// A道放行
delay_t1(10);//延时5秒
EA=0;//关中断
交通信号灯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语言实现交通灯_红绿灯_源程序

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语言

GPIO_DIG = 0x00; //消隐
}
}
/*******************************************************************************
*函数名: Timer0Cofig
*函数功能:配置定时器
*输入:无
*输出:无
*******************************************************************************/
void Timer0Cofig(void)
{
TMOD = 0x01; //定时器0选择工作方式1
TH0 = 0x3C;//设置初始值,定时50MS
*函数名: main
*函数功能:主函数
*输入:无
*输出:无
*******************************************************************************/
void main(void)
{
Second = 1;
Timer0Cofig();
Time++;
if(Time == 20)
{
Second ++;
Time = 0;
unsigned char DisplayData[8];
//用来存放要显示的8位数的值
unsigned char Time, Second;//用来存放定时时间
//--声明全局函数--//
void DigDisplay(); //动态显示函数
void Timer0Cofig(void);
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; //接下来是转黄,绿。
简易交通灯c语言程序
uchar duanma[10]={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //段码unchar weima [4]={0x01,0x02,0x04,0x08}; //位码unchar nanbei [3]={40,35,4}; //南北方向三组倒记时对应红,绿,黄灯unchar dongxi [3]={35,4,40}; //东西方向三组倒计时对应绿,黄,红灯unchar nbdeng [3]={0x01,0x04,0x02}; //南北方向三组灯的状态红绿黄unchar dxdeng [3]={0x8x,0x40,0x20} //东西方向三组灯的状态绿黄红unchar jishu1,jishu2,dxjishu,nbjishu,dxmiao,nbmiao,nbmiao; //定义变量unchar xianshi [4]={0,0,0,0}; //显示缓存器void yanshi10ms (void) //延时10ms函数{Unchar i,j;for (i=20;i>0;i--)for (j=250;j.0;j--);}Void chushihua (void) //初始化函数{TMOD=0x01; //定时器T0方式1THO=(65536-10000)/256 //10ms 定时高八位初值TLO=(65536-10000)%256; //10ms 定时低八位初值EA=1;ETO=1;EXO=1;ITO=1TRO=1;//CPU,T0,INTO允许中断,外部中断下降沿触发,启动定时器}void main(void) //主函数{dxmiao=dongxi [0] //东西倒计时赋初值nbmiao=nanbei [0] //南北倒计时赋初值chushihua (); //调试初始化函数while (1); //无限循环,踏步}Void anjian (void) interrupt 0 //外部中断 INTO 中断服务函数{yanshi10ms (); //延时去抖动if (INTO==0); //二次判断{If ((dxmiao<=50) && (nbmiao<=50)); //东西,南北当前显示值不大于50 {dxmiao+=10; //东西显示值+10nbmiao+=10 //南北显示着+10}//******************************************************************* }}void daojishi (void) interrupt 1 //定时器T0中断服务函数{THO=(65536-10000)/256; //高八位初值重装TLO=(65536-10000)/256; //低八位初值重装xiaoshi[0]=duanma [nbmiao/10]; //分离南北方向秒的十位xiaoshi[1]=duanma [nbmiao%10]; //分离南北方向秒的个位xiaoshi[2]=duanma [nbmiao/10]; //分离东西方向秒的十位xiaoshi[3]=duanma [nbmiao/10]; //分离东西方向秒的个位//**********************动态扫描*********************************** jishu1 ++; //指向扫描的下一位if (jishu1==4) jishu1=0; //完成四位扫描后计数归0P0=weima [jishu1]; //送位码P1=xiaoshi [jishu1]; //送段码//********************控制灯的状态********************************* P2=dxdeng [dxjishu] | nbdeng [nbjishu]; //送灯的状态码//东西方向状态和南北方向状态组合输出//********************产生1秒记时及处理程序*********************** jishu2++; //10ms 计数if (jishu2==100) //计够100次为1秒{jishu2=0; //计够1秒后,计数归0dxmiao --; nbmiao --; //东西,南北秒各减1,实现倒计时if (dxmiao==0xff) //东西方向是否减到0{dxjishu ++ ; //是,指东西方向交通灯的下一个状态if (dxjishu==3) dxjishu==0; //完成三个状态后再重新开始dxmiao=dongxi [dxjishu]; //送东西方向数码显示的初值}if (nanbei==0xff) //南北方向是否减到0}nbjishu++; //是,指向南北方向交通灯的下一个状态if (nbjishu==3) nbjishu=0; //完成三个状态后再重新开始nbmiao==nanbei[nbjishu]; //送南北方向数码显示的初值 }}}。
交通灯C语言程序交通灯C语言程序,AT89S52单片机控制,倒计时,红黄绿灯
交通灯//==================================//====交通灯C语言程序//====作者:2009的竹蜻蜓//====时间:2009-4-26//====E-MAIL:guangxian616@//==================================#include<reg52.h>#define uchar unsigned char#define time 50000#define ON 0#define OFF 1sbit NSB=P1^5; //南北绿灯sbit NSY=P1^4; //南北黄灯sbit NSR=P1^3; //南北红灯sbit EWB=P1^2; //东西绿灯sbit EWY=P1^1; //东西黄灯sbit EWR=P1^0; //东西红灯sbit P27=P2^7;sbit P26=P2^6;sbit P23=P2^3;sbit P22=P2^2;/*===============倒计时=========================*/ uchar N=15,Y=12,Z=15,M=27,G=30,U=30;uchar C50ms;uchar seg=1;void InitialT1(void){ET1=0;TMOD=0x10;TH1=(65536-time)>>8;TL1=(65536-time)&0xff;TR1=1;ET1=1;EA=1;}void ISRT1(void) interrupt 3{TR1=0;TH1=(65536-time)>>8;TL1=(65536-time)&0xff;TR1=1;C50ms++;if(C50ms>19){N--;M--;Y--;Z--;G--;U--;C50ms=0;}}/*=================延时=======================*/void Delay10uS(uchar second){int i;while((second--)!=0){for(i=0;i<3;i++){;}}}/*==================led控制========================*/uchar discode[10]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void display1(uchar num1,uchar num2){P0=discode[num1]; P22=ON; Delay10uS(1); P22=OFF; //控制南led显示P0=discode[num2]; P23=ON; Delay10uS(1); P23=OFF;}void display2(uchar num3,uchar num4){P0=discode[num3]; P26=ON; Delay10uS(1); P26=OFF; //控制东西led显示P0=discode[num4]; P27=ON; Delay10uS(1); P27=OFF;}main(){int i;// P0=0xff;/*=============初始状态:东西南北都红灯==================*/ NSR=ON;EWR=ON;for(i=0;i<800;i++){Delay10uS(20);}NSR=OFF;EWR=OFF;while(1){InitialT1(); // 初始化计时器/*=============状态1:东西绿灯(12s) 南北红灯(15s)==================*/ /*=============状态2:东西黄灯(3s) 南北红灯(15s)=================*/ EWB=ON;NSR=ON;while(N!=0){display1(N/10,N%10);// 南北红灯(15s)display2(Y/10,Y%10);// 东西绿灯(12s)while(N==3){while(Z!=0){display1(N/10,N%10);// 南北红灯(3s)display2(Z/10,Z%10);// 东西黄灯(3s)EWB=OFF;EWY=ON;}}}NSR=OFF;EWB=OFF;EWY=OFF;P0=0xff; //全关掉//Delay10uS(1);/*=============状态3:东西红灯(15s) 南北绿灯(12s)==================*/ /*=============状态4:东西红灯(15s) 南北黄灯(3s)==================*/ EWR=ON;NSB=ON;while(G!=0){display2(G/10,G%10);// 东西红灯(12s)display1(M/10,M%10);// 南北绿灯(12s)while(G==3){while(U!=0){display2(G/10,G%10);// 东西红灯(3s)display1(U/10,U%10);// 南北绿灯(3s)NSB=OFF;NSY=ON;}}}EWR=OFF;NSB=OFF;NSY=OFF;//P0=0xFF;//Delay10uS(1);/*=====================重新赋值===============================*/N=15,Y=12,Z=15,M=27,G=30,U=30;}}//欢迎访问我的百度空间:2009的竹蜻蜓更多精彩等着你!。
单片机-交通灯程序(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程序
算法描述: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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
红绿灯C语言程序(P0口接数码管,平口接发光二极管)
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar 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工作在方式1
TH0=-5000/256;//50ms
TL0=-5000%256;//20ms
IE=0x82;///允许定时器0中断
TR0=1;///启动定时器0
while(1){
//0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
if(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;//50ms
TL0=-50000%256;
if(c==10)m_flag=0;
c++;if(c==20)//50ms*20=1s
{m_flag=1;
c=0;
s++;//s清零
}
}。