单片机c语言自锁程序,按键入门

这一章我们讲解单片机最常用的硬件部分——按键!

1.原理图

按键分 独立按键 和 矩阵按键,本教程不讲解矩阵按键,4个独立按键已经满足大部分的程序测试。学会了独立按键,矩阵按键可参考宋老师的教程。

先看到我们开发板上的K4

现在让单片机的P2.3输出低电平,则演化为下图所示

圈出部分都为0V电压,因为这些地方都被接了地。

2.原理

原理很简单,我们开发板上的按键用的是没有自锁功能的自弹起的按键,也就是像按家里电磁炉上的按键一样,按下之后两个断点就被短接起来,松手后这时按键自己弹起,两个断点就没有短接在一起了。

拿P2.7来说,当K4按键按下,则断点导通,P2.7被接地,此时P2.7的IO端口为0V,也就是低电平,俗称被拉低。这时候即使是程序令P2.7输出5V高电平都于事无补,因为这是外部电路直接导致,IO端口就是0V。内部硬件也能感觉到这个信 属于被强制拉低。这么解释有点笼统,所以我们前往《手把手教你学51单片机》文档8.4.1节有很权威的解释。

在程序里我们是可以去读此时的IO端口信 的,读的意思就是外部信 输入到单片机内部里面,单片机去检测识别这个信 的意思,我们还是先用一个简单的程序来说明一下IO端口被拉低的情况怎么在代码中表示出作用。

3.代码

程序下载进去我们按下K4,按下时8盏LED小灯被点亮,松开不按时就熄灭#include 

sbit ADDR2 = P1^2;

sbit ADDR1 = P1^1;

sbit ADDR0 = P1^0;

sbit ENLED = P1^4;

sbit ADDR3 = P1^3;

sbit KEY4  = P2^7;

sbit GND   = P2^3;

void main()

{

ADDR3 = 1;//使能三八译码器

ENLED = 0;//

ADDR2 = 1;//**************************

ADDR1 = 1;//让三八译码器的IO6输出低电平

ADDR0 = 0;//**************************

GND=0;    //让P2.7能具备有被拉低的条件先

while(1)

{

P0=KEY4*0xFF;

}

}

4.解析

那么看到“P0=KEY4*0xFF;”语句,KEY4是可以作为一个数值与0xFF相乘的,但这个KEY4值只有两个极限数,不是1就是0。

在P2.3输出低电平的情况下,当按键按下时,此时P2.7被拉低,在程序中KEY4就变为0了,当按键松开,那P2.7断开了与地相接,就相当于什么也没接,自然跟第三章第2讲结尾提到过的是高电平状态了,这是内部硬件上拉电阻的作用,空闲时是高电平,所以此时在程序中KEY4也就变为1了。

所以“P0=KEY4*0xFF;”就是取决于按键的动作是要变为“P0=0x00;”还是“P0=0xFF;”。

我们就是用一排灯来提示了一个IO端口有没有被拉低了的功能。

如果想实现按下时8盏小灯熄灭,松开不按时点亮,只需把“P0=KEY4*0xFF;”改为“P0=~(KEY4*0xFF);”即可。

文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览115009 人正在系统学习中 相关资源:基于WinCC组态软件的加热炉炉温优化与仿真研究_winCC实现加热炉…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月15日
下一篇 2021年4月15日

相关推荐