当前位置:
首页 >
单片机学习笔记(五)—— 键盘
发布时间:2024/3/13
49
豆豆
生活随笔
收集整理的这篇文章主要介绍了
单片机学习笔记(五)—— 键盘
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
1、键盘的分类
· 编码式键盘
· 非编码式键盘
编码式键盘:键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值。(如:计算机键盘)
非编码式键盘:由软件编程来识别。(单片机中使用最多)
2、非编码式键盘
· 独立键盘
· 矩阵键盘
随手代码:#include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit d1=P1^0; sbit dula=P2^6; //数码管段选信号 sbit wela=P2^7; //数码管位选信号 sbit key1=P3^4; //独立按键key1 uchar code table[]={ //数码管显示编码 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar num; void delay(uint z) //延时 (防抖) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void main() { wela=1; P0=0xfe; //打开低一数码管 wela=0; P3=0xff; while(1) { if(key1==0) //监听按键是否被按下 { delay(5);//延时5ms (具体解释见本文尾) if(key1==0)//再次确认按键是否被按下 { d1=0; num++; if(num==10) num=0; } while(!key1);//松手监测 delay(5); while(!key1);//再次确认是否松手 } else d1=1; dula=1; P0=table[num];//数码管显示 dula=0; } }
(2)矩阵键盘
通常,矩阵式键盘 8 个引脚接在单片机的 P3.0 ~P3.7上
(2)定义一个变量 temp = P3, 通过 temp &= 0xf0,取其高四位,判断是否有键被按下
(3)重读 P3 口,判断是哪一个键被按下
随手代码:#include<reg52.h>
#define uint unsigned int #define uchar unsigned char sbit dula = P2 ^ 6; sbit wela = P2 ^ 7;
uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0};
uchar num,temp,num1; void delay(uint z) { uint x,y; for(x = z; x > 0; x--) for(y = 110; y > 0; y--); } uchar keyscan(); void display(uchar aa);
void main() { num = 17; dula = 1; P0 = 0; dula = 0; wela = 1; P0 = 0xc0; wela = 0; while(1) { display(keyscan()); } }
void display(uchar aa)//数码管显示 { dula = 1; P0 = table[ aa - 1 ]; dula = 0; }
uchar keyscan() { P3 = 0xfe; temp = P3; temp = temp & 0xf0; while(temp != 0xf0)//防抖 { delay(5); temp = P3; temp = temp & 0xf0; while(temp != 0xf0) { temp = P3; switch(temp) { case 0xee: num = 1; break; case 0xde: num = 2; break; case 0xbe: num = 3; break; case 0x7e: num = 4; break; } while(temp != 0xf0)//松手监测 { temp=P3; temp=temp&0xf0; } } } P3 = 0xfd; temp = P3; temp = temp & 0xf0; while(temp != 0xf0) { delay(5); temp = P3; temp = temp & 0xf0; while(temp != 0xf0) { temp = P3; switch(temp) { case 0xed: num = 5; break; case 0xdd: num = 6; break; case 0xbd: num = 7; break; case 0x7d: num = 8; break; } while(temp != 0xf0) { temp = P3; temp = temp & 0xf0; } } } P3 = 0xfb; temp = P3; temp = temp & 0xf0; while(temp != 0xf0) { delay(5); temp = P3; temp = temp & 0xf0; while(temp != 0xf0) { temp = P3; switch(temp) { case 0xeb: num = 9; break; case 0xdb: num = 10; break; case 0xbb: num = 11; break; case 0x7b: num = 12; break; } while(temp != 0xf0) { temp = P3; temp = temp & 0xf0; } } } P3 = 0xf7; temp = P3; temp = temp & 0xf0; while(temp != 0xf0) { delay(5); temp = P3; temp = temp & 0xf0; while(temp != 0xf0) { temp = P3; switch(temp) { case 0xe7: num = 13; break; case 0xd7: num = 14; break; case 0xb7: num = 15; break; case 0x77: num = 16; break; } while(temp != 0xf0) { temp = P3; temp = temp & 0xf0; } } } return num; }
3、抖动现象
按键在闭合和断开时,触点会存在抖动现象
· 非编码式键盘
编码式键盘:键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值。(如:计算机键盘)
非编码式键盘:由软件编程来识别。(单片机中使用最多)
2、非编码式键盘
· 独立键盘
· 矩阵键盘
(1)独立键盘
原理:当按键被按下时,P3.4 / P3.7 将会与 GND 连通,即为低电平(0);
随手代码:
原理:(以下为第一行键盘,以此类推) (1)将 P3 口赋值为 0xfe (1111,1110)
(2)定义一个变量 temp = P3, 通过 temp &= 0xf0,取其高四位,判断是否有键被按下
(3)重读 P3 口,判断是哪一个键被按下
随手代码:
图 1 图 2 如图1,我们可以在 delay(5)后,重新读取,可消除抖动; 图2是硬件防抖
总结
以上是生活随笔为你收集整理的单片机学习笔记(五)—— 键盘的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 防火墙、DCD与TCP Keep ali
- 下一篇: 云脉文档管理小程序使办公更协同