① 在单片机中怎样检测一个按键的击键次数
楼上讲得很对,就是先设一个变量,比如a,然后检测是否有按键按下,当有键按下时,就跳到相应的程序,执行a++,但是要注意一点,就是在按键按下的时候要加个延时函数去抖,在加一个语敬颂句判断按键是否按或稿团下(比如C语言的while语句)衫橘,只有这样,才能正确判断按键按下的次数。
② 单片机用p1口接8个发光二极管记录按键次数汇编程序
假设按键用P2.0,有上拉电阻,低电平吵顷有效;LED用高电平点亮
1、端口初始化
SETB P2.0
MOV P1,#0
2、检测按键变化,每按过一竖滚次,按键计数器KEYCOUNT就加1,
;查询按键是否按下
;若已按下,则等待按键弹起升纤陆,若未按下则等待按下
;按键未弹起就一直等待,否则执行
inc keycount
3、将按键计数器的值送往P1口
mov a,keycount
mov P1,a
③ 用单片机控制数码管显示按键次数
因为你这是在主函数里面实现的动态显示啊,当没有按键按下时,不用执行按键去抖的20ms时间,所以程序很快就执行完。这时数码管扫描并不会出现问题。
但是,当有按键按下后,要执行20ms的去抖,完成后才往下执行,这20ms的延时,对数码管动态显示来说,是很危险的,会出现显示不正常。
你这个程序,最好改成用定时器中断扫描,这样就不会产生类似的问题了。
你这个程序非要这样写,那你在按键扫描里面,也应该放上数码管显示程序,让数码管扫描间隔减小,至少要小于20ms才行。
④ 单片机按键计数
就是89C52单片机按键次数计数 在LCD1602上显示 ,每按一次计数一次,这个容易。而显示每分钟按多少谨燃好次,是每分钟统计一次呢?然后按每一分钟都显示出来?还是求平均每分钟按几次?只显示一个平均数?统计这个有什段正么用呢?还是为祥铅了编程故意找点事。
⑤ 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单片机 独立按键按下去 再放开才算按键一次 计算按键次数 程序应该怎么写
你好!
因为按键操作涉及寄存器配置和按键防抖,因此写了你也不一定用得上。而且你这个的逻辑比较简单,建议自己写。主要注意几个地方就可以了:
按键I/O口电平的配置:要结合硬件电路确认按键是低电平触发还是高电平触发。在程序中设置正确的I/O口电平。
I/O口的输入输出状态的配置:I/O口作为按键输入必须是准双向模式或输入模式,这个不同单片机配置寄存器方正型式不同但大同小异。
按键防抖:在按键按下时有时会有短暂的接触不良,因此会多次判断按键按下和断开,因此一般在按键按下或断开时增加几十毫秒的防抖处理虚清键,具体就是连续多个循环判断按键是否是一个状态,如果状态不变,再进行下一步差巧处理。
⑦ 单片机中怎样精确判断键被按下的次数
设置一个变量i,当按下一次按键就加1,旁梁宽这样就可以了。
你说的精确,其实是要准确判渣顷断按键是否按下,两个方法
,一个硬件消抖,另一个软件消抖,运亮一般用软件消抖,即延时+等待按键释放。
⑧ 《单片机应用技术》期末考试 数码管显示按键次数
数码管显示按键次数
通过按下按芦源键在数码管上显示按下陪让态的次数,进行1-10次的计数,当按下第十次的时候,归零。
一滑凳,结构图
二,程序
#include "reg52.h"
sbit C1 = P2^7;
sbit C2 = P2^6;
sbit C3 = P2^5;
sbit C4 = P2^4;
sbit SW1 = P3^4;
sbit SW2 = P3^3;
unsigned char SMGNoDot_CA[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
unsigned char s1=0, s2=0;
void DelaySMG(unsigned char t)
{
while(t--);
}
void DisPlaySMG_Bit(unsigned char pos, unsigned char dat)
{
P0 = 0xff;
switch(pos)
{
case 1:
C1 = 1; C2 = 0; C3 = 0; C4 = 0;
break;
case 2:
C1 = 0; C2 = 1; C3 = 0; C4 = 0;
break;
case 3:
C1 = 0; C2 = 0; C3 = 1; C4 = 0;
break;
case 4:
C1 = 0; C2 = 0; C3 = 0; C4 = 1;
break;
}
P0 = dat;
}
void DisPlaySMG()
{
DisPlaySMG_Bit(1, SMGNoDot_CA[s1]);
DelaySMG(100);
DisPlaySMG_Bit(2, 0xbf);
DelaySMG(100);
DisPlaySMG_Bit(3, 0xbf);
DelaySMG(100);
DisPlaySMG_Bit(4, SMGNoDot_CA[s2]);
DelaySMG(100);
}
void Scan_Keys()
{
if(SW1 == 0)
{
DelaySMG(200);
if(SW1 == 0)
{
while(SW1 == 0)
{
DisPlaySMG();
}
s1++;
if(s1 == 10)
{
s1 = 0;
}
}
}
if(SW2 == 0)
{
DelaySMG(200);
if(SW2 == 0)
{
while(SW2 == 0)
{
DisPlaySMG();
}
s2++;
if(s2 == 10)
{
s2 = 0;
}
}
}
}
void main()
{
while(1)
{
DisPlaySMG();
Scan_Keys();
}
}
三,流程图
⑨ 单片机中怎么样实现按键按下计数
主函数
void main (void)
{
unsigned char num=0;
KEY_ADD=1; //按键输入端口电平置高
KEY_DEC=1;
while (1) //主循环
{
if(!KEY_ADD) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_ADD) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_ADD);//如果确认按下按键等待按键释放,没有释放则一直等待
{
if(num<9) //加操作
num++;
}
}
}
if(!KEY_DEC) //如果检测到低电平,说明按键按下
{
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY_DEC) //再次确认按键是否按下,没有按下则退出
{
while(!KEY_DEC);//如果确认按下按键等待按键释放,没有释放则一直等待
{
if(num>0) //减操作
num--;
}
}
}
//主循环中添加其他需要一直工作的程序
}
}