当前位置:网站首页>独立按键控制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;
}
}
}
操作现象如下
边栏推荐
- clinit方法
- MindSpore 提 PR 全流程
- QT weekly skills (2)~~~~~~~~~ interface buttons
- 表格比手机屏幕宽时不压缩,可左右滚动,格子内容不换行
- About map custom sorting of keys
- TCP为什么要三次握手,握手过程中丢包会怎么样?
- Real-time waveform display of CAN communication data based on QT (serial eight) ==== "Sub function or new class calls ui control"
- C language, usage of qsort in library function, and explanation
- xxx is not in the sudoers file.This incident will be reported错误
- 关于map对key自定义排序
猜你喜欢

QT连载3:基于QT和STM32H750的LORA试验平台(2)
![[Jiangsu University Automation Association stm32F103c8t6] Notes [Initial 32 MCU and EXTI External Interrupt Initialization Parameter Configuration]](/img/e5/87cf293ac3d0c613864e99a8fe9a47.png)
[Jiangsu University Automation Association stm32F103c8t6] Notes [Initial 32 MCU and EXTI External Interrupt Initialization Parameter Configuration]
![Massive remote sensing data processing and application of GEE cloud computing technology [basic, advanced]](/img/38/239933ac987da762135db2d13902d0.png)
Massive remote sensing data processing and application of GEE cloud computing technology [basic, advanced]

VsCode连接远程服务器并修改文件代码

pdf和word等文档添加水印

MindSpore 提 PR 全流程

服务器基础知识:包含基本概念,作用,服务器选择,服务器管理等(学习来自米拓建站)

Kunlun State Screen Production (Serialization 2)---Basic Chapter (setting and display, serial transmission)

QT Weekly Skills (1) ~~~~~~~~~ Running Icon

vscode set sublime theme
随机推荐
你不知道的JS思考题
自定义类加载器
-----博客声明
Vim find character
2020-09-03解决pip install安装非常慢[Errno 101] 网络不可达问题
昆仑通态屏幕制作(连载1)---接触篇
Deep Interpretation of void (*signal(int , void(*)(int)))(int) in "C Traps and Defects"
昆仑通态屏幕制作(连载2)---基础篇(设定与显示,串口发送)
关于报错vscode
Vim查找字符
暂时存着阿里云
Explore the efficiency of make_shared
vs编译boost库脚本
无法完成包的安装npm ERR! Refusing to install package with name “moment“ under a package also called “moment“
FPGA parsing B code----serial 2
昆仑通态屏幕制作(连载3)---基础篇(按钮串口发送)
重磅揭晓!第十四届深创赛福田预选赛区暨华秋第八届硬创大赛华南分赛区晋
Real-time waveform display of CAN communication data based on QT (serial eight) ==== "Sub function or new class calls ui control"
【正点原子】IIC的学习与使用(未完...)
干货 | 什么是FOC?一文带你看BLDC电机驱动芯片及解决方案