红绿灯C语言程序

合集下载

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语言实训——交通灯程序

C语言实训——交通灯程序
MOV TL1,#0B0H
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语言源程序

交通信号灯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语言
while(j--);
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语言实现交通灯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语言程序

简易交通灯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语言程序交通灯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语言)

单片机-交通灯程序(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语言程序

#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毫秒的延时}。

【免费下载】51单片机用C语言实现交通灯红绿灯源程序

【免费下载】51单片机用C语言实现交通灯红绿灯源程序

对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根通保据过护生管高产线中工敷资艺设料高技试中术卷资,配料不置试仅技卷可术要以是求解指,决机对吊组电顶在气层进设配行备置继进不电行规保空范护载高与中带资负料荷试下卷高问总中题体资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况中卷下,安与要全过加,度强并工看且作护尽下关可都于能可管地以路缩正高小常中故工资障作料高;试中对卷资于连料继接试电管卷保口破护处坏进理范行高围整中,核资或对料者定试对值卷某,弯些审扁异核度常与固高校定中对盒资图位料纸置试,.卷保编工护写况层复进防杂行腐设自跨备动接与处地装理线置,弯高尤曲中其半资要径料避标试免高卷错等调误,试高要方中求案资技,料术编试交写5、卷底重电保。要气护管设设装线备备置敷4高、调动设中电试作技资气高,术料课中并3中试、件资且包卷管中料拒含试路调试绝线验敷试卷动槽方设技作、案技术,管以术来架及避等系免多统不项启必方动要式方高,案中为;资解对料决整试高套卷中启突语动然文过停电程机气中。课高因件中此中资,管料电壁试力薄卷高、电中接气资口设料不备试严进卷等行保问调护题试装,工置合作调理并试利且技用进术管行,线过要敷关求设运电技行力术高保。中护线资装缆料置敷试做设卷到原技准则术确:指灵在导活分。。线对对盒于于处调差,试动当过保不程护同中装电高置压中高回资中路料资交试料叉卷试时技卷,术调应问试采题技用,术金作是属为指隔调发板试电进人机行员一隔,变开需压处要器理在组;事在同前发一掌生线握内槽图部内 纸故,资障强料时电、,回设需路备要须制进同造行时厂外切家部断出电习具源题高高电中中源资资,料料线试试缆卷卷敷试切设验除完报从毕告而,与采要相用进关高行技中检术资查资料和料试检,卷测并主处且要理了保。解护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

红绿灯 程序

红绿灯 程序

红绿灯#include "config.h"#include "stdlib.h"#include "uart.h"#define TaskStkLengh 64 // 定义用户任务的堆栈长度const uint32 LED = (63 << 16); //将P1.16-P1.21分别作为东西向的绿黄红灯和南北向的绿黄红灯输出口,高电平点亮const uint32 LEDCLR = (63<<16); //将六路灯熄灭const uint32 LEDOUT1 = (33 << 16); //0 -30s各灯的状态const uint32 LEDOUT2 = (17 << 16); //30-32s各灯的状态const uint32 LEDOUT3 = (12 << 16); //32-62s各灯的状态const uint32 LEDOUT4 = (10 << 16); //62-64s各灯的状态INT8U err;OS_STK Task0Stk [TaskStkLengh]; //任务0,负责发送信号量集OS_STK Task1Stk [TaskStkLengh]; //Task1 的堆栈OS_STK Task2Stk [TaskStkLengh];OS_STK Task3Stk [TaskStkLengh];OS_STK Task4Stk [TaskStkLengh];OS_FLAG_GRP *Sem_F;void Task0(void *pdata); //Task0 任务0void Task1(void *pdata); //Task1void Task2(void *pdata); //Task2void Task3(void *pdata); //Task3void Task4(void *pdata); //Task4int main (void){OSInit ();TargetInit ();Sem_F=OSFlagCreate((OS_FLAGS)0,&err); //创建信号量集OSTaskCreate (Task0,(void *)0, &Task0Stk[TaskStkLengh - 1], 3);OSTaskCreate (Task1,(void *)0, &Task1Stk[TaskStkLengh - 1], 4);OSTaskCreate (Task2,(void *)0, &Task2Stk[TaskStkLengh - 1], 5);OSTaskCreate (Task3,(void *)0, &Task3Stk[TaskStkLengh - 1], 6);OSTaskCreate (Task4,(void *)0, &Task4Stk[TaskStkLengh - 1], 7);OSStart ();return 0;}void Task0 (void *pdata) {pdata = pdata;PINSEL2 = PINSEL2 & (~0x08);// P1[25:16]连接GPIO IO1DIR = LED;while (1){OSFlagPost(Sem_F,(OS_FLAGS)1,OS_FLAG_SET,&err);OSFlagPost(Sem_F,(OS_FLAGS)2,OS_FLAG_CLR,&err);OSFlagPost(Sem_F,(OS_FLAGS)4,OS_FLAG_CLR,&err);OSFlagPost(Sem_F,(OS_FLAGS)8,OS_FLAG_CLR,&err);OSTimeDlyHMSM(0,0,3,0);//OSTimeDly(300);OSFlagPost(Sem_F,(OS_FLAGS)1,OS_FLAG_CLR,&err);OSFlagPost(Sem_F,(OS_FLAGS)2,OS_FLAG_SET,&err);OSFlagPost(Sem_F,(OS_FLAGS)4,OS_FLAG_CLR,&err);OSFlagPost(Sem_F,(OS_FLAGS)8,OS_FLAG_CLR,&err);OSTimeDlyHMSM(0,0,0.2,0);//OSTimeDly(20);OSFlagPost(Sem_F,(OS_FLAGS)1,OS_FLAG_CLR,&err);OSFlagPost(Sem_F,(OS_FLAGS)2,OS_FLAG_CLR,&err);OSFlagPost(Sem_F,(OS_FLAGS)4,OS_FLAG_SET,&err);OSFlagPost(Sem_F,(OS_FLAGS)8,OS_FLAG_CLR,&err);OSTimeDlyHMSM(0,0,3,0);//OSTimeDly(300);OSFlagPost(Sem_F,(OS_FLAGS)1,OS_FLAG_CLR,&err);OSFlagPost(Sem_F,(OS_FLAGS)2,OS_FLAG_CLR,&err);OSFlagPost(Sem_F,(OS_FLAGS)4,OS_FLAG_CLR,&err);OSFlagPost(Sem_F,(OS_FLAGS)8,OS_FLAG_SET,&err);OSTimeDlyHMSM(0,0,0.2,0);//OSTimeDly(20);}}void Task1 (void *pdata){pdata=pdata;while(1){OSFlagPend(Sem_F,(OS_FLAGS)1,OS_FLAG_WAIT_SET_ALL,0,&err);IO1CLR = LEDCLR;IO1SET = LEDOUT1; // 0-30s各灯状态OSTimeDlyHMSM(0,1,4,0);//OSTimeDly(640);}}void Task2 (void *pdata){pdata=pdata;while(1){OSFlagPend(Sem_F,(OS_FLAGS)2,OS_FLAG_WAIT_SET_ALL,0,&err);IO1CLR = LEDCLR;IO1SET = LEDOUT2;OSTimeDlyHMSM(0,1,4,0);//OSTimeDly(640);}}void Task3 (void *pdata){pdata=pdata;while(1){OSFlagPend(Sem_F,(OS_FLAGS)4,OS_FLAG_WAIT_SET_ALL,0,&err);IO1CLR = LEDCLR;IO1SET = LEDOUT3;OSTimeDlyHMSM(0,1,4,0);//OSTimeDly(640);}}void Task4 (void *pdata){pdata=pdata;while(1){OSFlagPend(Sem_F,(OS_FLAGS)8,OS_FLAG_WAIT_SET_ALL,0,&err);IO1CLR = LEDCLR;IO1SET = LEDOUT4;OSTimeDlyHMSM(0,1,4,0);//OSTimeDly(640);}}。

用C++编辑一个交通转盘红绿灯运行程序

用C++编辑一个交通转盘红绿灯运行程序

cpp#include <iostream>#include <thread> // 用于暂停程序执行#include <chrono> // 用于时间控制using namespace std;enum LightState { RED, GREEN };// 红绿灯类class TrafficLight {private:LightState state;public:TrafficLight() : state(RED) {} // 默认构造函数,初始状态为红灯void changeState() {// 改变红绿灯状态state = (state == RED) ? GREEN : RED;}void showState() const {// 显示当前红绿灯状态if (state == RED) {cout << "红灯" << endl;} else {cout << "绿灯" << endl;}}};int main() {TrafficLight light; // 创建一个红绿灯对象const int redDuration = 5; // 红灯持续时间,单位为秒const int greenDuration = 3; // 绿灯持续时间,单位为秒while (true) { // 无限循环,模拟红绿灯不断变化light.showState(); // 显示当前状态if (light.state == RED) {// 如果当前是红灯,则等待红灯持续时间后切换状态this_thread::sleep_for(chrono::seconds(redDuration));} else {// 如果当前是绿灯,则等待绿灯持续时间后切换状态this_thread::sleep_for(chrono::seconds(greenDuration));}light.changeState(); // 改变红绿灯状态}return 0;}在这个程序中,`TrafficLight` 类代表交通灯,具有两个状态:红灯和绿灯。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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清零
}
}。

相关文档
最新文档