文章目录
1、独立按键
键盘是电子系统中人机对话的重要组成部分,是人向机器发出指令、输入信息的必须设备。键盘在单片机应用系统中是使用最广泛的一种数据输入设备。键盘是由多个按键组成的。按键的工作原理:按键通常是一种常开型开关,常态下按键的两个触点处于断开状态,按下按键时它们才闭合。
2、键盘的类型
通常键盘有编码键盘和非编码键盘两种。编码键盘通过硬件电路产生被按按键的键值码,这种键盘使用方便,所需程序简单,但硬件电路复杂,如计算机的键盘,单片机则通常不采用编码键盘。而软件编程来识别的称为非编码键盘,非编码键盘硬件电路简单。在单片机组成的各种系统中,最常用的是非编码键盘。
3、原理图示意
注意:按键一端与IO口连接,另外一端接地。通过控制IO口输出高电平即可检测按键是否按下,当按下时IO口会被拉低,松开后IO口回到高电平。
4、新建工程
5、工程编码
#include <REGX52.H>
void main()
{
while(1)
{
/* Press on the Button. */
if(0 == P3_1)
{
/* Light up LED. */
P2_0 = 0;
}
else
{
/* Light off LED. */
P2_0 = 1;
}
}
}
6、C51数据运算
#include <REGX52.H>
void main()
{
while(1)
{
/* Press on the Button. */
if((0 == P3_1)&&(0 == P3_0))
{
/* Light up LED. */
P2_0 = 0;
}
else
{
/* Light off LED. */
P2_0 = 1;
}
}
}
7、按键抖动
对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。
8、工程编码(防抖操作)
#include <REGX52.H>
void DelayMs(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main()
{
while(1)
{
/* Press on the Button. */
if(0 == P3_1)
{
/* Delay time is 20ms. */
DelayMs(20);
while(0 == P3_1);
/* Delay time is 20ms. */
DelayMs(20);
P2_0 = ~P2_0;
}
}
}
9、独立按键控制LED并显示二进制
#include <REGX52.H>
void DelayMs(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main()
{
unsigned char LedNum = 0; // 8 bit
while(1)
{
/* Press on the Button. */
if(0 == P3_1)
{
/* Delay time is 20ms. */
DelayMs(20);
while(0 == P3_1);
/* Delay time is 20ms. */
DelayMs(20);
/* After Power on. P2 pin is high level status. P2 = 1111 1111 */
LedNum++;
P2 = ~LedNum;
}
}
}
9、独立按键控制LED移位
#include <REGX52.H>
void DelayMs(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main()
{
unsigned char LEDNum = 0; // 8 bit
P2 = ~0x01; // init Led status after power on.
while(1)
{
/* Press on the Button. */
if(0 == P3_1)
{
/* Delay time is 20ms. */
DelayMs(20);
while(0 == P3_1);
/* Delay time is 20ms. */
DelayMs(20);
/* After Power on. P2 pin is high level status. P2 = 1111 1111 */
LEDNum++;
if(LEDNum >= 8)
LEDNum = 0;
P2 = ~(0x1 << LEDNum);
}
if(0 == P3_0)
{
/* Delay time is 20ms. */
DelayMs(20);
while(0 == P3_0);
/* Delay time is 20ms. */
DelayMs(20);
/* After Power on. P2 pin is high level status. P2 = 1111 1111 */
if(LEDNum <= 0)
LEDNum = 8;
else
LEDNum--;
P2 = ~(0x1 << LEDNum);
}
}
}