找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 367|回复: 3
收起左侧

帮帮忙大神,写一个能用的按键控制流水灯程序

[复制链接]
ID:1132174 发表于 2024-9-19 10:53 | 显示全部楼层 |阅读模式
写一个能用的程序
IMG_20240919_091542.jpg
回复

使用道具 举报

ID:725654 发表于 2024-9-19 13:36 | 显示全部楼层
这。。。。不是有手就行吗
回复

使用道具 举报

ID:1121801 发表于 2024-9-19 14:07 | 显示全部楼层
proteus的例程很多的,上网搜一下就可以,有可能用的不一样的输入输出口,但一般proteus例程都会带图,直接就可以用
回复

使用道具 举报

ID:404160 发表于 2024-9-19 14:53 | 显示全部楼层
LED连接在P0口,按键连接在P3.4到P3.7。以下是一个按键控制流水灯的程序示例,
您可以根据实际的IO口配置进行调整。

```c
#include <reg51.h>

#define LED P0 // LED连接在P0口
#define KEY_PORT P3 // 按键连接在P3.4到P3.7

unsigned char scan_key() {
    unsigned char key_value = 0xFF;
    KEY_PORT = 0xF0; // 设置P3.4到P3.7为高电平
    _nop_(); // 延时,确保稳定
    key_value = KEY_PORT; // 读取按键状态
    KEY_PORT = 0xFF; // 恢复P3.4到P3.7为高电平
    return key_value;
}

void delay(unsigned int ms) {
    unsigned int i, j;
    for (i = ms; i > 0; i--)
        for (j = 110; j > 0; j--);
}

void main() {
    unsigned char pattern = 0x01; // 初始LED模式
    LED = 0xFF; // 初始LED全部关闭
    while (1) {
        unsigned char key = scan_key();
        if (key != 0xFF) { // 如果有按键被按下
            delay(20); // 消抖
            key = scan_key(); // 再次读取按键状态
            if (key != 0xFF) { // 确认按键确实被按下
                pattern = pattern << 1; // 左移LED模式
                if (pattern == 0x00) pattern = 0x01; // 如果所有LED都亮过了,重新开始
                LED = ~pattern; // 更新LED状态
                while (key != 0xFF); // 等待按键释放
            }
        }
    }
}
```

### 程序说明:
1. **定义LED和按键**:LED连接在P0口,按键连接在P3.4到P3.7。
2. **按键扫描函数**:`scan_key`函数用于扫描按键状态。
3. **延迟函数**:用于按键消抖和LED闪烁的延迟。
4. **主函数**:
   - 初始化LED全部关闭。
   - 循环检测按键状态,如果按键被按下,则左移LED模式。
   - 使用位操作来控制LED的亮灭。
   - 等待按键释放,避免重复触发。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表