单片机基础知识 07(键盘)

本文详细介绍了单片机中的键盘检测技术,包括编码键盘与非编码键盘的区别,以及独立键盘(如弹性按键、贴片按键等)和矩阵键盘(行列式键盘)的实现方法。通过实例展示了如何使用延时处理去抖动,以及矩阵键盘的扫描过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 键盘检测

键盘分为编码键盘非编码键盘

编码键盘 :键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或者键值,如计算机键盘。

非编码键盘:靠软件编程来识别。

在单片机组成的各种系统中,用的较多的是非编码键盘。编码键盘又分为独立键盘行列式键盘矩阵式键盘)。

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值