单片机实现同一个按键的长按3s与长按10s操作

本文介绍了如何在单片机中扩展按键功能,实现单击、双击、长按3秒和长按10秒的操作。关键在于修改预定义和key_driver()函数,确保key_timer_cnt1使用unsigned int类型避免计数溢出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何实现单片机单击、双击、长按操作,可以参考别人文章:https://blog.youkuaiyun.com/qq997758497/article/details/80606710

在这里我主要将这个功能再进行扩展,实现按键的单击、双击、长按3s、长按10s操作。

需要修改的地方:

 

1、预定义:

//#define key_long_3   3    注释这行代码
#define key_long_3s	    3    //返回值,长按3s
#define key_long_10s	4    //返回值,长按10s

#define key_state_4 4   //定义一个新的状态值

2、修改key_driver()函数:

unsigned char key_driver(void)
{

	unsigned char key_return = key_no;
	
	
	key1 = ((keys_flag)&(0x00080000));//key_input;  //read the I/O states
	
	switch(key_state_buffer1)
	{
		case key_state_0:
			if(key1 == KeyOn())
				key_state_buffer1 = key_state_1; 
				//按键被按下,状态转换到按键消抖和确认状态//
			break;
			
		case key_state_1://消抖
			if(key1 == KeyOn())
			{
				key_timer_cnt1 = 0;
				key_state_buffer1 = key_state_2;
				//此时按键仍然处于按下的状态
			
基于51单片机,利用独立按键模块、LCD1602显示模块、DS1302实时时钟模块、DS18B20温度测量模块、蜂鸣器模块实现简易多功能时钟,具体功能要求如下: 简易多功能时钟具有闹钟和倒计时功能,并能够正确显示日期、时间、温度等信息,所有的信息显示均采用LCD1602显示模块完成; 通过DS1302实时时钟模块设置北京时间保持同步,并在工作工程中实时获取实时时间,通过DS18B20获取环境温度, K1按键用于切换测量状态及信息,需要切换如下信息: 1.日期信息:“Data: XXXX-XX-XX ”; 2.时间信息:“Time: XX:XX:XX ”; 3.温度信息:“Temp: XX.XX ℃ ”;闹钟设置:“Alarm: XX:XX:XX ”; 计时设置:“Timer: XXX min ”; K2按键用于增计数(仅在“闹钟设置”和“计时设置”模式下有用)。在相应的设置过程中每按下一次K2,对应位置上的数据增加1,到9之后变为0,对于设置位采用数据光标交替闪烁的方法显示,以表示该位数据正在被设置。K2按键按超过3s表示设置完成,切换回日期界面; K3按键用于移位(在“闹钟设置”和“计时设置”模式下的功能)和复位(其他模式下的功能)。在相应的设置过程中每按下一次K3,光标设置位值就移动一次(整体循环移动);在正常工作过程中,该按下K3用于清除蜂鸣器报警; K4按键用于进入和退出低功耗模式。使用过程中按下K4进入低功耗模式(设置对应LED点亮指示该状态),超过若干时间后(测试过程中可设置为10s),屏幕闪烁3次随机进入息屏状态;使用过程中再次按下K4(设置对应LED熄灭指示该状态),超过若干时间后(测试过程中可设置为10s),屏幕不发生变化。 当到达闹钟时间或者倒计时结束,蜂鸣器进入报警状态,K3按下清除报警,如果5s内未按下K3,则报警频率增加,直至K3按下;
最新发布
06-23
利用独立按键模块(见图1)、LCD1602显示模块(见图5)、DS1302实时时钟模块(见图9)、DS18B20温度测量模块(见图10)、蜂鸣器模块(见图11)实现简易多功能时钟,具体功能要求如下: 1.简易多功能时钟具有闹钟和倒计时功能,并能够正确显示日期、时间、温度等信息,所有的信息显示均采用LCD1602显示模块完成; 2. 通过DS1302实时时钟模块设置北京时间保持同步,并在工作工程中实时获取实时时间,通过DS18B20获取环境温度, 3. K1按键用于切换测量状态及信息,需要切换如下信息: 日期信息:“Data: XXXX-XX-XX ”; 时间信息:“Time: XX:XX:XX ”; 温度信息:“Temp: XX.XX ℃ ”; 闹钟设置:“Alarm: XX:XX:XX ”; 计时设置:“Timer: XXX min ”; 4. K2按键用于增计数(仅在“闹钟设置”和“计时设置”模式下有用)。在相应的设置过程中每按下一次K2,对应位置上的数据增加1,到9之后变为0,对于设置位采用数据光标交替闪烁的方法显示,以表示该位数据正在被设置。K2按键按超过3s表示设置完成,切换回日期界面; 5. K3按键用于移位(在“闹钟设置”和“计时设置”模式下的功能)和复位(其他模式下的功能)。在相应的设置过程中每按下一次K3,光标设置位值就移动一次(整体循环移动);在正常工作过程中,该按下K3用于清除蜂鸣器报警; 6. K4按键用于进入和退出低功耗模式。使用过程中按下K4进入低功耗模式(设置对应LED点亮指示该状态),超过若干时间后(测试过程中可设置为10s),屏幕闪烁3次随机进入息屏状态;使用过程中再次按下K4(设置对应LED熄灭指示该状态),超过若干时间后(测试过程中可设置为10s),屏幕不发生变化。 7. 当到达闹钟时间或者倒计时结束,蜂鸣器进入报警状态,K3按下清除报警,如果5s内未按下K3,则报警频率增加,直至K3按下; 要适用于51单片机和keil编程软件
06-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值