51单片机按键控制LED移位
文章目录一、项目概要二、硬件设计三、软件设计四、编译与下载五、小结一、项目概要本项目基于51单片机实现两组独立LED灯通过4个独立按键分别控制上下循环移动功能。按键采用低电平有效触发LED低电平点亮灯珠移动到头后自动循环折返程序使用 _crol_ / _cror_ 循环移位函数来实现。二、硬件设计1. 核心器件- STC89C51/AT89C51 单片机- 红色/绿色LED灯 16个- 220Ω 限流电阻 16个- 独立按键 4个 - 10K 上拉电阻 4个或使用单片机内部上拉- 12MHz 晶振、22pF 电容、10K 复位电阻等最小系统配件2. 电路连接方式1 LED部分低电平点亮- 左侧LEDP0口控制- D9 P0.0、D8 P0.1、D7 P0.2、D6 P0.3 - D5 P0.4、D4 P0.5、D3 P0.6、D2 P0.7- 右侧LEDP2口控制- D10 P2.0、D11 P2.1、D12 P2.2、D13 P2.3 - D14 P2.4、D15 P2.5、D16 P2.6、D17 P2.7- 每个LED串联220Ω限流电阻后接地。2按键部分低电平有效- P1.0左侧LED上移- P1.1左侧LED下移- P1.2右侧LED上移- P1.3右侧LED下移- 按键一端接IO口一端接地IO口内部上拉使能。可参考下图电路连接三、软件设计1. 程序设计思路- 定义两组LED控制端口P0、P2与4个按键引脚P1_0~P1_3。- 使用 _crol_ 循环左移、 _cror_ 循环右移实现灯珠无缝循环移动。- 采用软件消抖按键按下延时确认后再执行移位操作。- 左右两组LED独立控制互不影响上电默认点亮初始位。- 主循环中持续扫描按键状态根据按键触发执行对应上下移动逻辑。2. 完整代码#include reg51.h #include intrins.h #include delayms.h // 按键定义 sbit KEY_L_UP P1^0; // 左灯 上移 sbit KEY_L_DOWN P1^1; // 左灯 下移 sbit KEY_R_UP P1^2; // 右灯 上移 sbit KEY_R_DOWN P1^3; // 右灯 下移 u8 led_left 0xFE; // 左边初始亮 D9(P0.0) u8 led_right 0xFE; // 右边初始亮 D10(P2.0) void main(void) { led_left 0xFE; // 1111 1110 → P0.0 亮 led_right 0xFE; P0 led_left; P2 led_right; while(1) { // 左边灯控制 if(KEY_L_UP 0) // 上移D2 → … → D8 → D9 { delay_ms(10);//消抖 if(KEY_L_UP 0) { led_left _cror_(led_left, 1); // 循环右移 P0 led_left; while(KEY_L_UP 0); // 等待松开 } } if(KEY_L_DOWN 0) // 下移D9 → D8 → … → D2 { delay_ms(10); if(KEY_L_DOWN 0) { led_left _crol_(led_left, 1); // 循环左移 P0 led_left; while(KEY_L_DOWN 0); } } // 右边灯控制 if(KEY_R_UP 0) { delay_ms(10); if(KEY_R_UP 0) { led_right _cror_(led_right, 1); P2 led_right; while(KEY_R_UP 0); } } if(KEY_R_DOWN 0) { delay_ms(10); if(KEY_R_DOWN 0) { led_right _crol_(led_right, 1); P2 led_right; while(KEY_R_DOWN 0); } } } }四、编译与下载1.打开keil5项目工程点击左上角的编译按键进行程序编译编译结果显示0错误0警告就进行下一步的下载操作2.打开proteus仿真工程双击单片机进入配置页面然后选择导入下载文件最后点击OK这样就下载好程序到单片机中了3. 演示效果 上电后左右两组LED各点亮1个初始灯按下对应按键LED分别上下循环移动到达边界后自动折返。五、小结通过本次项目可以掌握51单片机GPIO口控制LED、独立按键检测、软件消抖以及循环移位函数的使用方法。最后我已经把本次实验的完整源码、Proteus仿真文件、工程文件都整理好啦需要的同学直接复制链接到百度网盘自取下载https://pan.baidu.com/s/14PkxNlzXecxIBVc8JZH5Pg?pwdm7yx⚠️ 特别提醒本项目资料仅用于学习与技术交流分享严禁用于任何商业用途或二次开发售卖感谢理解
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2422373.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!