【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.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; 序列數據是按照特定順…