关于#单片机#的问题:所有方波频率为10Hz

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;
    }
}
}