一. 键盘检测
键盘分为编码键盘和非编码键盘。
编码键盘 :键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或者键值,如计算机键盘。
非编码键盘:靠软件编程来识别。
在单片机组成的各种系统中,用的较多的是非编码键盘。编码键盘又分为独立键盘和行列式键盘(矩阵式键盘)。
1. 独立键盘
单片机系统中常见的几种按键:弹性按键,贴片按键,自锁按键
编写单片机的键盘检测程序时,一般在检测按下时加入去抖延时,检测松手时就不用加了。
案例1:用数码管的前两位显示一个十进制数,变化范围为00-59,开始时显示00,每按下S2键1次,数值加1;每按下S3键1次,数值减1;每按下S4键1次数值归零;按下S5键1次,利用定时器功能使数值开始自动每秒加1,再次按下S5键,数值停止自动加1,保持显示原数。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1 = P3^4;
sbit key2 = P3^5;
sbit key3 = P3^6;
sbit key4 = P3^7;
sbit dula = P2^6; //U1锁存器的锁存端
sbit wela = P2^7; //U2锁存器的锁存端
uchar code table[] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delayms(uint);
uchar numt0, num;
/***数码管显示函数***/
void display(uchar numdis)
{
uchar shi,ge;
shi = numdis/10;
he = numdis%10;
dula = 1;
P0 = table[shi]; //送十位段选数据
dula = 0;
P0 = 0xff;/*送位选数据前关闭所有显示,
防止打开位选锁存时原来段选数据通过位选锁存器造成混乱*/
wela = 1;
P0 = 0xfe; //送位选数据
wela = 0;
delayms(5);
dula = 1;
P0 = table[ge]; //送个位段选数据
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xfd;
wela = 0;
delayms(5);
}
/***延时函数***/
void delayms(uint xms)
{
uint i ,j;
for(i= xms; i>0 ; i--)
{
for