蓝桥杯单片机(五)独立按键基本操作及扩展应用

server/2025/1/19 17:53:06/

模块训练

注意:当要用到LED(4)、蜂鸣器以及继电器(5)、数码管(位置选择6,段码选择7),则需要用到138译码器选择通道代码。

1.基本操作

2.独立按键的扩展应用

一、独立按键电路图

二、电路分析

对P30~P33接口进行检测,当按键按下时即为低电平

注意:先用sbit对端口进行重命名,在赋值使用时即可更清晰明了

三、程序代码

1.独立按键的基本操作

#include<regx52.h>sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;sbit L1=P0^0;
sbit L2=P0^1;
sbit L3=P0^2;
sbit L4=P0^3;
sbit L5=P0^4;
sbit L6=P0^5;
sbit L7=P0^6;
sbit L8=P0^7;void SelaectHC573(unsigned char n)
{switch(n){case 4:P2=(P2&0X1F)|0X80;break;case 5:P2=(P2&0X1F)|0Xa0;break;case 6:P2=(P2&0X1F)|0Xc0;break;case 7:P2=(P2&0X1F)|0Xe0;break;}
}
void DelayK(unsigned char t)//因为用来消抖所以参数小可以用char型参数
{while(t--);
}
void ScanKeys_Alone()
{if(S7==0){DelayK(100);//用来对按键进行消抖处理if(S7==0)//若是过了一会按键依然按下则说明时有效信号进行下一步{L1=0;while(S7==0);  //若按键一直按下,则led灯一直亮着L1=1;}}if(S6==0){DelayK(100);if(S6==0){L2=0;while(S6==0);L2=1;}}if(S5==0){DelayK(100);if(S5==0){L3=0;while(S5==0);L3=1;}}if(S4==0){DelayK(100);if(S4==0){L4=0;while(S4==0);L4=1;}}
}
void main()
{SelaectHC573(4);while(1){ScanKeys_Alone();}
}

2.独立按键的扩展应用

自己写的代码

#include<regx52.h>sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;sbit L1=P0^0;
sbit L2=P0^1;
sbit L3=P0^2;
sbit L4=P0^3;
sbit L5=P0^4;
sbit L6=P0^5;
sbit L7=P0^6;
sbit L8=P0^7;void SelaectHC573(unsigned char n)
{switch(n){case 4:P2=(P2&0X1F)|0X80;break;case 5:P2=(P2&0X1F)|0Xa0;break;case 6:P2=(P2&0X1F)|0Xc0;break;case 7:P2=(P2&0X1F)|0Xe0;break;}
}
void DelayK(unsigned char t)
{while(t--);
}void ScanKeys_Alone()
{if(L2==1){if(S7==0)//S7控制第一组{DelayK(100);if(S7==0){L1=0;}}if(L1==0) //第一组控制键{if(S5==0){DelayK(100);if(S5==0){L3=0;while(S5==0);L3=1;}}if(S4==0){DelayK(100);if(S4==0){L4=0;while(S4==0);L4=1;}}}if(S7==0)//若S7再按下{DelayK(100);if(S7==0){L1=1;}}}if(L1==1)//S6控制另一组{if(S6==0){DelayK(100);if(S6==0){L2=0;}}if(L2==0) //第二组控制键{if(S5==0){DelayK(100);if(S5==0){L5=0;while(S5==0);L5=1;}}if(S4==0){DelayK(100);if(S4==0){L6=0;while(S4==0);L6=1;}}if(S6==0){DelayK(100);if(S6==0){L2=1;}}}}}void main()
{SelaectHC573(4);while(1){ScanKeys_Alone();}
}

3.独立按键扩展应用的改进代码

注意:用状态机实现对代码的改进

#include<regx52.h>sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;sbit L1=P0^0;
sbit L2=P0^1;
sbit L3=P0^2;
sbit L4=P0^3;
sbit L5=P0^4;
sbit L6=P0^5;
sbit L7=P0^6;
sbit L8=P0^7;unsigned char stat_k=0;//状态机的使用
void SelaectHC573(unsigned char n)
{switch(n){case 4:P2=(P2&0X1F)|0X80;break;case 5:P2=(P2&0X1F)|0Xa0;break;case 6:P2=(P2&0X1F)|0Xc0;break;case 7:P2=(P2&0X1F)|0Xe0;break;}
}
void DelayK(unsigned char t)//因为用来消抖所以参数小可以用char型参数
{while(t--);
}
void ScanKeys_Alone()
{if(S7==0){DelayK(100);if(S7==0){if(stat_k==0)//首先判断状态{L1=0;stat_k=1;}else if(stat_k==1){L1=1;stat_k=0;//释放状态}while(S7==0);}}if(S6==0){DelayK(100);if(S6==0){if(stat_k==0){L2=0;stat_k=2;}else if(stat_k==2){L2=1;stat_k=0;}while(S6==0);}}if(S5==0){DelayK(100);if(S5==0){if(stat_k==1){L3=0;while(S5==0);L3=1;}else if(stat_k==2){L5=0;while(S5==0);L5=1;}}}if(S4==0){DelayK(100);if(S4==0){if(stat_k==1){L4=0;while(S4==0);L4=1;}else if(stat_k==2){L6=0;while(S4==0);L6=1;}}}
}
void main()
{SelaectHC573(4);while(1){ScanKeys_Alone();}
}

四、运行结果   


http://www.ppmy.cn/server/159671.html

相关文章

Hadoop开发过程中15个常见问题的详细解决方案

目录 1. 配置文件路径错误2. YARN资源配置不足3. DataNode无法启动4. NameNode格式化失败5. HDFS副本分布不均6. MapReduce作业运行失败7. 节点磁盘空间耗尽8. 集群性能下降9. 日志文件过大10. 网络延迟导致任务失败11. HDFS数据目录损坏12. 任务卡在调度阶段13. MapReduce输出…

QModbusTCPClient占用内存持续增长

最近使用QModbusTCPClient通信&#xff0c;需要频繁发送读写请求&#xff0c;发现软件占用内存一直在增减&#xff0c;经过不断咨询和尝试&#xff0c;终于解决了。 1.方案一&#xff08;失败&#xff09; 最开始以为是访问太频繁&#xff0c;导致创建reply的对象比delete re…

MySQL无限极分类表设计:实战项目中的高效解决方案

在许多实战项目中&#xff0c;如电商系统、内容管理系统等&#xff0c;我们常常需要处理具有层级关系的数据&#xff0c;例如商品分类、文章栏目等。这些数据通常呈现出无限极分类的特点&#xff0c;即一个分类下可以有多个子分类&#xff0c;子分类下又可以有更深层次的子分类…

MySQL的安装与使用详细指南

MySQL的安装与使用详细指南 一、引言 MySQL作为开源数据库领域的佼佼者&#xff0c;在各类应用开发中发挥着关键作用。本文将详细介绍MySQL在Windows系统下的安装与基本使用方法&#xff0c;帮助开发者快速搭建并运用MySQL数据库。 二、MySQL的安装 &#xff08;一&#xff…

C语言变长嵌套数组常量初始化定义技巧

有时候&#xff0c;我们需要在代码里配置一些常量结构&#xff0c;比如一个固定的动作流程ActionFlow&#xff1a;包含N&#xff08;即flow_num&#xff09;个动作列表&#xff08;ActionArray&#xff09;&#xff0c;每个动作列表包含M&#xff08;即act_num&#xff09;个可…

第八章、python的类及其应用(8.1.1-8.2.1.2)------类的常见概念、类的构造器概述、空间化构造方法__new__()

目录 8.1 python类的常见概念 8.1.1面向过程与面向对象编程 8.1.2类、类地址、类实例对象地址、封装、继承、多态的概念 8.2 python类的构成详解及其性质 8.2.1类中的构造方法 8.2.1.1类的构造器概述 8.2.1.2空间化构造方法__new__() 第八章 python的类及其应用 本章主要讲述类…

无降智o1 pro——一次特别的ChatGPT专业模式探索

这段时间和朋友们交流 ChatGPT 的使用心得&#xff0c;大家都提到一个很“神秘”的服务&#xff1a;它基于 O1 Pro 模型&#xff0c;能够在对话里一直保持相对高水平的理解和回复&#xff0c;不会突然变得“降智”。同时&#xff0c;整体使用还做了免折腾的网络设置——简单一点…

Linux《Linux简介与环境的搭建》

在学习了C或者是C语言的基础知识之后就可以开始Linux的学习了&#xff0c;现在Linux无论是在服务器领域还是在桌面领域都被广泛的使用&#xff0c;所以Linxu也是我们学习编程的重要环节&#xff0c;在此接下来我们将会花大量的时间在Linxu的学习上。在学习Linux初期你可以会像初…