- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第一部分 按键
原理图
图1 矩阵按键和独立按键
共20个按键,有4*4矩阵键盘:S1~S16,4个独立按键:S17~S20
1、独立按键
51单片机接按键,按键一端接地,另一端与I/O引脚相连,按键按下为低电平,未按下为高电平如果用P0口需要加上拉电阻(10k),其他端口可以不加上拉电阻,编程时只要检测高低电平来判断是否有按键按下就可以了。
P0口是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,绝大多数情况下P0口是必需加上拉电阻的P0口
S17~S20、4个独立按键一端接地,一端接P33~P30,按键按下为低电平,未按下为高电平void main (void)
{
P1=0xFF;//P1口置1
KEY=1; //按键输入端口电平置高
while (1) //主循环
{
if(!KEY) //如果检测到低电平,说明按键按下
LED=0;
else
LED=1; //这里使用if判断,如果按键按下led点亮,弹起来熄灭。
//上述4句可以用一句替代 LED=KEY;
}
}
程序2:
sbit KEY=P3^3; //定义按键输入端口S17
sbit LED=P1^2; //定义led输出端口
void main (void)
{
P1=0xFF;//P1口置1
KEY=1; //按键输入端口电平置高
while (1) //主循环
{
if(!KEY) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY) //再次确认按键是否按下,没有按下则退出
{ while(!KEY);//如果确认按下按键等待按键释放,没有释放则一直等待
{
LED=!LED;//释放则执行需要的程序
}
}
}
}
}
程序3:按键加减操作,见程序,并且按照第4个程序的方法修改程序。
3、矩阵按键
方法一:矩阵键盘行列扫描
#define KeyPort P3
/*------------------------------------------------
按键扫描函数,返回扫描键值
------------------------------------------------*/
unsigned char KeyScan(void) //键盘扫描函数,使用行列逐级扫描法
{
unsigned char Val;
KeyPort=0xf0;//高四位置高,低四位拉低
if(KeyPort!=0xf0)//表示有按键按下
{
DelayMs(10); //去抖
if(KeyPort!=0xf0)
{ //表示有按键按下
KeyPort=0xfe; //检测第一行
if(KeyPort!=0xfe)
{
Val=KeyPort0xf0;
Val+=0x0e;
while(KeyPort!=0xfe);
DelayMs(10); //去抖
while(KeyPort!=0xfe);
return Val;
}
KeyPort=0xfd; //检测第二行
if(KeyPort!=0xfd)
{
Val=KeyPort0xf0;
Val+=0x0d;
while(KeyPort!=0xfd);
DelayMs(10); //去抖
while(KeyPort!=0xfd);
return Val;
}
KeyPort=0xfb; //检测第三行
if(KeyPort!=0xfb)
{
Val=KeyPort0xf0;
Val+=0x0b;
while(KeyPort!=0xfb);
DelayMs(10); //去抖
while(KeyPort!=0xfb);
return Val;
}
KeyPort=0xf7; //检测第四行
if(KeyPort!=0xf7)
{
Val=KeyPort0xf0;
Val+=0x07;
w
文档评论(0)