51单片机红绿灯程序
链接: https://pan.baidu.com/s/1CP8Ml9NcX6GDWWc2M1_Jhg 提取码: uvkd
#include<reg51.h>
#include<intrins.h>//_crol_(P1,1) 左移函数,_croc_(P1,1) 右移函数 在这库中。
#define uchar unsigned char //定义uchar 为无符号字符,对应的十位数为最大值为255
#define uint unsigned int //定义uint 为无符号整型,16位系统中十位数最大为65535
sbit dong_yellow = P1^0; //定义东方黄LED开亮
sbit dong_green = P1^1; //定义东方绿LED开亮
sbit dong_red = P1^2; //定义东方红LED开亮
sbit nai_yellow = P1^3; //定义南方黄LED开亮
sbit nai_green = P1^4; //定义南方绿LED开亮
sbit nai_red = P1^5; //定义南方红LED开亮
sbit xi_yellow = P2^0; //定义西方黄LED开亮
sbit xi_green = P2^1; //定义西方绿LED开亮
sbit xi_red = P2^2; //定义西方红LED开亮
sbit bei_yellow = P2^3;//定义北方黄LED开亮
sbit bei_green = P2^4;//定义北方绿LED开亮
sbit bei_red = P2^5;//定义北方红LED开亮
uchar xuan_ze = 1;
uchar ci_shu =0;
void delay(uint ms)// 延时函数
{
uint i, j; //定义变量i ,j .
for(i=0; i<ms;i++)
for(j=0; j<110; j++);//j每次加1,等j>110时,跳出此for
}
void loudeng()//东南西北交替函数
{
switch(xuan_ze)
{
case 1://东西向绿灯,南北向红灯
dong_green=0;//东方绿灯亮,P1.1口为低电平
xi_green=0;//西方绿灯亮,P2.1口为低电平
nai_red=0;//南方红灯亮,P1.5口为低电平
bei_red=0;//北方红灯亮,P2.5口为低电平
delay(2000);
xuan_ze=2;//选择第二项
break;
case 2://东西向黄灯闪烁,绿灯关闭
delay(500); //延时500MS
dong_green=1; //息灭东边绿灯P1.1为高电平
xi_green=1; //息灭西边绿灯P2.1为高电平
dong_yellow=!dong_yellow;//东边黄灯P1.0电平取反,如是高电平,就变成低电平。
xi_yellow=!xi_yellow;//西边黄灯P2.0电平取反
if(++ci_shu!=10)//息灭与点亮各5次。
return;
xuan_ze=3;//选择第3项
P1=0XFF;//P1所有LED灯息灭
P2=0XFF;//P2所有LED灯息灭
ci_shu=0;//一定要把次数归零。
break;
case 3://南北向绿灯,东西向红灯
nai_green=0;//南方绿灯亮,P1.4口为低电平
bei_green=0;//北方绿灯亮,P2.4口为低电平
dong_red=0;//东方红灯亮,P1.2口为低电平
xi_red=0;//西方红灯亮,P2.2口为低电平
delay(2000);
xuan_ze=4;
break;
case 4://南北向黄灯闪烁,绿灯关闭
delay(500); //延时500MS
nai_green=1; //息灭南边绿灯P1.1为高电平
bei_green=1; //息灭北边绿灯P2.1为高电平
nai_yellow=!nai_yellow;//南边黄灯P1.0电平取反,如是高电平,就变成低电平。
bei_yellow=!bei_yellow;//北边黄灯P2.0电平取反
if(++ci_shu!=10)//息灭与点亮各5次。
return;
xuan_ze=1;//选择第1项
P1=0XFF;//P1所有LED灯息灭
P2=0XFF;//P2所有LED灯息灭
ci_shu=0;//一定要把次数归零。
break;
}
}
void main()
{
P1=0xFF; // 高电平灭灯,0XFF十六进制,对应的二进制为1111 1111
P2=0xFF; // 高电平灭灯,0XFF十六进制,对应的二进制为1111 1111
while(1)
{
loudeng();
}
}








最新发布