❶ 关于51单片机键盘扫描函数。
是不是第一个函数调用后就进入死循环了,所以调用不了第二个函数
❷ 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。
❸ 单片机按键扫描程序
KEY: MOV A,P1
CLR C
SUBB A,#1
MOV 20H,A
RET
这样得不到键值呀
改:
KEY: MOV A,P1
SETB C
MOV R7,#8
LPKEY:
RRC A
JNC OUTK1
DJNZ R7,LPKEY
OUTK1: DEC R7
MOV 20H,R7 //如果20H=255则表无键
RET
❹ 给单片机编程为什么要编写一个按键扫描的程序啊
其实按键可以有好几种工作方式,比如用中断,这个是不用扫描的,还有就是扫描方式,其实扫描就是不时的检查按键所对应的寄存器的值有没有改变,如果改变,说明按键有动作,没变说明按键没动作,为了做到及时反应按键的状态,就得不停地对按键进行扫描。。。
❺ 简述单片机键盘扫描工作过程
这个思路还是比较简单的,实现起来方法很多,首先判断有没按键按下,再过一个按键抖动时间再次检测,如果还是按了,就查键值。你讲的是扫描过程,这个实现起来方法也很多,行列式的可行处列入,也可列出行入,还要看你是在按键按下时处理还是在按键弹起是处理。
❻ 51单片机中按键扫描的问题
❼ 单片机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;//如果没有扫描到按键,认为是误触发,返回空键值
}
❽ 单片机键盘扫描。
兄弟,你好
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;这一句删了,
你试一下,祝你成功
❾ 单片机什么是用键值的方式解决按键扫描问题,简单解说下 单解说下
左边的图,每个按键对应于一个IO口,按下按键时相应的IO口被拉到低电平,其IO寄存器位回读为“0”。因此根据回读到的哪个寄存器位为0就能知道哪个键被按下。这种方式适用于规模较小的键盘。
右边的图是常见的行列扫描接法。当单个行扫描管脚拉低后,回读列扫描管脚的状态,即可知道该行有哪几个按键被按下。逐一拉低各个行扫描管脚并回读列管脚状态,即可获得整个矩阵键盘的按键状态。这种方式适用于规模较大的键盘,有效节省珍贵的IO口。
❿ 单片机行列式键盘扫描原理
单片机行列式键盘扫描原理如下:
1、行线P10~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P10~P13)全部输出低电平,此时读入列线数据,若列线全为高电平则没有键按下,当列线有出现低电平时调用延时程序以此来去除按键抖动。
2、延时完成后再判断是否有低电平,如果此时读入列线数据还是有低电平,则说明确实有键按下。最后一步确定键值。当判断确实有键按下之后,行线轮流输出低电平,根据读入列线的数据可以确定键值。
3、单片机将P10输出为低电平,其它P11~P13输出高电平,此时读取列线的数据全为高电平,说明没有在第一行有键按下;其次,单片机将P11输出低电平,其它P10、P12、P13仍为高电平。
4、此时再来读取列线数据,发现列线读到的数据有低电平,数值为1011(0x0B),如果我们的键盘布局已经确定,那么0x0B就代表S5的值了。转到S5键功能处理子程序就可以达到目的。
(10)单片机按键扫描扩展阅读
单片机学习方法
1、基础理论知识学习
基础理论知识包括模拟电路、数字电路和C语言知识。。在学习单片机之前,觉得模拟电路和数字电路基础不好的话,不要急着学习单片机,应该先回顾所学过的模拟电路和数字电路知识,为学习单片机加强基础。
2、单片机实践
准备一台电脑、一块单片机开发板、一套视频教程、一本单片机教材和一本C语言教材。电脑是用来编写和编译程序,并将程序代码下载到单片机上;开发板来运行单片机程序,验证实际效果。