当前位置: 首页 > ds >正文

【Proteus仿真】按键控制系列仿真——LED灯表示按键状态/按键控制LED灯/4*4矩阵键盘控制LED

目录

1案例视频效果展示

1.1例子1:LED灯表示按键状态(两种方式)

1.2例子2:按键控制两排LED小灯闪烁移位

1.3例子3:按键控制LED灯逐个点亮/分组点亮/全部熄灭

1.4例子4:4*4矩阵按键实现带状LED灯控制

2例子1:LED灯表示按键状态(两种方式)

2.1电路原理图

2.1.1电路组成及接线

2.2控制程序

2.2.1控制程序步骤

2.2.2源代码

3例子2:按键控制两排LED小灯闪烁移位

3.1电路原理图

3.1.1电路组成及接线

3.2控制程序

3.2.1控制程序步骤

3.2.2源代码

4例子3:按键控制LED灯逐个点亮/分组点亮/全部熄灭

4.1电路原理图

4.1.1电路组成及接线

4.2控制程序

4.2.1控制程序步骤

4.2.2源代码

5例子4:4*4矩阵按键实现带状LED灯控制

5.1电路原理图

5.1.1电路组成及接线

5.2控制程序

5.2.1控制程序步骤

5.2.2源代码

 7 硬件工程师笔试面试相关文章链接(部分链接)


摘要:本文介绍了基于AT89C51单片机的4种LED控制案例:1)按键状态显示(即时/触发两种模式);2)两排LED灯移位控制(上下左右四个方向);3)LED分组控制(逐个点亮、上下半区控制、全灭);4)4×4矩阵按键控制LED灯带(按键值决定亮灯数量)。所有案例均采用I/O口电平检测控制LED电路,包含完整的电路原理图(含晶振、复位、按键和LED模块)和C语言源代码实现,通过延时函数、位操作和键盘扫描等技术实现交互控制功能。

1案例视频效果展示

1.1例子1:LED灯表示按键状态(两种方式)

例子6:LED灯表示按键状态(两种方式)

1.2例子2:按键控制两排LED小灯闪烁移位

例子7:按键控制两排LED小灯闪烁移位

1.3例子3:按键控制LED灯逐个点亮/分组点亮/全部熄灭

例子8:按键控制LED灯逐个点亮/分组点亮/全部熄灭

1.4例子4:4*4矩阵按键实现带状LED灯控制

例子9:4*4矩阵按键实现带状LED灯控制

2例子1:LED灯表示按键状态(两种方式)

实现功能:K1、K2按下时LED点亮,松开时熄灭, K3、K4按下并释放时LED点亮,再次按下并释放时熄灭。

本质:单片机的某些I/O 口输入高/低电平作为判断条件控制其他I/O 口输出高/低电平,去驱动一个LED。

2.1电路原理图

2.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P0.0-P0.3—>连接共阳极LED小灯电路

P1.4-P1.7—>连接按键电路

复位电路

晶振电路

按键电路

共阳极LED小灯电路

2.2控制程序

2.2.1控制程序步骤

库文件与引脚定义

延时函数

主程序(按键状态作为输入(判断条件),LED状态作为输出)

2.2.2源代码

//功能:K1、K2按下时LED点亮,松开时熄灭, K3、K4按下并释放时LED点亮,再次按下并释放时熄灭;#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED1=P0^0;sbit LED2=P0^1;sbit LED3=P0^2;sbit LED4=P0^3;sbit K1=P1^4;sbit K2=P1^5;sbit K3=P1^6;sbit K4=P1^7;//延时void DelayMS(uint x){uchar i;while(x--) for(i=0;i<120;i++);}      //主程序void main(){P0=0xff;P1=0xff;while(1){LED1=K1;LED2=K2;if(K3==0){while(K3==0);LED3=~LED3;}if(K4==0){while(K4==0);LED4=~LED4;}DelayMS(10);}}

3例子2:按键控制两排LED小灯闪烁移位

实现功能:按下K1时,P0口LED上移一位;按下K2时,P0口LED下移一位;按下K3时,P2口LED上移一位;按下K4时,P2口LED下移一位;

本质:单片机的某些I/O 口输入高/低电平作为判断条件控制其他I/O 口输出高/低电平,去驱动一个LED。

3.1电路原理图

3.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P0.0-P0.7—>连接共阳极左侧LED小灯电路

P2.0-P2.7—>连接共阳极右侧LED小灯电路

P1.4-P1.7—>连接按键电路

复位电路

晶振电路

按键电路

共阳极LED小灯电路

3.2控制程序

3.2.1控制程序步骤

库文件

延时函数

按键控制LED灯闪烁移动函数

主程序

3.2.2源代码

//功能:按下K1时,P0口LED上移一位;按下K2时,P0口LED下移一位;按下K3时,P2口LED上移一位;按下K4时,P2口LED下移一位;#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--) for(i=0;i<120;i++);}      //根据P1口的按键移动LEDvoid Move_LED(){if     ((P1&0x10)==0) P0=_cror_(P0,1);  //K1else if((P1&0x20)==0) P0=_crol_(P0,1);  //K2else if((P1&0x40)==0) P2=_cror_(P2,1);  //K3else if((P1&0x80)==0) P2=_crol_(P2,1);  //K4}//主程序void main(){uchar Recent_Key;  //最近按键P0=0xfe;P2=0xfe;P1=0xff;Recent_Key=0xff;while(1){if(Recent_Key!=P1){Recent_Key=P1;        //保存最近按键Move_LED();DelayMS(10);}}}

4例子3:按键控制LED灯逐个点亮/分组点亮/全部熄灭

实现功能:每次按下K1时递增点亮一只LED,全亮时再次按下则再次循环开始,K2按下后点亮上面4只LED,K3按下后点亮下面4只LED,K4按下后关闭所有LED

本质:单片机的某些I/O 口输入高/低电平作为判断条件控制其他I/O 口输出高/低电平,去驱动一个LED。

4.1电路原理图

4.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P0.0-P0.7—>连接共阳极LED小灯电路

P1.4-P1.7—>连接按键电路

复位电路

晶振电路

按键电路

共阳极LED小灯电路

4.2控制程序

4.2.1控制程序步骤

库文件

延时函数

主程序(获取按键状态——>switch case函数选择执行命令)

4.2.2源代码

//功能:每次按下K1时递增点亮一只LED,全亮时再次按下则再次循环开始,K2按下后点亮上面4只LED,K3按下后点亮下面4只LED,K4按下后关闭所有LED#include<reg51.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--) for(i=0;i<120;i++);}      //主程序void main(){uchar k,t,Key_State;P0=0xff;P1=0xff;while(1){t=P1;if(t!=0xff){DelayMS(10);if(t!=P1) continue;//取得4位按键值,由模式XXXX1111(X中有一位为0,其他均为1)//变为模式0000XXXX(X中有一位为1,其他均为0)Key_State=~t>>4;k=0;//检查1所在位置,累加获取按键号kwhile(Key_State!=0){k++;Key_State>>=1;}//根据按键号k进行4种处理switch(k){case 1:     if(P0==0x00) P0=0xff;P0<<=1;DelayMS(200);break;case 2:     P0=0xf0;break;case 3:     P0=0x0f;break;case 4:     P0=0xff;}}}}

5例子4:4*4矩阵按键实现带状LED灯控制

实现功能:亮起和按键上数字相同数量的LED

本质:单片机的某些I/O 口输入高/低电平作为判断条件控制其他I/O 口输出高/低电平,去驱动一个LED。

5.1电路原理图

5.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P2.0-P0.7/ P2.0-P0.7—>连接共阳极LED灯带电路

P1.0-P1.7—>连接4*4矩阵按键电路

复位电路

晶振电路

4*4矩阵按键电路

共阳极LED灯带电路

5.2控制程序

5.2.1控制程序步骤

库文件

和按键数字一一对应的16进制数字

延时函数

键盘扫描函数

主函数(按键数字和LED灯亮起相同数量)

5.2.2源代码

//功能:运行本例时,按下的按键值越大点亮的LED越多。#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//矩阵键盘按键特征码表uchar code KeyCodeTable[]={0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88};//延时void DelayMS(uint x){uchar i;while(x--) for(i=0;i<120;i++);}      //键盘扫描uchar Keys_Scan(){uchar sCode,kCode,i,k;//低4位置0,放入4行P1=0xf0;//若高4位出现0,则有键按下if((P1&0xf0)!=0xf0){DelayMS(2);if((P1&0xf0)!=0xf0){      sCode=0xfe;                     //行扫描码初值for(k=0;k<4;k++)     //对4行分别进行扫描{P1=sCode;if((P1&0xf0)!=0xf0){kCode=~P1;for(i=0;i<16;i++)      //查表得到按键序号并返回if(kCode==KeyCodeTable[i])   return(i);}elsesCode=_crol_(sCode,1);}} }return(-1);}//主程序void main(){uchar i,P2_LED,P3_LED;uchar KeyNo=-1;              //按键序号,-1表示无按键while(1){KeyNo=Keys_Scan();        //扫描键盘获取按键序号KeyNoif(KeyNo!=-1){P2_LED=0xff;P3_LED=0xff;for(i=0;i<=KeyNo;i++)      //键值越大,点亮的LED越多{if(i<8)P3_LED>>=1;elseP2_LED>>=1;}P3=P3_LED;            //点亮条形LEDP2=P2_LED;}}}

 7 硬件工程师笔试面试相关文章链接(部分链接)

更多文章可前往主页观看

1、硬件工程师笔面试真题汇总(2025版本)_硬件工程师面试题-CSDN博客https://blog.csdn.net/XU157303764/article/details/140742900?spm=1011.2415.3001.5331硬件工程师笔试面试高频考点汇总——(2025版)_电容或者电感对锁存器的影响-CSDN博客https://blog.csdn.net/XU157303764/article/details/1488349782、硬件工程师笔试面试汇总(2025版本)_硬件工程师面试题-CSDN博客https://blog.csdn.net/XU157303764/article/details/1419048583、硬件工程师笔试面试学习汇总——器件篇目录(2025版本)_【【硬件工程师炼成之路】器件篇(更新中。。。)-CSDN博客https://blog.csdn.net/XU157303764/article/details/142316204

硬件工程师笔记——电子器件汇总大全-CSDN博客https://blog.csdn.net/XU157303764/article/details/147342935?spm=1011.2415.3001.5331Multisim14使用教程详尽版--(2025最新版)-CSDN博客https://blog.csdn.net/XU157303764/article/details/147197406?spm=1011.2415.3001.5331

http://www.xdnf.cn/news/19617.html

相关文章:

  • 部署在windows的docker中的dify知识库存储位置
  • NMOS概述
  • python---类.函数名(self) 和 self.函数名()的调用方式
  • 数据结构 二叉树
  • RocketMQ5.0+保姆级单点Docker部署教程
  • 暴力破解基础知识(一)
  • 深入解析 Oracle 并发与锁机制:高并发环境下的数据一致性之道
  • 【数论】P10558 [ICPC 2024 Xi‘an I] XOR Game|普及+
  • 深度学习导论:从理论起源到前沿应用与挑战
  • Halcon学习--(1)常用算子
  • 大模型RAG项目实战:向量数据库Faiss
  • 蓓韵安禧活性叶酸源于上市企业生产
  • 手写MyBatis第44弹:解密MyBatis四大核心组件拦截之道
  • 【influxdb】InfluxDB 2.x 线性写入详解
  • 【IDE问题篇】新电脑安装Keil5,出现找不到arm 编译器版本5编译报错;改为版本6后旧代码编译是出现编译报错
  • 自然语言处理NLP:嵌入层Embedding中input_dim的计算——Tokenizer文本分词和编码
  • android中常见布局及其约束
  • 超越关键词:RAG系统如何破解用户查询的“模糊密码”
  • Redis 中的 Bitmap 与 Bitfield 及 Java 操作实践
  • 【LeetCode】18、四数之和
  • LeetCode 每日一题 2025/8/25-2025/8/31
  • SciPy
  • DrissionPage 实战:动态 IP 代理与百度翻译 API 数据抓取
  • 硬件开发_基于物联网的工厂环境监测系统
  • Qt Demo之 deepseek 帮我写的关于双目标定的小界面
  • redis----zset详解
  • Langflow Memory 技术深度分析
  • Langflow RAG 技术深度分析
  • 人工智能学习:机器学习相关面试题(二)
  • MySQL-视图与用户管理