利用按键代替雾气可见度
led闪烁速度代表雾灯闪烁速度
#include "reg52.h" //定义一些寄存器的头文件
typedef unsigned int u16; //重定义无符号整型变量为u16;即用u16代替无符号整形
typedef unsigned char u8; //重定义无符号字符型变量为u8;即用u8代替无符号字符型
sbit redled=P2^0; //定义红色led管脚
sbit yellowled=P2^1; //定义黄色led管脚
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3; //定义四个按键的管脚
u16 m; //用来存放数据变量作为标识符,通过循环的次数决定闪烁的速度
/*
*延时函数
*/
void delay(u16 i)
{
while(i--);
}
/*
*函数名称:按键检测函数
*函数作用:检测按键是否按下,并对每个按键按下之后需要做的事进行定义
*/
void keypros()
{
if(k1==0)
{
delay(1000);
if(k1==0)
m=0; //k1按下m=0;即没有雾气状态,led全灭
while(!k1);
}
if(k2==0)
{
delay(1000);
if(k2==0)
m=50; //k2按下m=50;即可见度50米,快速闪烁
while(!k2);
}
if(k3==0)
{
delay(1000);
if(k3==0)
m=100; //k3按下m=100;即可见度100米,中速闪烁
while(!k3);
}
if(k4==0)
{
delay(1000);
if(k4==0)
m=250; //k4按下m=100;即可见度150米,慢速闪烁
while(!k4);
}
}
void main()
{ u16 i=0,a=0; //标识符用来标记循环次数与m进行比较
while(1)
{a++;
if(a==100) //每次循环对a进行加1,当a=100时 i=1;即每循环100次a=1;
{ a=0;
i++;
}
keypros(); //调用按键函数
if(m!=0) //m不为0时比较循环次数和m的值
{
if(i<m)
{ redled=0;
yellowled=1;
}
if((i<(2*m))&&(i>=m))
{redled=1;
yellowled=0;
}
if(i>(2*m))
i=0;
}
else //m=0的情况下led全灭
{ redled=1;
yellowled=1;
}
}
}