单片机C语言交通信号灯控制程序

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

交通信号灯控制(源程序)

#include /* 头文件*/

int sum=0; /* 定义计数器*/

keyscan(); /* 键盘扫描函数*/

void delay50ms(unsigned int i); /* 延时函数*/

xhd( ); /* 信号灯函数xhd( ) */

/* ------------------------- 主函数----------------------------*/

main( ) /* 主函数*/

{

keyscan(); /* 键盘扫描*/

TMOD=0x01; /* 设定T0为模式1 */

EA=1; /* 总允许中断*/

ET0=1; /* 允许定时器T0中断*/ /*----状态0---*/

P1=0x6f; /* P1初始值,所有路口亮红灯*/

delay50ms(20); /* 延时1s*/

xhd( ); /* 调用信号灯函数*/

}

/* ---------------------- 键盘扫描函数------------------------- */ keyscan()

{

int j=0;

while (j==0)

{

while (P2_0==0); /*等待启动按键闭合*/ delay50ms(1);

if (P2_0==0) /*确认启动按键闭合*/

j=1;

}

}

/* ----------------------- -延时函数----------------------------*/ void delay50ms(unsigned int i) /* 延时50ms*i*/

{

TR0=1;

while ( i!=0)

{ /*启动T0定时器*/

TH0=-(50000/256); /* 定时器赋初始值*/ TL0=-(50000%256);

while(TF0!=1); /*等待T0溢出*/

TF0=0; /* 溢出标志位清0*/ i--; /* 循环-1 */

}

TR0=0; /*关闭T0定时器*/

}

/* ---------------------- 信号灯函数------------------------ */

xhd( ) /* 信号灯函数*/

{

while(1) /* 无限循环*/

{

/* ----状态1----*/

P1_2=0; P1_3=0; /* 南北绿灯亮,东西红灯亮*/ delay50ms(100); /*延时5s*/

/* ----状态2----*/

while(sum<3) /*南北绿灯闪3次*/

{

P1_2=0; /*亮0.5s*/

delay50ms(10);

P1_2=1; /*暗0.5s*/

delay50ms(10);

sum++;

}

sum=0; /*计数器清零*/

P1_2=1; P1_1=0; /* 南北绿灯熄灭,黄灯亮*/ delay50ms(60); /*延时3s*/

/*----状态3----*/

P1_1=1; P1_0=0; /* 南北黄灯熄灭,红灯亮*/ P1_3=1; P1_5=0; /* 东西红灯熄灭,绿灯亮*/ delay50ms(100); /*延时5s*/

/* ----状态4----*/

while(sum<3) /*东西绿灯闪3次*/

{

P1_5=0; /*亮0.5s*/

delay50ms(10);

P1_5=1; /*暗0.5s*/

delay50ms(10);

sum++;

}

sum=0; /*计数器清零*/

P1_5=1; P1_4=0; /* 东西绿灯熄灭,黄灯亮*/

delay50ms(60);

/* ----状态1做准备----*/

P1_4=1; P1_0=1; /* 东西黄灯熄灭,南北红灯熄灭*/

}

}

程序编译通过,如图:

相关文档
最新文档