P1.4引脚连接了一个按键,编写程序实现:上电后,P2.5直接输出占空比为30%的方波,按一下按键(按下后松开),P2.5输出占空比为60%的方波,再按一下按键,P2.5输出占空比为90%的方波,再按一下,P2.5输出返回到占空比为30%的方波,如此循环。
所有方波频率为10Hz,程序怎样设计?
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit KEY = P1^4; //定义按键
uchar state = 0; //定义状态变量
void delay(uint t) //延时函数
{
while (t--);
}
void main()
{
while(1)
{
switch(state)
{
case 0: //状态0,占空比30%
P2 = 0x20;
delay(3);
P2 = 0x00;
delay(7);
if (KEY == 0) //如果按键按下
{
delay(10); //延时去抖
state = 1; //改变状态
}
break;
scss
Copy code
case 1: //状态1,占空比60%
P2 = 0x20;
delay(6);
P2 = 0x00;
delay(4);
if (KEY == 0) //如果按键按下
{
delay(10); //延时去抖
state = 2; //改变状态
}
break;
case 2: //状态2,占空比90%
P2 = 0x20;
delay(9);
P2 = 0x00;
delay(1);
if (KEY == 0) //如果按键按下
{
delay(10); //延时去抖
state = 0; //改变状态
}
break;
default: //默认状态
state = 0; //回到状态0
break;
}
}
}