目录

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.pswp.cn/web/95168.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95168.shtml
英文地址,请注明出处:http://en.pswp.cn/web/95168.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

829作业

用fgets&#xff0c;fputswanc代码#include<myhead.h> int main(int argc, const char *argv[]) {FILE *fp1 NULL;FILE *fp2 NULL;if (argc ! 3){printf("输入不合法:./a.out lydf.txt l.txt\n");return -1;}if ((fp1fopen(argv[1],"w"))NULL){pri…

CRMEB小程序订阅消息配置完整教程(PHP版)附常见错误解决

登录小程序后台 1.进入微信公众平台、小程序后台&#xff1a;功能->订阅消息。&#xff08;如未开通&#xff0c;点击申请即可开通&#xff09; 选择服务类目 2.选择服务类目&#xff1a;生活服务/百货/超市/便利店 同步小程序订阅消息 3.商城后台设置->消息管理 点击…

【已解决】阿里云服务器上前端访问不到后端

最开始我觉得后端根本没跑起来&#xff0c;但是我没用过阿里云的服务器&#xff0c;对pm2指令也完全不熟&#xff0c;不确定后端是不是在哪个我不知道的地方跑着。 还以为在阿里云控制台点运行&#xff0c;服务就会自己跑起来&#xff0c;但远程连接之后发现搞着搞着&#xff0…

分治算法详解:从递归思想到经典应用实战

分治算法是计算机科学中最重要的算法设计策略之一&#xff0c;它将复杂问题分解为规模更小的同类子问题&#xff0c;通过递归求解子问题并合并结果来解决原问题。本文将深入探讨分治算法的核心思想、设计模式以及经典应用案例。 文章目录一、分治算法核心思想1.1 分治策略的三个…

GitHub 热榜项目 - 日榜(2025-08-31)

GitHub 热榜项目 - 日榜(2025-08-31) 生成于&#xff1a;2025-08-31 统计摘要 共发现热门项目&#xff1a;15 个 榜单类型&#xff1a;日榜 本期热点趋势总结 本期GitHub热榜凸显三大技术热点&#xff1a;1) AI基础设施爆发式增长&#xff0c;微软MCP协议和Activepieces的A…

OpenCL C 平台与设备

1. 核心概念在 OpenCL C API 中&#xff1a;平台 (Platform)&#xff1a;代表一个 OpenCL 实现&#xff0c;通常对应硬件厂商&#xff08;NVIDIA、AMD、Intel等&#xff09;设备 (Device)&#xff1a;具体的计算硬件单元&#xff08;GPU、CPU、加速器等&#xff09;上下文 (Con…

R语言贝叶斯方法在生态环境领域中的高阶技术应用

贝叶斯统计已经被广泛应用到物理学、生态学、心理学、计算机、哲学等各个学术领域&#xff0c;其火爆程度已经跨越了学术圈。一&#xff1a; 1.1复杂数据回归&#xff08;混合效应&#xff09;模型的选择策略 1&#xff09;科学研究中数据及其复杂性 2&#xff09;回归分析历史…

学习笔记:MySQL(day1)

DDL&#xff08;Data Definition Language&#xff0c;数据定义语言&#xff09;是 SQL 语言的一部分&#xff0c;用于定义和管理数据库中的数据结构&#xff0c;包括创建、修改、删除数据库对象&#xff08;如数据库、表、视图、索引等&#xff09;。常见的 DDL 语句及其功能&…

C++ 模板初阶:从函数重载到泛型编程的优雅过渡

&#x1f525;个人主页&#xff1a;爱和冰阔乐 &#x1f4da;专栏传送门&#xff1a;《数据结构与算法》 、C &#x1f436;学习方向&#xff1a;C方向学习爱好者 ⭐人生格言&#xff1a;得知坦然 &#xff0c;失之淡然 文章目录前言一、引言&#xff1a;函数重载的痛点与模板…

从零开始的python学习——语句

ʕ • ᴥ • ʔ づ♡ど &#x1f389; 欢迎点赞支持&#x1f389; 个人主页&#xff1a;励志不掉头发的内向程序员&#xff1b; 专栏主页&#xff1a;python学习专栏&#xff1b; 文章目录 前言 一、顺序语句 二、条件语句 2.1、什么是条件语句 2.2、语法格式 2.3、缩进和代码…

Python基础之元组列表集合字典

目录一、元组&#xff08;Turple&#xff09;1.1、概念定义注意事项1.2、常见操作元组只支持查询操作&#xff0c;不支持增删改操作。查询元素二、列表1.1、概念定义注意事项1.2、常见操作添加修改查找删除排序列表推导式列表嵌套三、集合1.1、概念定义集合的特点1.2、常见操作…

Ubuntu 22.04 安装 向日葵远程Client端

通过向日葵主页的下载deb包有可能遇到安装失败的情况 #因向向日葵提供的libwebkit包是4.0-37了,而向日葵依赖的是3.0.0(Reading database ... 303666 files and directories currently installed.) Preparing to unpack SunloginClient-10.1.1.38139_amd64.deb.1 ... sunloginc…

Linux中卸载和安装Nginx

阿里云宝塔linux为例一&#xff1a;卸载1.停止 Nginx 服务# 检查Nginx运行状态 systemctl status nginx# 停止Nginx服务 sudo systemctl stop nginx# 禁用开机自启 sudo systemctl disable nginx2. 卸载 Nginx 软件包# 查看已安装的Nginx包 yum list installed | grep nginx# 卸…

C++知识汇总(5)

目录 1.写在前面 1.C11的发展历史 2.序列表初始化 3&#xff0c;C11中的std::initializer_list 4.左值和右值 1.左值引用和右值引用 2.生命周期的延长 3.左值和右值的参数匹配 4&#xff0c;移动构造和移动赋值 5.引用折叠 6.完美转发 总结 1.可变模板参数 2.包扩展…

LeetCode 每日一题 2025/8/25-2025/8/31

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录8/25 498. 对角线遍历8/26 3000. 对角线最长的矩形的面积8/27 3459. 最长 V 形对角线段的长度8/28 3446. 按对角线进行矩阵排序8/29 3021. Alice 和 Bob 玩鲜花游戏8/30 36.…

大模型训练全方位架构分析

文章目录前言一&#xff1a;数据工程二&#xff1a;计算硬件与集群三&#xff1a;训练并行策略四&#xff1a;模型架构五&#xff1a;优化与训练动力学六&#xff1a;内存管理七&#xff1a;训练流程与工具链八&#xff1a;成本与效率九&#xff1a;伦理、安全与对齐十&#xf…

人工智能加速漏洞利用,15分钟即可完成概念验证?

一个由人工智能驱动的攻击研究系统已经创建了十多个漏洞利用程序&#xff0c;在许多情况下将开发时间缩短到不到 15 分钟&#xff0c;凸显了全面自动化对企业防御者的影响。 该系统由两位以色列网络安全研究人员创建&#xff0c;利用大型语言模型 (LLM) 的提示、通用漏洞与暴露…

Go语言入门(13)-map

map是Go提供的另外一种集合&#xff0c;他可以&#xff1a;①将key映射到value;②快速通过key找到对应的value;同时&#xff0c;它的key几乎可以是任何类型。声明map&#xff0c;必须指定key和value的类型&#xff1a;下面来看一个简单的例程&#xff0c;在该例程中&#xff0c…

基于51单片机的配电室远程监控系统设计环境检测GSM环境报警设计

基于51单片机的配电室远程监控系统设计与环境检测GSM报警系统 1. 系统功能介绍 本设计是一种基于 STC89C51/STC89C52 单片机 的智能配电室环境监控与报警系统。该系统将温湿度检测、水位检测、烟雾检测、入侵检测与风扇、水泵控制相结合&#xff0c;同时配合 SIM900 GSM 模块 实…

从RNN到Transformer

从RNN到Transformer 目录 基础篇&#xff1a;序列模型概述RNN循环神经网络LSTM长短期记忆网络Transformer架构时间序列预测应用计算机视觉应用大语言模型应用实战与优化前沿发展 基础篇&#xff1a;序列模型概述 {#基础篇} 什么是序列数据&#xff1f; 序列数据是按照特定顺…