导航:首页 > 操作系统 > 单片机键盘扫描

单片机键盘扫描

发布时间:2022-03-13 15:33:26

❶ 简述单片机键盘扫描工作过程

这个思路还是比较简单的,实现起来方法很多,首先判断有没按键按下,再过一个按键抖动时间再次检测,如果还是按了,就查键值。你讲的是扫描过程,这个实现起来方法也很多,行列式的可行处列入,也可列出行入,还要看你是在按键按下时处理还是在按键弹起是处理。

❷ C51单片机按键扫描

1.设置一个状态变量,如flag,定义flag=0为开状态,flag=1为关状态。
2.因为是按键(不是开关),所以实际上单片机读取的应该是脉冲形式的输入。设按键接单片机P01引脚,故可采用以下程序实现按键扫描
if(P01==0)//按下按键,进入下降沿
{
delay2();//20ms延时去按键前抖动
while(P01==0);//等待上升沿到
来,即按键弹起
flag=~flag;//flag取反,实现状态切换
}
void
delay2()//20ms延时子程序
{
unsigned
char
i,k;
for(i=0;i<100;i++)
for(k=0;k<100;k++);
}
注:根据按键的具体接法,若按下按键向单片机输入低电平,则采用以上程序;若按下按键向单片机输入高电平,则将两处P01==0均改为P01==1。

❸ 单片机4*4键盘扫描程序

//你要看得懂代码首先你要了解按键扫描的原理
//k_input是Px8个IO(x=0/1/2/3)
ucharkeys()
{
uchari,j,k_in,k_out=0xfe,jm;
k_input=0x0f//步骤1:Px7~Px4为低,Px3~Px0为高
if(k_input!=0x0f)//步骤2:是否有按键按下,如果有,Px的值将发生变化
yanshi(10);//软件消除抖动
else
return16;//如果没有,返回空键值

for(jm=0;jm<4;jm++)//扫描是哪个按键按下
{
k_input=k_out;//步骤3:从Px0这一列开始扫描
k_int=k_input;//这里应该是k_in
j=0x01;
for(i=0;i<4;i++)//步骤4:逐个扫描这一列上面的4个按键
{
if(~(k_in>>4)&j)//如果有按键按下,返回被按下的按键值
return(jm*4+i);
j=_crol_(j,1);//如果没有按键按下,依次扫描这一列的其他按键
}
k_out=crol_(k_out,1);//步骤5:移位,依次扫描另一列,直到检测到按键按下
}
return16;//如果没有扫描到按键,认为是误触发,返回空键值
}

❹ 单片机行列式键盘扫描原理

单片机行列式键盘扫描原理如下:

1、行线P10~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。

2、延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。最后一步确定键值。当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据可以确定键值。

3、单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;其次,单片机将P11输出低电平,其它P10、P12、P13仍为高电平。

4、此时再来读取列线数据,发现列线读到的数据有低电平,数值为1011(0x0B),如果我们的键盘布局已经确定,那么0x0B就代表S5的值了。转到S5键功能处理子程序就可以达到目的。

(4)单片机键盘扫描扩展阅读

单片机学习方法

1、基础理论知识学习

基础理论知识包括模拟电路、数字电路和C语言知识。。在学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾所学过的模拟电路和数字电路知识,为学习单片机加强基础。

2、单片机实践

准备一台电脑、一块单片机开发板、一套视频教程、一本单片机教材和一本C语言教材。电脑是用来编写和编译程序,并将程序代码下载到单片机上;开发板来运行单片机程序,验证实际效果。

❺ 关于51单片机键盘扫描函数。

是不是第一个函数调用后就进入死循环了,所以调用不了第二个函数

❻ 单片机键盘扫描怎么实现一键多用

1:键值记录
2:时间记录
3:是不是同一个键。
以上三个条件组合,一个条件用一个变量。

❼ 单片机的独立键盘扫描程序

这是keil 的语法规定的,在程序中不能有类似的P3^4的写法的。必须在主程序之前用sbit 命令定义成符号,所以,
if(P3^4==0)的写法是错误的,只有if(key==0)的写法才是正确的。
虽然编译是通过的,也没有报错,但是编译后的代码却是错误的。
如果懂得汇编代码,是可以查编译后的汇编代码,就知道是错的。

❽ 单片机键盘扫描。

兄弟,你好

void key()
{uchar key1,key2,key3; 这条语句后就key1=key2=key3=0了,肯定就一直在key()函数中一直不出来了撒,你的key1等是按键,怎么没有分配一个IO口呢

你如果这样的话就可以了
void key()
{uchar key1,key2,key3;
key1=key2=key3=1;这样的话就不会一直在key()中了

要想达到效果,估计你还的弄几个按键
添几句

sbit key1=P3^0;
。。。。。。
再把 uchar key1,key2,key3;这一句删了,

你试一下,祝你成功

❾ 单片机键盘扫描C程序

uchar code act[4]={0xfe,0xfd,0xfb,0xf7};
char scan_key(void)
{
uchar i,j,in,ini,inj;
bit find=0;
for(i=0;i<4;i++)
{ //额 ,先给你解释下4*4
P1=act[i]; //开通读取,并输出高电平
delay(10); //延时
in=P1; //读取单片机值并赋值给in,四种情况4个按键,
in=in>>4; //右移四位,去掉低位
in=in|0xf0; //位或运算,高四位补1,
for(j=0;j<4;j++)
{
if(act[j]==in) //判断具体哪个按键
{
find=1;
inj=j;ini=i;
}
}
}
if(find==0)return-1; //返回值 -1,return 1是正常返回,return -1是非正常返回 程序写法标准而已,即没按键
return(ini*4+inj); //i是判断高四位,j判断低4位
}

0 1 2 3 p1.0 p1.0为零 可判断0,1,2,3 如果开关0导通 p4即为0,即为1110 1110

4 5 6 7 p1.1 右移补1,得 1111 1110,及j为0

8 9 a b p1.2 开关1导通 p5为0, 即 1101 1110, 右移补1111 1101

c d e f p1.3 可判断j为1 同理可类推

p4 5 6 7

按这种思路4个端口只能实现4个开关4*4=16,2*2=4 得换思路,如果是因为端口紧张的话,可以用P3口,或者采用分压读取AD判断按键(AD键盘)

阅读全文

与单片机键盘扫描相关的资料

热点内容
局域网如何用ftp服务器配置 浏览:70
程序员惯性思考模式 浏览:439
如何在个税app上查身份证号 浏览:6
电视家app安装在电视上怎么安 浏览:889
怎么将pdf格式转化为图片格式 浏览:637
服务器拔掉raid卡怎么装系统 浏览:232
区域对称加密算法 浏览:245
数字转汉字php 浏览:733
安卓源码硬件驱动 浏览:208
痰证pdf 浏览:814
电脑怎么把word文档转pdf 浏览:867
程序员那么可爱有孩子了吗 浏览:480
安卓文字折叠怎么使用 浏览:885
创造一个app如何挣钱 浏览:801
php55vc11 浏览:642
抖音如何关闭苹果app充值 浏览:332
python多个文件调用 浏览:792
java算法和数据结构 浏览:465
糖豆视频的文件夹 浏览:654
php的头部文件一般在哪个文件里 浏览:560