帮我写一个51单片机按键控制程序其中包含led灯的亮灭,每按一下按键实现一种流水灯一共3种,和数码管显示0到99和蜂鸣器
时间: 2024-03-26 20:38:02 浏览: 100
好的,以下是一个简单的51单片机按键控制程序,其中包含了LED灯的亮灭,流水灯,数码管显示和蜂鸣器:
```
#include <reg51.h>
sbit LED = P1^0; // LED灯连接在P1.0
sbit KEY = P3^2; // 按键连接在P3.2
sbit BUZZER = P1^1; // 蜂鸣器连接在P1.1
unsigned char code SEGTABLE[] = { // 数码管段码表
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90
};
unsigned char cnt = 0; // 计数器,用于流水灯和数码管显示
void delay(unsigned int ms) { // 延时函数
unsigned int i, j;
for(i = 0; i < ms; i++) {
for(j = 0; j < 114; j++);
}
}
void display(unsigned char num) { // 数码管显示函数
unsigned char shiwei, gewei;
shiwei = num / 10;
gewei = num % 10;
P2 = SEGTABLE[shiwei];
P0 = SEGTABLE[gewei];
}
void main() {
while(1) {
if(KEY == 0) { // 按键按下
delay(10); // 延时去抖动
if(KEY == 0) { // 再次确认按键按下
cnt++; // 计数器加1
if(cnt > 2) cnt = 0; // 计数器循环计数
switch(cnt) {
case 0: // 第一种流水灯
LED = 0;
delay(100);
LED = 1;
break;
case 1: // 第二种流水灯
LED = 0;
delay(100);
LED = 1;
delay(100);
LED = 0;
delay(100);
LED = 1;
break;
case 2: // 第三种流水灯
LED = 0;
delay(100);
LED = 1;
delay(100);
LED = 0;
delay(100);
LED = 1;
delay(100);
LED = 0;
delay(100);
LED = 1;
break;
}
while(KEY == 0); // 等待按键释放
}
}
display(cnt); // 数码管显示计数器值
if(cnt == 0) BUZZER = 0; // 第一种流水灯时启动蜂鸣器
else BUZZER = 1;
}
}
```
这个程序可以实现以下功能:
1. 每按一下按键,LED灯会实现一种流水灯效果,一共有三种流水灯效果。
2. 数码管会显示0到99的计数器值。
3. 当计数器为0时,蜂鸣器会响一声。
注意,这只是一个简单的示例程序,实际应用中可能需要根据具体需求进行修改。
阅读全文
相关推荐


















