【蓝桥杯-单片机】基础模块LED和按键

文章目录

  • 【蓝桥杯-单片机】Led、按键等基础模块
    • 01 前置准备
      • (1)新建工程
      • (4)编写程序
    • 02 基础模块:LED
      • (0)LED原理图
      • (1)对P1整体赋值,控制所有的LED灯
      • (2)对P1中的的8个IO口单独复制,控制单个LED灯
      • (3)控制LED灯闪烁
        • 实现原理
        • 延时函数
          • 延时函数的生成
          • 自定义延时函数
      • (4)LED流水灯
        • 方法一:通过给P1口赋不同的值从而达到流水灯的效果
        • 方法二:通过内置函数库实现流水灯效果
    • 03 基础模块:按键(KEY)
      • (1)用KEYX控制LEDX的亮灭
        • 按键消抖
      • (2)用按键控制流水灯的运行速度

【蓝桥杯-单片机】Led、按键等基础模块

01 前置准备

(1)新建工程

  • 每个不同的工程项目对应一个不同的文件夹
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 芯片选择AT89C52
    在这里插入图片描述

  • 点开品字工具栏,修改相关信息
    在这里插入图片描述

  • 点开魔术棒,勾选生成HEX文件
    在这里插入图片描述

(4)编写程序

  • 右键点击User栏添加用户主程序(main.c)
    在这里插入图片描述
  • 右键引用51头文件
    在这里插入图片描述
  • 编写程序主体框架
  • 按照原理图编写程序
  • 烧录程序
    在这里插入图片描述
    原理图:
    在这里插入图片描述

02 基础模块:LED

(0)LED原理图

在这里插入图片描述
在这里插入图片描述

(1)对P1整体赋值,控制所有的LED灯

#include <REGX52.H>void main()
{while(1){P1 = 0x5F;//0101 1111}
}

在这里插入图片描述

(2)对P1中的的8个IO口单独复制,控制单个LED灯

#include <REGX52.H>void main()
{while(1){//P1 = 0x5F;//0101 1111P1_2 = 0;//点亮第3个灯}
}

在这里插入图片描述

(3)控制LED灯闪烁

实现原理

通过不断给P1端口赋高低电平,实现LED灯的开与关,从而达到闪烁的目的

延时函数

在单片机代码中,每次执行一条代码是很快的,也就几微秒左右,那有时候我们想让某一条代码执行后等待一阵子,再去执行下一条,这时候就需要用到延时函数

延时函数的生成
  • 打开STC-ISP烧录工具
  • 打开软件延时计算器
  • 系统频率选择12MHz,定时长度选择500毫秒,指令集选择STC-Y1
  • 生成C代码,粘贴至工程文件中,并删除nop语句
    在这里插入图片描述
自定义延时函数

在这里插入图片描述
延时1ms的代码

void Delay1ms()		//@12.000MHz
{unsigned char i, j;i = 2;j = 239;do{while (--j);} while (--i);
}

自定义的延时函数:

//自定义延时函数
void Delay(unsigned int x)		//@12.000MHz
{unsigned char i, j;while(x--){i = 2;j = 239;do{while(--j);}while(--i);}
}

例如:x传入的值为1000,则这个延时函数实现了延时1s的功能。

(4)LED流水灯

方法一:通过给P1口赋不同的值从而达到流水灯的效果
方法二:通过内置函数库实现流水灯效果
  • crol:循环左移
  • cror:循环右移
  • 所属库:intrins.h

以下代码通过定义变量time实现了让流水灯越流越快的功能:

void main()
{while(1){P1 = Led;Led = _crol_(Led,1);Time = Time - 100;Delay(Time);		}
}

03 基础模块:按键(KEY)

(1)用KEYX控制LEDX的亮灭

按键消抖
Key_Val = Key_Read();//读取键码值
Key_Down = Key_Val & (Key_Val ^ Key_Old);//检测下降沿
Key_Up = ~Key_Val & (Key_Val ^ Key_Old);//检测上升沿
Key_Old = Key_Val;//扫描辅助变量
//按键读取函数
unsigned char Key_Read()
{unsigned char temp = 0;if(P3_4 == 0) temp = 1;if(P3_5 == 0) temp = 2;if(P3_6 == 0) temp = 3;if(P3_7 == 0) temp = 4;return temp;
}
//变量声明区域
unsigned char Led = 0xfe;//LED数据变量
unsigned int Time = 1000;
unsigned char Key_Val,Key_Down,Key_Up,Key_Old;//按键扫描变量void main()
{while(1){Key_Val = Key_Read();//读取键码值Key_Down = Key_Val & (Key_Val ^ Key_Old);//检测下降沿Key_Up = ~Key_Val & (Key_Val ^ Key_Old);//检测上升沿Key_Old = Key_Val;//扫描辅助变量switch(Key_Down){case 1:P1_0 = 0;//按键1控制第1个Led亮break;case 2:P1_1 = 0;//按键2控制第2个Led亮break;case 3:P1_0 = 1;//按键3控制第1个Led灭break;case 4:P1_1 = 1;//按键4控制第2个Led灭break;}}
}

(2)用按键控制流水灯的运行速度

//按键读取函数
unsigned char Key_Read()
{unsigned char temp = 0;if(P3_4 == 0) temp = 1;if(P3_5 == 0) temp = 2;if(P3_6 == 0) temp = 3;if(P3_7 == 0) temp = 4;return temp;
}
//变量声明区域
unsigned char Led = 0xfe;//LED数据变量
unsigned int Time = 1000;
unsigned char Key_Val,Key_Down,Key_Up,Key_Old;//按键扫描变量
bit Flag = 0;void main()
{while(1){Key_Val = Key_Read();//读取键码值Key_Down = Key_Val & (Key_Val ^ Key_Old);//检测下降沿Key_Up = ~Key_Val & (Key_Val ^ Key_Old);//检测上升沿Key_Old = Key_Val;//扫描辅助变量P1 = Led;if(Flag == 1){Delay(Time);Led = _crol_(Led,1);}switch(Key_Down){case 1:Flag = 1;//流水灯运行break;case 2:Flag = 0;//流水灯暂停break;case 3:Time = Time -100;//加速break;case 4:Time = Time + 100;//减速break;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/272420.html

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

相关文章

three.js如何实现简易3D机房?(一)基础准备-下

接上一篇&#xff1a; three.js如何实现简易3D机房&#xff1f;&#xff08;一&#xff09;基础准备-上&#xff1a;http://t.csdnimg.cn/MCrFZ 目录 四、按需引入 五、导入模型 四、按需引入 index.vue文件中 <template><div class"three-area">&l…

算法第二十五天-寻找排序数组中的最小值

寻找排序数组中的最小值 题目要求 解题思路 二分法 代码 class Solution:def findMin(self, nums: List[int]) -> int:low, high 0, len(nums) - 1while low < high:pivot low (high - low) // 2if nums[pivot] < nums[high]:high pivot else:low pivot 1re…

计算两帧雷达数据之间的变换矩阵

文章目录 package.xmlCMakeLists.txtpoint_cloud_registration.cc运行结果 package.xml <?xml version"1.0"?> <package format"2"><name>point_cloud_registration</name><version>0.0.0</version><descriptio…

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的按键扫描、数码管显示按键值、显示按键LED应用

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的按键扫描、数码管显示按键值、显示按键LED应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍TM1638键盘…

Spring Boot中实现图片上传功能的两种策略

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

js 清空数组的方法

1、直接赋值空数组 let array [1, 2, 3, 4, 5]; array []; 这种方法并不推荐&#xff0c;如下图所示&#xff1a; 虽然a数组确实变为了空数组&#xff0c;但这种方法只是修改了a的指向&#xff0c;把a指向一个新的空数组&#xff0c;然而[1,2,3,4,5]这个数组并没有被清除&a…

Matlab偏微分方程拟合 | 完整源码 | 视频教程

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《复杂函数拟合案例分享》本专栏旨在提供 1.以案例的形式讲解各类复杂函数拟合的程序实现方法&#xff0c;并提供所有案例完整源码&#xff1b;2.…

Python——与Matlab对应的Python版本

参考资料&#xff1a; Python——与Matlab对应的Python版本

基于java+springboot+vue实现的学生信息管理系统(文末源码+Lw+ppt)23-54

摘 要 人类现已进入21世纪&#xff0c;科技日新月异&#xff0c;经济、信息等方面都取得了长足的进步&#xff0c;特别是信息网络技术的飞速发展&#xff0c;对政治、经济、军事、文化等方面都产生了很大的影响。 利用计算机网络的便利&#xff0c;开发一套基于java的大学生…

第十篇 - 如何利用人工智能技术做好营销流量整形管理?(Traffic Shaping)- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市​​​​​​​。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先…

【蓝桥杯】蓝桥杯算法复习(一)

&#x1f600;大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#x1f62b;&#xff0c;但是也想日更的人✈。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4…

UnityShader——09数学知识3

方阵 行与列数量相等的矩阵,n*n阶矩阵 对角矩阵 当对角线以外的矩阵内元素全为0&#xff0c;则称之为对角矩阵&#xff0c;对角矩阵的前提是必须是方阵 单位矩阵 对角线元素全为1&#xff0c;其余元素全为0&#xff0c;属于对角矩阵的一部分 矩阵和向量 把1 * n阶矩阵称…

PySide6+VSCode Python可视化环境搭建

pip install pyside6 下载本期源码 vscode装一个PYQT Integration插件&#xff0c;设置好两个路径&#xff08;下面有个脚本用于获取路径&#xff09; 用everything的童鞋注意了&#xff1a;工具/选项/索引/强制重建 重启vscode可以看到&#xff0c;右击.ui文件时出现可以操作…

【C/C++】常量指针与指针常量的深入解析与区分(什么是const int * 与 int * const ?)

目录 一、前言 二、const 的简单介绍 三、常量指针 &#x1f50d;介绍与分析 &#x1f4f0;小结与记忆口诀 四、指针常量 &#x1f50d;介绍与分析 &#x1f4f0;小结与记忆口诀 五、总结与提炼 六、共勉 一、前言 在【C/C】的编程中&#xff0c;指针与const关键字的组合…

vulhub中Weblogic < 10.3.6 ‘wls-wsat‘ XMLDecoder 反序列化漏洞(CVE-2017-10271)复现

Weblogic的WLS Security组件对外提供webservice服务&#xff0c;其中使用了XMLDecoder来解析用户传入的XML数据&#xff0c;在解析的过程中出现反序列化漏洞&#xff0c;导致可执行任意命令。 访问http://your-ip:7001/即可看到一个404页面&#xff0c;说明weblogic已成功启动 …

Git相关配置的指令

1.获取当前Git的配置信息 获取Git的配置信息&#xff1a; git config -l 作为一个工具软件来讲&#xff0c;一般都会有默认的配置文件来保存基础的配置信息&#xff0c;Git软件的配置文件位置为&#xff1a;Git安装路径/etc/gitconfig 2.名称和邮箱 如果你是第一回使…

docker 安装 Jenkins

一、安装 jenkins 中文文档&#xff1a; https://www.jenkins.io/zh/doc/book/installing/#docker jenkins 提供了详细的安装方式和步骤&#xff0c;这里咱们使用 docker 进行安装 根据文档上的命令&#xff0c;自己修改如下&#xff1a; docker run \ -u root \ --name jenki…

阿里云99计划优惠:云服务器租用价格61元、99元、165元

阿里云99计划还有谁不知道么&#xff1f;阿里云不杀熟&#xff0c;新老用户同享&#xff0c;阿里云服务器99元一年&#xff0c;续费也是99元&#xff0c;续费不涨价家人们&#xff0c;2024年阿里云把云服务器价格打下来了&#xff0c;2核2G、2核4G、4核8G、4核16G、8核16G、8核…

Docker常见命令使用

Docker命令是使用Docker的基础。这里记录下Docker日常运维过程中经常使用到的一些命令&#xff0c;更全面的命令还请参考Docker官网。 docker用法概述 Docker命令可以通过CLI工具实现与服务器的交互。Docker命令的语法如下&#xff1a; docker [DOCKER-COMMAND] [OPTIONS] […

Express学习(三)

Express中间件 中间件的概念 什么是中间件 中间件&#xff0c;特指业务流程的中间处理环节。Express中间件的调用流程 当一个请求到达Express的服务器之后&#xff0c;可以连续调用多个中间件&#xff0c;从而对这次请求进行预处理。类似于下图所示 Express中间件的格式 Expr…