单片机键盘控制
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
unsigned char a,b;
void delay10ms(void) //延时程序
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
key()
//按键判断程序
{
慧净电子网:WWW.HLMCU.COM
慧净小店:http://shop37031453.taobao.com/
dula=1;
// while(100--);
dula=0;
P0=0xc0;
wela=1;
wela=0;
*/
P1=0xfc;
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
慧净电子网:WWW.HLMCU.COM
慧净小店:http://shop37031453.taobao.com/
慧净电子-做人人都买得起的 51 单片机开发板---真诚为你服务,基于 HJ-1G 开发板 5.3.2 开发板独立按键模块原理图
5.4 源码编写
独立按键软件操作简单,主要检测按键连接的 IO 口是否为“0”,为“0”表 示按键按下。 用以下语句: Sbit KEY1 = P3^0; If(!KEY1){//添加按键按下时需要执行的操作} 实际使用中按键有固定的机械抖动,根据不同按键抖动时间不同,一般
慧净 2008 年 8 月 8 日
慧净电子网:WWW.HLMCU.COM
慧净小店:http://shop37031453.taobao.com/
key(); //调用按键识别函数 move(); //调用广告灯移动函数 } } //如果有干扰请加去抖程序 //红外接收头部分用黑色物质遮光,防止干扰按键,因为红外接收和按键使用同 一个端口
4X4 点阵实验 //4*4 键盘检测程序,按下键后相应的代码显示在数码管上 #include<reg51.h>
case 0xdd: key=5; break;
case 0xbd: key=6; break;
case 0x7d:
key=7;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
/*
P0=table[key];
慧净电子-做人人都买得起的 51 单片机开发板---真诚为你服务,基于 HJ-1G 开发板
}
版权声明:(部分资料图片来源网络) 1、本教程为慧净电子会员整理作品,欢迎网上下载、转载、传播、免费共享给 各位单片机爱好者! 2、该教程可能会存在错误或不当之处,欢迎朋友们指正。 3、未经协商便做出不负责任的恶意评价(中评,差评),视为自动放弃一切售后服 务的权利! 4、我们的产品收入一部分是赠送给慈善机构的,以免影响到你的善心.大家好, 才是真的好(双方好评)。
慧净电子-做人人都买得起的 51 单片机开发板---真诚为你服务,基于 HJ-1G 开发板
if(BY1==0) //判断是否按下键盘
{
delay10ms(); //延时,软件去干扰
if(BY1==0) //确认按键按下
{
count++; //按键计数加1
if(count==8) //计8次重新计数
5.2 硬件电路
5.3 原理图 5.3.1 触点存在抖动现象说明
由于按键本身都存在不同的机械抖动,单片机属于高速检测器件,可以很容易检测出抖动, 但抖动并不是我们需要的,容易造成误操作,所以正常使用过程中需要添加去抖动程序,主 要用于跳过抖动,避免造成干扰。
慧净电子网:WWW.HLMCU.COM
慧净小店:http://shop37031453.taobao.com/
慧净电子网:WWW.HLMCU.COM
慧净小店:http://shop37031453.taobao.com/
慧净电子-做人人都买得起的 51 单片机开发板---真诚为你服务,基于 HJ-1G 开发板
sbit beep=P2^3; sbit dula=P2^6; sbit wela=P2^7;
unsigned char i=100; unsigned char j,k,temp,key; void delay(unsigned char i) {
key=0; break;
慧净电子网:WWW.HLMCU.COM
慧净小店:http://shop37031453.taobao.com/
慧净电子-做人人都买得起的 51 单片机开发板---真诚为你服务,基于 HJ-1G 开发板
case 0xde: key=1; break;
case 0xbe: key=2; break;
慧净电子-做人人都买得起的 51 单片机开发板---真诚为你服务,基于 HJ-1G 开发板
手把手教你学 51 单片机 C 语言教程 第 14 课 (键盘控制)
5.1 学习目标
独立按键是区别于矩阵键盘的一种按键方式,主要是按键直接连接到 IO 口,另外一端连接 VCC 或者 GND,一般情况连接到 GND(地),也就是按键按下的时候,IO 口的电平被强 制拉低,即 0,而通 过 IO 输入检测该端口电平就可以判断按键是否按下。
for(j=i;j>0;j--) for(k=125;k>0;k--);
} unsigned char code table[]={0x3f,பைடு நூலகம்x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; display(unsigned char num) {
下面是有缘人看的,谢谢理解 善有善报,恶有恶报,不是不报,时候未到。 从古至今,阴司放过谁,大家得多行善。 行善积德,爱护动物,哪怕小蚂蚁也是生命。 可改变命运,可心想事成,有利保佑子孙后代更昌盛。 学习弟子规,教我们如何做人,看和谐拯救危机,教我们看宇宙。 看为什么不能吃它们,教我们慈悲心,看因果轮回纪录,教我们懂得因果报应。 切勿造恶,种瓜得瓜种豆得豆,一切都有过程,待成熟之时,福德或果报自来找 你。
case 0x7e:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
// P0=table[key];
/*
P0=0xff;
dula=1;
while(i--); dula=0; P0=0xc0; wela=1; wela=0; dula=0; wela=0; P0=0xff; dula=1; dula=0; P0=0xc5; wela=1; wela=0; */ P1=0xfe; } } P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0)
{
count=0; //将count清零
}
}
while(BY1==0);//按键锁定,每按一次count只加1.
}
}
move()
//广告灯向左移动移动函数
{
a=temp<<count;
b=temp>>(8-count);
P1=a|b;
}
main() {
count=0; //初始华参数设置 temp=0xfe; P1=0xff; P1=temp; while(1) //永远循环,扫描判断按键是否按下 {
慧净电子-做人人都买得起的 51 单片机开发板---真诚为你服务,基于 HJ-1G 开发板
if(temp!=0xf0) {
delay(10); if(temp!=0xf0) {
temp=P3; switch(temp) {
case 0xeb: key=8; break;
case 0xdb: key=9; break;
case 0xbb: key=10; break;
case 0x7b: key=11; break;
} while(temp!=0xf0) {
temp=P3; temp=temp&0xf0; beep=0; } beep=1; display(key); /* P0=table[key]; dula=1; // while(100--); dula=0; P0=0xc0; wela=1; wela=0; */ P1=0xf8; } } P3=0xf7; temp=P3;
4-15mS,根据这个特点,需要延时躲避抖动,由于按下和释放都会存着抖动, 实际使用程序需要进行 2 次去抖。具体程序如下: #include <reg52.h>
sbit BY1=P3^4;
//定义按键的输入端S2键
unsigned char count; //按键计数,每按一下,count加1
unsigned char temp;
beep=0;
}
beep=1;
display(key);
/*
P0=table[key];
dula=1;
//
while(100--);
dula=0;
P0=0xc0;
wela=1;
wela=0;
*/ P1=0xf0;
}
}
}
慧净电子网:WWW.HLMCU.COM
慧净小店:http://shop37031453.taobao.com/
temp=P3; switch(temp) {
case 0xe7: key=12; break;
case 0xd7: key=13; break;
case 0xb7: key=14; break;
case 0x77:
key=15;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
慧净电子网:WWW.HLMCU.COM
慧净小店:http://shop37031453.taobao.com/
慧净电子-做人人都买得起的 51 单片机开发板---真诚为你服务,基于 HJ-1G 开发板
{ delay(10); if(temp!=0xf0) { temp=P3; switch(temp) { case 0xed: key=4; break;
P0=table[num]; // P0=0xff;
dula=1; dula=0; P0=0xc0; wela=1; wela=0; } void main() { dula=0; wela=0; while(1) { P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); if(temp!=0xf0) { temp=P3; switch(temp) { case 0xee:
慧净电子网:WWW.HLMCU.COM
慧净小店:http://shop37031453.taobao.com/
慧净电子-做人人都买得起的 51 单片机开发板---真诚为你服务,基于 HJ-1G 开发板
temp=temp&0xf0; if(temp!=0xf0) {
delay(10); if(temp!=0xf0) {