51单片机入门教程_独立按键控制系列
一、老规矩 先上代码
#include <REGX52.H>void main()
{while(1){if(P3_1==0 || P3_0==0) //如果K1按键或K2按键按下{P2_0=0; //LED1输出0,点亮}else{P2_0=1; //LED1输出1,熄灭}}
}
我们可以看到其本质还是对端口进行操作 因而我们需要从其原理图继续出发
我们可以看到 独立按键的每一个口右侧接地 因此单我们点击独立按键的时候 MCU所接受到的是低电平信号 所以我们可以利用这点来控制LED灯的亮灭
但是其缺点也很明显 就是我们只有持续按住的时候 LED灯才能够保持亮着的状态
二、通过独立按键对LED灯进行一波控制
1、首先,我们需要理解独立按键本身所存在的一些问题
对于机械开关所存在的抖动,我们需要利用延时函数进行处理,从而使我们的控制达到稳定的状态
2、因此我们的代码应该这样子设计
#include <REGX52.H>void Delay(unsigned int xms)
{unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}
}void main()
{while(1){if(P3_1==0) //如果K1按键按下{Delay(20); //延时消抖while(P3_1==0); //松手检测Delay(20); //延时消抖P2_0=~P2_0; //LED1取反}}
}
其中 注意松手检测处 如果K1按下的时候 没有松手 就会在while里面一直循环不出来 也就没办法执行下一步语句 即灯不会亮
当我们再次按下K1的时候 灯就会重新暗淡下去 因为我们此时对灯进行了取反
三、通过独立按键对LED显示二进制
1、老规矩 先上代码
void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void main()
{unsigned char LEDNum=0;while(1){if(P3_1==0) //如果K1按键按下{Delay(20); //延时消抖while(P3_1==0); //松手检测Delay(20); //延时消抖LEDNum++; //变量自增P2=~LEDNum; //变量取反输出给LED}}
}
2、在二的基础上 对控制灯的二进制数进行操作 关键点就是二进制的转换罢了
四、通过独立按键对LED显示二进制
1、上代码
#include <REGX52.H>
void Delay(unsigned int xms);unsigned char LEDNum;void main()
{P2=~0x01; //上电默认LED1点亮while(1){if(P3_1==0) //如果K1按键按下{Delay(20);while(P3_1==0);Delay(20);LEDNum++; //LEDNum自增if(LEDNum>=8) //限制LEDNum自增范围LEDNum=0;P2=~(0x01<<LEDNum); //LED的第LEDNum位点亮}if(P3_0==0) //如果K2按键按下{Delay(20);while(P3_0==0);Delay(20);if(LEDNum==0) //LEDNum减到0后变为7LEDNum=7;else //LEDNum未减到0,自减LEDNum--;P2=~(0x01<<LEDNum); //LED的第LEDNum位点亮}}
}void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}
2、so easy 看看注释 你学会了不?
51单片机入门教程_独立按键控制系列相关推荐
- 51单片机(三)独立按键控制LED
❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分:建议先学习51单片机,其是STM32等高级单片机的基础:这样再学习STM32时才能融会贯通. ☀️ 专栏适 ...
- 7.2单片机入门学习之独立按键控制流水灯
⏰1.配置寄存器 首先,我们先来配置下定时器,如何配置定时器,定时器就是要先把相关的符号进行声明的,但是由于#include<REGX52.H>当中已经帮我们声明好了,那么我们直接使用就可 ...
- 51单片机入门教程学习笔记
基于江科大自化协B站教学视频<51单片机入门教程-2020版 程序全程纯手打 从零开始入门> 一.单片机介绍 单片机,英文Micro Controller Unit,简称MCU 内部集成了 ...
- 51单片机入门教程(6)——外部中断
51单片机入门教程(6)--外部中断 一.外部中断 1.1 中断 1.2 外部中断 二.中断优先级 一.外部中断 1.1 中断 关于中断的概念在上一篇博客中已经提到了.(传送门:51单片机入门教程(5 ...
- 51单片机入门教程(5)——定时器中断
51单片机入门教程(5)--定时器中断 一.中断的概念 二.定时器中断 2.1 软件延时的不足 2.2 中断寄存器 2.2.1 中断允许控制寄存器 IE 2.2.2 定时器工作方式寄存器 TMOD 2 ...
- 51单片机入门教程(1)——点亮一个LED灯
51单片机入门教程(1)--点亮一个LED灯 一.什么是单片机 单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU.随机存储器 ...
- 51单片机入门教程(3)——数码管显示
51单片机入门教程(3)--数码管显示 一.LED数码管简介 二.数码管静态显示 三.数码管动态显示 特别鸣谢:HFUTer-朱聪强 一.LED数码管简介 LED数码管(LED Segment Dis ...
- b站江科大自化协51单片机入门教程笔记(1)
文章目录 1 综述 2-1 点亮一个LED 2-2 LED闪烁 2-3 LED流水灯 2-4 LED流水灯PLus 3-1 独立按键控制LED亮灭 3-2 独立按键控制LED状态 3-3 独立按键控制 ...
- b站江科大自化协51单片机入门教程笔记(2)
文章目录 6-1 矩阵键盘 6-2 矩阵键盘密码锁 7-1 定时器 7-2 按键控制LED流水灯 & 定时器时钟 独立按键模块 定时器模块 8-1 串口通信 8-2 串口向电脑发送数据 &am ...
最新文章
- 批处理实现从Excel导入Oracle
- proxool连接池空闲连接中断问题解决
- 在windows中设置程序运行的cpu
- HDFS的API调用,创建Maven工程,创建一个非Maven工程,HDFS客户端操作数据代码示例,文件方式操作和流式操作
- 添加vlan后无法上网_VLAN攻击如何有效防范?搞定虚拟局域网就在以下三点
- linux malloc命令,减少 curl 中内存分配操作(malloc)
- Golang闭包的典型应用
- java捕鱼达人代码java捕鱼游戏代码
- CocoStudio 骨骼动画制作过程
- javascript服务端编程
- 受力分析软件_大赛作品 | 关于Z型路灯受力情况分析
- IMC IMV SecurityCenter连通
- java网络编程1-查询Internet地址
- 同花顺面经(二面挂)
- ant vue 的datepicker类组件中英文混合显示解决
- 《Science》教你如何写好一篇博士毕业论文!
- linux cp命令 时间,Linux cp命令总结
- IE6/7常用的hack
- R语言散点图分类、配色、添加趋势线
- plotly画图(包含x轴设置marker类型设置)