目录
前言
LED
1.LED介绍
2.LED原理图
3.如何实现发光
按键
1.按键原理图
2.按键原理
按键控制LED
1.代码实现
2.软件消除抖动
软件消除抖动的原因
软件消抖如何实现
总结
前言
我们上节完成了开发环境的安装,本节我们就来实现我们的第一个程序吧(没安装开发换的去看:keil开发环境安装)
LED
1.LED介绍
发光二极管简称为LED。 由含镓(Ga)、砷(As)、磷(P)、氮(N)等的化合物制成。 当电子与空穴复合时能辐射出可见光,因而可以用来制成发光二极管。 在电路及仪器中作为指示灯,或者组成文字或数字显示。
2.LED原理图
要想导通LED就需要看原理图,也就是电路知识,但是不用害怕,也就是初中物理电路的难度。
上图可以看到有三个二极管,并且每一个二极管的正极给予了5v(也就是高电平) ,二极管D4的负极接地(也就是低电平),所以我们插上电源后就可以发现我们不需要任何操作二极管D4就可以发光。对于另外两个二极管D5和D6来说,他们的负极分别接的是LED1和LED2,那么这两个接口(LED1和LED2)都接到哪里去了呢,此时我们需要看芯片手册STC89C52RC的针脚图:
可以看到红色方框里的内容,LED1和LED2分别接到了P3.7和P3.6针脚,那么我们只需要编程,让P3.7和P3.6为低电平,二极管就会被导通,二极管就会发光。
3.如何实现发光
简单的串联电路,D4,D5,D6板子上有标记,D5一端通过电阻接5v,另外一端接着"LED1标志的线",我们发现在89C52RC的电路图中也有LED1的标志,是在P3的IO口组中,在P3.7引脚,所以编程让P3.7出低电平(0)就让D5灯完成一个串联电路,所以亮。
#include "reg52.h"
sbit ledOne = P3^7;
void main()
{
//灯亮,给一个P3.7低电平
ledOne = 0;
}
我们同过sbit配置P3^7针脚, 此时烧录进单片机可以看到单片机的二极管D5发光:
按键
1.按键原理图
2.按键原理
KEY1接到STC89C52RC的P2.1口,我们只要不断检测P2.1口的值(0-按下,1-松开)就知道按键是否被按下。
KEY1上方有上拉电阻,当按键没被按下的时候,KEY1应该是高电平,当按键按下的时候,电阻具有分压作用,KEY1就应该处于低电平状态,所以我们只需要检测KEY的电平状态就能知道按键是否被按下。
按键控制LED
按键和灯不是我们传统理解的思维,传统按键和灯是在同一个电路中的。而我们单片机编程按键和灯是分开的两个电路,通过单片机作为媒介来处理数据,通过逻辑来实现按键控制灯。
1.代码实现
#include "reg52.h"
sbit key1 = P2^1;
sbit ledOne = P3^7;
void main()
{
while(1){
//注意:用“==”两个等于号表示判断,新手容易犯错
if(key1 == 0){ //KEY1位置和GND接通,表现为低电平,值为0
//灯亮,给一个P3.7低电平
ledOne = 0;
}
}
}
此时,我们按下按钮1,二极管D1就会发光。
2.软件消除抖动
软件消除抖动的原因
按键在物理上存在接触问题,当按键被按下或释放时,会产生信号抖动。 这是由于按键内部的金属接点在接触或分离时可能会产生不稳定的电信号。 信号抖动可能导致按键被错误地识别为多次按下或释放,从而产生错误的结果。
软件消抖如何实现
物理上的接触问题是很短的,但我们人按下去的时间一定比物理抖动的时间长,所以我们只需要加一个延时函数来判断50ms之后按键是否还处于被按下的状态,如果是就执行灯亮的操作,这样就避免了物理抖动上产生的错误。
#include <reg52.h>
void Delay50ms() //@11.0592MHz
{
unsigned char i, j;
i = 90;
j = 163;
do
{
while (--j);
} while (--i);
}
sbit ledOne = P3^7;
sbit key1 = P2^1;
void main()
{
while(1)
{
if(key1 == 0)
{
Delay50ms();
if(key1 == 0) ledOne = 0;
}
}
}
总结
我们本节点亮了LED,以及使用按键控制LED,以及按键消除抖动的操作。