登录
|
注册会员
开启辅助访问
设为首页
收藏本站
扫一扫关注官方微信
论坛
BBS
M币充值
M currency prepaid phone
M币获取
附件中心
搜索
search
全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
MCU资讯论坛
»
论坛
›
单片机论坛
›
51单片机论坛
›
简单有效的“单键复用”C51程序
更新自动建库工具PCB Footprint Expert 2023.13 Pro / Library Expert 破解版
简单有效的“单键复用”C51程序
[复制链接]
3501
2
gz_***
新手上路
发表于 2011-12-27 16:58:23
|
查看全部
|
阅读模式
本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要
登录
才可以下载或查看,没有帐号?
注册会员
x
在做我的MINI POV时,考虑到空间有限,必须简化结构,尽量减少按键数量,最后设计只用两个按键作模式转换和时间调整,这样,需将其中的一键“单键复用”,采用最常见的是“短击”、“长击”和“双击”三种模式。这样一来编程就成了问题。
然而,真不明白一个简单的“单键复用”的问题居然在网上还找不到合适的现成的程序,找到的也是一些高深莫测的(还用上什么状态机之类的)东西。没办法,还是自己动手吧!
nn=0; //“按下”时长计数器清零
mm=0; //“释放”时长计数器清零
if(set0==0){ //如按键set0按下
DelayMs(30); //延时(消抖)
if(set0==0){ //如按键set0按下
do { //“按下”计数器开始计数
nn++;
DelayMs(10);
}while(set0==0);
if(nn<50) //如“按下”计数小于设定值(短击的最大限制值)
{
DelayMs(30); //延时(消抖)
do { //“释放”计数器开始计数
mm++;
DelayMs(10);
}while((mm<40)&&(set0==1)); //当超出设定值或再次有“按下”事件发生,结束计数
DelayMs(25); //延时(消抖)
do { //待到第二次的“按下”事件结束
}while(set0==0);
if(mm<40) Key_Num=3; else Key_Num=1; //在释放期间提前结束的为双击,否则为短击
}
else
{
Key_Num=2; //”按下”计数大于设定值为长击
}
}
}
举报
回复
2 个评论
cai***
新手上路
发表于 2012-1-10 23:53:27
|
显示全部楼层
现在看到 单片机中 死延时 delay()就觉得烦,建议不要做这种死延时的函数,应该要有实时系统的概念,延时不能在这里死等。
举报
回复
支持
反对
追***
新手上路
发表于 2012-7-27 22:24:34
|
显示全部楼层
简单有效的“单键复用”C51程序 [复制链接]
gz_nick 当前离线
积分11精华0阅读权限10注册时间2011-12-27在线时间0 小时最后登录2011-12-27分享0主题5记录0好友0日志0相册0帖子5UID3575
5
主题 0
好友 11
积分
新手上路
新手上路, 积分 11, 距离下一级还需 39 积分贡献0 金币0 M币41 威望0 最后登录2011-12-27注册时间2011-12-27发消息 电梯直达 楼主
gz_nick 发表于 2011-12-27 16:58:23 |只看该作者 |倒序浏览
你知道吗,回帖只能获取1M币,发布主题帖是回帖的10倍,精华帖还可以额外获取金币奖励,如没有资源,可以去其他电子网站复制。
在做我的MINI POV时,考虑到空间有限,必须简化结构,尽量减少按键数量,最后设计只用两个按键作模式转换和时间调整,这样,需将其中的一键“单键复用”,采用最常见的是“短击”、“长击”和“双击”三种模式。这样一来编程就成了问题。
然而,真不明白一个简单的“单键复用”的问题居然在网上还找不到合适的现成的程序,找到的也是一些高深莫测的(还用上什么状态机之类的)东西。没办法,还是自己动手吧!
nn=0; //“按下”时长计数器清零
mm=0; //“释放”时长计数器清零
if(set0==0){ //如按键set0按下
DelayMs(30); //延时(消抖)
if(set0==0){ //如按键set0按下
do { //“按下”计数器开始计数
nn++;
DelayMs(10);
}while(set0==0);
if(nn<50) //如“按下”计数小于设定值(短击的最大限制值)
{
DelayMs(30); //延时(消抖)
do { //“释放”计数器开始计数
mm++;
DelayMs(10);
}while((mm<40)&&(set0==1)); //当超出设定值或再次有“按下”事件发生,结束计数
DelayMs(25); //延时(消抖)
do { //待到第二次的“按下”事件结束
}while(set0==0);
if(mm<40) Key_Num=3; else Key_Num=1; //在释放期间提前结束的为双击,否则为短击
}
else
{
Key_Num=2; //”按下”计数大于设定值为长击
举报
回复
支持
反对
返回列表
*
滑块验证:
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册会员
本版积分规则
发表回复
回帖后跳转到最后一页
回复
转播
评分
分享
打开支付宝扫一扫,最高立得1212元红包
搜索
本版
帖子
用户
热搜:
传感器
51串口程序
电子管放大器
夾式電表
夾式電流
Mentor论坛
打印机
版块推荐
百宝箱
My 布拉格
无边框Z9
Z9Max
Z9mini
nubia动态
问题 & 建议
资源分享
爱拍
同城会
牛仔生活
查看论坛所有版块>>
每日签到
论坛任务
摄影技巧
跳蚤市场
互助问答
论坛导读
申请内测
红包中心
每日摇一摇
活动中心
网站地图
官方旗舰店
图文热点
普中练习问题求助
要实现图二的任务一,但是只到一个数码管显示0时,按动按键没有反应,请问怎么回事,
VKL144A TSSOP48 点阵式液晶驱动芯片/低功
产品品牌:永嘉微电/VINKA 产品型号:VKL44A 封装形式:TSSOP48 概述 VKL144是
高抗干扰液晶显示驱动/省电液晶驱动IC/LCD
产品品牌:永嘉微电/VINKA 产品型号:VKL128 封装形式:SSOP44 概述 VKL128是一
VK2C23A/B LQFP64/48LCD驱动控制器/高抗干
产品品牌:永嘉微电/VINKA 产品型号:VK2C23A/B 封装形式:LQFP64/48 概述 VK2C
高抗干扰液晶驱动/点阵式液晶显示IC/VK2C21
产品品牌:永嘉微电/VINKA 产品型号:VK2C21D 封装形式:SOP16 概述 VK2C21D是
更多
精华推荐
普中练习问题求助
硬件仿真的疑惑
VKL144A TSSOP48 点阵式液晶驱动芯片/低功
高抗干扰液晶显示驱动/省电液晶驱动IC/LCD
VK2C23A/B LQFP64/48LCD驱动控制器/高抗干
高抗干扰液晶驱动/点阵式液晶显示IC/VK2C21
I2C通信接口段码液晶驱动芯片VK2C21C SOP20
VK2C21B SOP24高抗干扰LCD液晶段码驱动芯片
更多
社区学堂
普中练习问题求助
VKL144A TSSOP48 点阵式液晶驱动芯片/
普中练习问题求助
要实现图二的任务一,但是只到一个数码管显示0时,按动按键没有反应,请问怎么回事,
VKL144A TSSOP48 点阵式液晶驱动芯片/低功
产品品牌:永嘉微电/VINKA 产品型号:VKL44A 封装形式:TSSOP48 概述 VKL144是
高抗干扰液晶显示驱动/省电液晶驱动IC/LCD
产品品牌:永嘉微电/VINKA 产品型号:VKL128 封装形式:SSOP44 概述 VKL128是一
更多
客服中心
QQ:187196467
服务时间:周一至周日 8:30-20:30
在线客服
客服微博
产品咨询
售后中心
关注我们
关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
QQ:187196467
周一到周日 8:30-22:00 (全年无休)
7 x 24小时在线客服
手机版
Powered by
MCUZX!
X3.4 © 2008-2015
MCU资讯论坛
版权所有
京ICP备18035221号-2
客服QQ: 187196467
技术支持:
MCU资讯论坛
|
网站地图
快速回复
返回顶部
返回列表