‘壹’ PIC单片机如何实现按键功能
最简单的按键接法,就是按键一端接IO口,一端接地。IO口上拉输入,当你检测到低的时候,就是按键按下了。
用中断可以可以,不过一般按键多是用扫描的方式查询。尤其是按键矩阵的时候
。只是在低功耗唤醒是才使用中断
‘贰’ 单片机独立按键会相互影响吗
不会
在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其他按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入时与软件结构密切相关的过程。
对于一组键或一个键盘,总有一个接口电路与CPU相连。CPU可以采用查询或中断方式了解有无将按键输入,并检查是哪一个按键按下,将该键号送入累加器,然后通过跳转指令转入执行该键的功能程序,执行完成后再返回主程序。
‘叁’ 单片机 按键
/*程序中的aa为题目中的a*/
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitk1=P2^0;
ucharaa;
voiddelay(ucharx)
{
uchary;
while(x--)
for(y=115;y>0;y--);
}
voiddelay1(uintxx)
{
ucharyy;
while(xx--)
for(yy=115;yy>0;yy--);
}
voidmain()
{ucharbb=0;
aa=0;
while(1)
{P1=aa;//为了便于观察aa的变化
if(k1==0)//是否按下
{delay(10);//去抖
if(k1==0&&bb==0)//第一次按下
{bb++;
delay1(800);
if(k1==0)aa++;//长按
elseaa=0;//简单按下
}
elseif(k1==0&&bb!=0)//非第一次按下
{
bb++;
delay1(800);
if(k1==0)aa--;//长按
elseaa=1;非长按
}
}
}
}
‘肆’ 单片机实现按键功能函数
#include<reg51.h>
#defineucharunsignedchar
uchardat;
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
main()
{
bitflag=0;
while(1)
{
if(key1==0)
{
while(key1==0);
flag=~flag;
}
if(key2==0)
{
while(key2==0);
if(flag)dat++;
}
if(key3==0)
{
while(key3==0);
if(flag(dat--);
}
P0=dat;
}
}
‘伍’ 单片机中into口接一个独立按键有什么作用
一是可以当普通按键做输入用
二是可以当中断信号用,开启中断后比普通按键响应更及时,不用在程序中频繁查询按键状态。
‘陆’ 单片机设计中一个按键有多个功能是如何实现的
这很简单,1。如果有功能键这就不说了。2。用时间来区分。3。按规定时间里按下几次。4。连续按下“摩尔玛”。5。每按以下循环变换功能。6。在不同状态下时,按键执行不同功能。…………。
‘柒’ 单片机按键怎么实现长按和短按和组合键功能
是在实物开发板上实现吗?
长按和短按很好实现,当检测到有按键按下了,就开始计时,用定时器,检测到按键松开了,停止计时,然后根据计时的时间长短,确定是长按还是短按,比如,时间小于0.5秒为短按,超过3秒为长按,其余时间为无效,不够长按时间,就为无效按键,也不算是短按的。这样可以排除是随意按键的可能。
组合键就好办了,检测到同时按两个,三个,就为组合键,至于是什么功能,那由你自己定义了。
‘捌’ 51单片机按键实现点动与锁存切换功能
其实就是根据二号键来解释1号键的功能,那么用一个变量对应二号键,这个变量只有两种状态0和1,初始为0,当按二号键时变为1,再按二号键时变为0,如此循环变换。那么这个变量为0时,按1键是点动,变量为1时按1键就是锁存,这样就解决了你的切换功能。
‘玖’ 单片机的按键功能是什么
你们知道单片机的每个按键的具体功能吗?下面是我收集整理关于单片机的每个按键的具体功能的资料以供大家参考学习,希望大家喜欢。·
键盘的分类:
键盘分编码键盘和非编码键盘。
键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘;
而靠软件编程来识别的称为非编码键盘。
在单片机组成的各种系统中,用的最多的是非编码键盘。也有用到编码键盘的。
非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。
本文主要讨论矩阵键盘(独立键盘比较简单可以与此类比),下面是矩阵键盘的电路连接图。
如果单片机检测到的是抖动部分,则无法按键判断是否有效,所以我们需要加入防抖程序。
注:也可以通过硬件防抖,如上图(b)。
功能:矩阵键盘
(按相应的按键,数码管从0~F的显示)
单片机:AT89S52
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit DAT=P0^3;
sbit CLK=P0^2;
uchar temp,h;
void delay(uint); //延迟程序
void sendbyte(uchar); //数码管显示
void keyscan(); //按键扫描
uchar code tab[]={
0xed,0x09,0xbc,0x9d,0x59,0xd5,
0xf5,0x0d,0xfd,0xdd,0x7d,0xf1,
0xe4,0xb9,0xf4,0x74,0x00} ; //0-F, 全灭
void main (void)
{
sendbyte(16); //初始时数码管无显示
while(1)
{
keyscan(); //按键扫描
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
void sendbyte(uchar byte)
{
uchar num,c;
num=tab[byte];
for(c=0;c<8;c++)
{
CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1; //右移位赋值
}
}
void keyscan()
{
/*第一行按键的扫描*/
P2=0xfe; //确定第一行的按键有效
temp=P2; //将其赋给一个变量(处理I/O口时,一般先赋值给一个变量,然后通过处理变量来处理I/O口)
temp=temp&0xf0; //用于检测第一行的哪个按键按下
while(temp!=0xf0) /*这个部分只要是用来消除按下抖动的*/
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0) //这个地方,已经消除了按下抖动,P2口的值已经确定
{
temp=P2; //将P2口得值赋给变量
switch(temp) //这个switch语句,用来确定哪一个按键按下时,数码管的显示值
{
case 0x7e:h=0;
break; //这个break很重要,表示如果有匹配的值,就跳出switch语句,防止程序跳不出来。
case 0xbe:h=1;
break;
case 0xde:h=2;
break;
case 0xee:h=3;
break;
default : h=16;
break;
}
while(temp!=0xf0) /*这个部分只要是用来消除释放抖动的*/
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h); //送给数码管显示
}
}
/*第二行按键的扫描*/
P2=0xfd;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0x7d:h=4;
break;
case 0xbd:h=5;
break;
case 0xdd:h=6;
break;
case 0xed:h=7;
break;
default : h=16;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h);
}
}
/*第三行按键的扫描*/
P2=0xfb;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0x7b:h=8;
break;
case 0xbb:h=9;
break;
case 0xdb:h=10;
break;
case 0xeb:h=11;
break;
default : h=16;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h);
}
}
/*第四行按键的扫描*/
P2=0xf7;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0x77:h=12;
break;
case 0xb7:h=13;
break;
case 0xd7:h=14;
break;
case 0xe7:h=15;
break;
default : h=16;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h);
}
}
‘拾’ 单片机按键可以设定不同功能吗
按键从按下到释放之间的间隔时间没有所谓的“可以无限长”,单片机在检测到这个按键被按下后即刻处理你给它的任务(根据你的程序设计思路编程)
键盘是通过CPU扫描,这个扫描时间段有你编写程序来合理运用,单片机处理速度快,合理利用中断处理不影响扫描和处理任务
按下按键几个小时后释放表达一个功能---当然可以的
按下按键表达一个功能,释放按键表达另外一个功能---当然也可以
但要注意:单片机检测“一直按不放”和“只按一下”有区别的,这对于编写程序区别很大