编写c51单片机"通过设置状态机实现单一按钮控制多种模式,每次按下按钮,状态机切换到下一个模式,同时在每个模式中,通过循环移位来实现流水灯效果"的C程序
时间: 2024-05-26 16:10:07 浏览: 79
一个使用C51单片机实现流水灯的简单示例+C语言
感谢您的问题,这是一个关于c51单片机编写的技术问题。以下是该问题的C程序:
#include<reg51.h>
// 定义IO口
sbit LED1=P1^0;
sbit BTN=P3^3;
// 声明函数
void delay(unsigned int);
// 状态机
unsigned char state=0;
void main()
{
while(1)
{
// 检测按键按下
if(BTN==0)
{
delay(10); // 延时
if(BTN==0)
{
state++; // 状态加1
if(state>3)
state=0; // 状态最大为3,循环
}
while(!BTN); // 等待按键弹起
}
// 判断状态
switch(state)
{
case 0:
LED1=1;
break;
case 1:
LED1=0xfe;
delay(50);
LED1=0xfc;
delay(50);
LED1=0xf8;
delay(50);
LED1=0xf0;
delay(50);
LED1=0xe0;
delay(50);
LED1=0xc0;
delay(50);
LED1=0x80;
delay(50);
LED1=0x00;
delay(50);
break;
case 2:
LED1=0x55;
delay(500);
LED1=0xaa;
delay(500);
break;
case 3:
LED1=0xf0;
delay(500);
LED1=0x0f;
delay(500);
break;
}
}
}
// 延时函数
void delay(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<125;j++);
}
希望能帮到您!
阅读全文