当前位置:网站首页>独立按键控制led进阶(1)
独立按键控制led进阶(1)
2022-07-30 05:46:00 【缘聚654】
通过上次的了解,已经掌握了控制led亮灭,但是不足的是只有当按键按下时灯亮,而松手后灯就熄灭了,那么为了能完善一下,下面学要对程序进阶一下
我们需要一段代码来判断一下按键的状态然后再对led的状态进行改变,这里需要在if语句中引入一个while循环来实现
#include <REGX52.H>
#include <INTRINS.H>
void Delay1ms(int xms)
{
unsigned char i, j;
while(xms--)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void main()
{
while(1)
{
if(P3_1==0)
{
Delay1ms(20);
while(P3_1==0);
Delay1ms(20);
P2_0=~P2_0;
}
}
}解释一下代码的运行过程,首先判断按键是否按下,然后进入while循环,当按键按下但没有松开时,循环体会一直循环,从而不运行下面的代码,当按键松开时便跳出循环,执行对led进行操作的语句P2_0=~P2_0;这里的~是取反的意思,即led不亮时转化为亮,亮时转化为灭,然后循环上述内容,即每当对按键进行一次操作都会改变led的状态。
对单片机进行操作后的结果如下
然后在此基础上加入一些新功能,按键控制led二进制显示。
控制led二进制显示需要用到整个led模块的8个led,所以这里用P2对模块进行整体控制,但是由于直接对P2进行赋值比较复杂引入一个中间变量lednum,并使其从0开始逐次加一,并且每次取反后的值赋给P2就能实现led的二进制显示
#include <REGX52.H>
void Delay1ms(int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void main()
{
unsigned char lednum=0;
while(1)
{
if(P3_1==0)
{
Delay1ms(20);
while(P3_1==0);
Delay1ms(20);
lednum++;
P2=~lednum;
}
}
}
操作现象如下
边栏推荐
- [Jiangsu University of Science and Technology Automation Association stm32F103c8t6] Notes [Initial 32 MCU and TIM timing interrupt initialization parameter configuration]
- Explore the efficiency of make_shared
- QT连载4:基于QT和STM32H750的LORA试验平台(3)
- 关于 PCB 多层板制程能力不得不说的那些事儿
- QT串口和CAN数据动态实时显示最后日志
- 2020-09-03解决pip install安装非常慢[Errno 101] 网络不可达问题
- jvm之逃逸分析
- ssh script space character conversion
- 动态规划进阶 JS
- Real-time waveform display of CAN communication data based on QT (serial eight) ==== "Sub function or new class calls ui control"
猜你喜欢

【正点原子】IIC的学习与使用(未完...)

VSCode hides the left activity bar
![[Common usage of markdown]](/img/4b/3cb17b1dafe095e2f45510b41186fd.png)
[Common usage of markdown]

【markdown常用用法】

This beta version of Typora is expired, please download and install a newer;解决方法

迪文串口屏幕制作(连载一)=====准备工作

xxx is not in the sudoers file.This incident will be reported错误

This beta version of Typora is expired, please download and install a newer; workaround

QT serialization 1: readyRead() function, the solution to incomplete data subcontracting

查找Proj4js地图投影参数
随机推荐
工程师必看:常见的PCB检测方法有哪些?
你不知道的JS语法篇笔记
自定义类加载器
2021年软考中级过关
关于报错vscode
迪文串口屏幕制作(连载一)=====准备工作
sizeof和strlen最全区别,以及指针和数组运算解析
2020-09-03 Solve the very slow installation of pip install [Errno 101] Network unreachable problem
服务器基础知识:包含基本概念,作用,服务器选择,服务器管理等(学习来自米拓建站)
昆仑通态屏幕制作(连载1)---接触篇
clinit方法
jvm之逃逸分析
Kunlun State Screen Production (serialization 4) --- Basics (graphical setting and display, button lights)
OpenLayers (ol包),Vite显示地图(附源码)
Simple use of xftp
高集成度 MCU 市场增大,如何加速 BLDC 领域落地应用
Written before the official account - QT, ARM, DSP, microcontroller, power electronics and transmission!
TCP建立连接的过程
Acwing刷题第一节
JS的值和引用,复制和传递