51单片机C语言编程如何实现长按按键实现数值的累加

作者&投稿:夏物 (若有异议请与网页底部的电邮联系)
编程特惠来袭,价低质优购得安,服务完善心更甜~ 这个可以用定时器来做,比如检查某键,按键时间超过2秒后一个变量开始累加知道键释放为止。实现方法如下:
#include<reg51.h>
#define
uint
unsigned
int
#define
uchar
unsigned
char
uint
v=0,time=0;
sbit
key=P1^0;
void
t0isr()
interrupt
1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if((key==0)&&(time>40)v++;
//如果按键时间超过2秒且键未释放,变量+1
if(key==1)time=0;
//如果键释放,时间复位
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}


单片机程序 用C语言编程
主函数里添加 struct timer second;在你的getint函数里添加计时器 second.expire=N;second.function= getint;second.expire=N;add_timer(second);就会实现N秒自动执行你的getint函数 在函数里对灯操作 void getint(){ for(次数){ set_gpio(led_gpio,ON);MDELAY(1000);set_gpio(led_gpio,OFF);...

单片机C语言一程序问题
while(!input){ DataPort=dofly_WeiMa[i]; 这部分带有松手检测 如果按键按下 因为单片机速度很快 刚开始i是位0的 但是因为有松手检测 所以可能i++好几下了 然后你松后了之后 退出松手检测 那么你显示的值当然就是跳跃的啦 LATCH2=1;LATCH2=0;DataPort=dofly_DuanMa[i];就说这里吧 ...

单片机C语言程序
它整个的功能就是一个延时,等待单片机处理完其它任务,这样写程序符合程序的规范化和可读性的要求,void是说明返回值是空的,即没有返回值,可以不写,LED=~LED;\/\/是取反,每次执行这条语句就会使其值取反,若上次是0,则执行后其值变为1,DelayMS(100);就是调用了上面的子函数,代表延时100MS ...

C语言与单片机C语言的区别 急求
2、C是一门语言,由对应平台的编译器编译成对应平台汇编的程序,各平台的汇编不一样,当然编译器也不一样DOS上的TC2TC3 WINDOWS上的VC8051的C51都有自已的编译器。具体区别是由编译器决的,只能参考对应的编译手册,即使同种平台不同的编译器对C的扩展也有不同。3、单片机c语言编程是基于C语言的单片机...

这个单片机程序该怎么用c语言写 说说每一步是干什么的 谢谢
uchar keyval,num;sbit skey=P1^0; \/\/独立键P1.0 void delay(uchar a){ uchar i,j;for(i=0;i<a;i++)for(j=0;j<125;j++);} uchar kbscan(void) \/\/矩阵键扫描程序 { unsigned char sccode,recode;P3=0x0f; \/\/发0扫描,列线输入 if ((P3 & 0x0f) != 0x0f) ...

单片机的C语言编程
flag=1; \/\/置标志位通知主程序1s已到 } \/***以下为数码管扫描部分***\/ \/\/因为放在该中断程序中,故每5ms扫描一位数码管 P2=0xff; \/\/先关闭所有数码管 P0=dispcode[dispbuf[dispcount]]; \/\/先确定相应数码管的段码,送入段码 P2=dispbit[dispcount]; \/\/送入位码 dispcount++; \/\/下...

单片机C语言编程
首先肯定你的单片机能够扑捉到你的脉冲:那么:设置10ms定时器,在此时间内判断x、y值,然后判断x*x是否大于y即可。另外没有硬件电路图是没法帮你编程的,比如你的脉冲宽度?脉冲接入管脚,电机控制管脚,等待。

一个简单的单片机c语言程序问题
,y='A'; \/\/定义x='a'即0x61. y='A'即0x41 LED_BIT = 1; \/\/将p1口第6引脚拉为高电平。if(x > y) p0=x; \/\/如果x>y.即如果 'a'>'A' ,则p0口输出为0x61,即01100001 else p0 =y; \/\/反之,则p0口输出为0x41 while(1); \/\/死循环。不然单片机程序就跑飞了。} ...

求 单片机简单的C语言程序例子(越多越好)
7. C语言源程序#include <AT89X51.H>sbit K1=P3^0;sbit L1=P1^0;void main(void){while(1){if(K1==0){L1=0; \/\/灯亮}else{L1=1; \/\/灯灭}}} 3. 多路开关状态指示 1. 实验任务 如图4.3.1所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个...

单片机问题c语言编程
这个简单,你把联系方式给我,我把程序给你!算了吧,我还是直接贴给你吧 include<reg51.h> include<intrins.h> define uchar unsigned char define uint unsigned int sbit sda=P2^3;sbit scl=P2^2;bit flag;uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,...

临江市19893135228: 51单片机C语言编程如何实现长按按键实现数值的累加 -
夹祝盐酸: 先设置一定时器,比如定时0.5s加一,再设置一个标志位,当加数达到一个标准值时,定时器定时改为更短时间. 关键是设置定时器,标志位,在中端程序检验按键的电位.

临江市19893135228: 51单片机C语言控制按键蜂鸣器 -
夹祝盐酸: unsigned char flag=1; //定义上升沿ready标志 while(1) {if(key1&&flag) // 默认key1下拉至GND,若产生上升沿,则响一次,同时清零标志 {SPK=1;delay();SPK=0;flag=0;}if(!key1) { flag=1;} //检测key1是否归零 准备第二次上升沿,是,则标志位置1...... } 仅供参考

临江市19893135228: 51单片机c语言时钟,长按键与短按键的处理程序 -
夹祝盐酸: 其实原理都一样,只不过间隔时间,长按来实现你就间隔久些再做判断,短按则反之

临江市19893135228: 51单片机中如何按下按键时数码管正常显示而不闪烁,并且实现长按连续 -
夹祝盐酸: 你好,我也遇到这样的问题,经过一周的研究,问之前的前辈得出结果,希望对你有帮助 char scan_k(char k) { int i=0;//定义一个变量用来累计长按的时间 if((KEY1&&KEY2&&KEY3&&KEY4&&KEY5&&KEY6)==0)//如果有按键按下 { while(!KEY...

临江市19893135228: 请问大佬,STC89C51单片机怎么编程实现长按开关一秒实现一组LED花样转换为另一组. -
夹祝盐酸: if(~key) { delay(10);//去抖 if(~key) { delay(500);//短按,时间可在 //200-500毫秒之间调整 if(key)//如果释放就是短按 { //此处执行你的程序 } else//如果没释放按键 { delay(500);//再延时500毫秒 if(~key)//如果还没释放 while(~key);//等待释放 { //此处放入长按1秒后 //需要执行的程序 } } } }

临江市19893135228: 单片机按键短按和长按的程序
夹祝盐酸: 这么简单还用问?不能给你程序,只能给你思路. 设置定时器(建设100ms),在设置一个变量x,(100ms自加1) 在主循环中判断按键是否按下,并判断x的值大小; 假设x每隔100ms加1 y是按键状态(为1表示按下,为0表示未按) z记录按键状态的(初始值0) b记录长安a记录短按 eg: if(!z) { if(y) { a=1; z=1; } } elseif(x>10)//1s { b=1; }

临江市19893135228: 51单片机键盘按键连击程序 -
夹祝盐酸: 写个思路吧:你现在是不是这样的:按键按下,消抖,是否真正按下,如按下 处理下+1还是怎么样..改成:按键按下,消抖,是否真正按下,如按下 延时一小会(延时多少我不清楚,这个多试试吧,),是否松开?没有,调用连加子程序 也不能加太快了,太快了没等显示出来都加过头啦.如果松开,就不调用了,做只加1的处理.具体情况具体分析. 我写了一部分,应该很接近你的要求了,就是写了好多行,只写出了hour的短按加1长按连加,其它的自己搞搞看,我已发你QQ邮箱,等你弄好了,可以发一份程序给我吗,我喜欢你的编程风格,很标准.

临江市19893135228: 下面51单片机C语言程序怎么改成按钮按一下才执行,再按一下就停止,如此反复??? -
夹祝盐酸: #include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char #define ulong unsigend long sbit aj=P2^0;//按键uchar Flag=0;uint js_flag=0;uchar code tab1[]={3,2,0x55,0xaa};uchar code tab2[]={3,8,0xfe,0xfd,0xfb,0xf...

临江市19893135228: C51单片机 单个按键 短按抬起和长按两功能程序怎么写 -
夹祝盐酸: 按键按下后启动定时器!在2个定时器中断内分别控制两个LED灯的开关!

临江市19893135228: 怎样实现单片机按键双按、长按识别功能? -
夹祝盐酸: 过滤抖动的问题 第一次发生接触时,设置一个flag表明上次所有btn状态,然后定时器启动.然后在main loop进行检测,一直检查刚才那个按下的btn,如果发现到定时器将要到时刻都还在接触状态,那么应该是长按,重置定时器.如果出现了一定间隔的断开,那么等待直到定时器中断发生时,检查flag中btn状态和现在btn状态,则可以发现是否双click--- 另外,20分不能吸引更多人回答了...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网