① 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。
② 51单片机怎么把矩阵按键的检测变成一个函数
1、加个定时器功能,把矩阵键盘扫描编写成一个独立的函数。
、按键扫描程序,当扫描到有按键按下的时候,按键键的值写入缓冲区,继续扫描直到完成。
3、点击完成,就成功了。
③ 关于51单片机键盘扫描函数。
是不是第一个函数调用后就进入死循环了,所以调用不了第二个函数
④ 51单片机按键检测问题
三个二极管、一个电阻,确实是一个与门。
电阻的计算公式,正确。
二极管的导通电压、电流,选择的基本合理。
可以进行实际电路的安装、测试。
实际上,现在的二极管,发光效率,逐年的提高,已经不用 6mA,就很醒目了。
不同颜色的二极管,导通电压,也有差异,选用较小的,才利于触发中断。
得进行反复实验,才能完成设计。
在程序中,注意不要使 P3.2 输出低电平,否则,会有较大的灌电流出现。
⑤ 关于51单片机4*4矩阵按键扫描代码的问题
连续4次判定是为了消抖,也就是防止因各种不同原因(例如触点临界状态、电磁干扰)造成的误判定。
⑥ 51单片机中阐述4*4行列式按键的扫描原理
如图:单片机4个IO线如P1.0至P1.3作为输出,4 个作为输入如P1.4至P1.7,上面可以接16 个按键,这些按键都有是一端跨在一根输出线上,另一端跨在一根输入线上, 要是没有按键按下时,输入 状态和输出状态没有任何关系,这时单片机读输入线的状态,得到的结果全是1(默认或设定),若有按键按下,输出线的状态就会反映在输入线上。
先让输出线的一根线P1.0输出0,这时接这根线上的4个按键的某一个如S0被按下,在P1.3上就可以读到一个0,如果S1被按下,P1.4上就可以读到0,......从而可以确定4个按键有无按下,下一步,让输出线的另一根线P1.1输出0,如果S4按下,P1.3上就又可以读到一个0,
如果S5按下,P1.4上就又可以读到一个0........,又可以确定4个按键,4 根输出线分另输出0,就其可以确定16个按键
⑦ 51单片机矩阵键盘扫描问题
#include <intrins.h> //_nop_();所需头文件
/*************键盘扫描******错误*********/
void scan()
{
unsigned int media;
P2=0x0f;
_nop_(); //在这里延时一个或几个指令周期试试
P2=P2|0xf0;
key=P2;
}