完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
项目需要:
做了一个电子秤的项目,只有两个按键;要实现 :重量归零;关机;计时开始、暂停;计时归零;切换单位 这五个的功能。 于是我对其中一个按键的使用方法是: 1.短按清零(使用get_tare()函数) 2.长按关机 3.双击切换单位 话不多说,直接上代码(注意代码是在主循环里面的,我没有写出主循环) // on_off_key_pin 代表单片机的pa6引脚,这里贴出代码 #define on_off_key_pin _pa6 1 2 if(on_off_key_pin==0)//右键按下,on_off_key_pin为0,因为接地 { on_off_key_flag=1; on_off_count++; if(on_off_count>30)//按下这个按键,每次进入循环on_off_count会+1;on_off_count>30次,则表示长按 { on_off_count=30; on_off_long_edge=1;//长按标志位置1 sleep_f=1;//表示要关机(我要求的长按关机) on_off_key_flag=0; } } else { on_off_count=0; if(on_off_key_flag==1)//如果之前按下过,on_off_key_flag会置1,再抬起到这里 { on_off_key_edge=1;//右键抬起,短按标志位置1 //--------------下面是双击的代码--------- key_press_loop++; //-----------下面是双击的程序------------- /* 双击的思路就是:第一次按下后,开始利用中断计数,在规定的时间内 再按下一次 表明双击; 如果在按下一次后,规定的时间内没有再次按下,表明单次短按 */ if(first_flag==0)//第一次按下的标志位 { first_flag=1; key_flash_loop=0;//规定时间的计数器 key_press_loop++;//按下的次数 } else { if(key_flash_loop<8) //如果在规定时间内 { if(key_press_loop>1)//按下2次 { Double_click_edge=1;//双击的标志位 first_flag=0; key_press_loop=0; key_flash_loop=0; } } else//这里可以去掉 { } } on_off_key_flag=0; } } 再在下面贴出计时器的初始化以及中断函数,可以看我上一面博文 以BH67F52 5060/70 为例子(其实都是相通的) TM初始化 void time_init()//计时器初始化 { _stmrp=4; _stmc0=0b00110000; // Fh/64= 4Mhz/64=62.5Khz=16us _stmc1=0b11000001; // TimeCnt Mode _stmal=6250%256; //;6250/62.5Khz=0.10s=100ms _stmah=6250/256; _ston=1; _stmae=1; _mf0e=1; } TM中断 void __attribute((interrupt(0x10))) isr_time0(void) //这里是100ms进入一次该中断 { _stmaf=0; //----------------------------- if(first_flag) { key_flash_loop++; if(key_flash_loop>8) { first_flag=0; single_click_flag=1;//规定的时间到了,表明单击的标志位置1 } } } 最后再贴出部分使用 双击、单击 标志位的代码 if(on_off_key_edge && single_click_flag)//单击 { get_tare();//清零重量的函数 single_click_flag=0; } //******************************************************* if(Double_click_edge)//双击 { unit++;//切换单位 Double_click_edge=0; if(unit>1) { unit=0; } } |
|
|
|
只有小组成员才能发言,加入小组>>
3310 浏览 9 评论
2991 浏览 16 评论
3492 浏览 1 评论
9057 浏览 16 评论
4086 浏览 18 评论
1176浏览 3评论
604浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
597浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2334浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1895浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 18:44 , Processed in 1.189604 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号