一类单片机基于事件的键盘处理程序
2014-01-06 21:16
351 查看
今天我们一起交流的就是这个"基于事件处理"的键盘处理程序.
"基于事件"这个想法是从VB程序中得到的.简单的说,VB程序的工作机制是:程序检测用户操作,检测到用户行为后,发出相应的消息给系统.但是到底对不对这个消息进行处理,则是由另外的消息处理程序进行.移植到我们这个单片机上,就是:单片机检测到了用户的行为,置相关的标志位(发出消息),但是到底对不对这个标志位进行理睬,则是由相应的处理函数决定的.
下面我们就看一看c语言的例子:
//申请一个存储按键状态的结构体
struct Keyboard
{
unsigned char S1_DOWN; //标志位,标志S1按键被按下
unsigned int S1_Count; //S1按键用来去抖的计数器
unsigned char S2_DOWN; //标志位,标志S2按键被按下
unsigned int S2_Count; //S2按键用来去抖的计数器
unsigned char Others_Down; //用来标志是否有除自身以外的其他按键按下
};
在下面的主程序中,我们示意一下这种按键处理怎么做,以及它的优缺点:
#define S1 P0^0 //定义S1为P0^0
#define S2 p0^1 //定义S1为P0^1
void main()
{
for(;;)
{
//****************** 消息产生 **************************************
if(S1= =0) //如果有S1按下
{
Keyboard.S1_Count++; //开始去抖计数
if(Keyboard.S1_Count>150) //这个值是自己系统的情况需要改变.
{
Keyboard.S1_DOWN=YES; //产生消息
}
if(S2_DOWN= = 0) //如果S2也按下
{
Keyboard.Others_DOWN=YES;
}
}
else
{
Keyboard.S1_DOWN=NO;
Keyboard.S1_Count=0;
Keyboard.Others_DOWN=NO;
}
} //The End Of If
//********************* 消息处理 **************************************
if(Keyboard.S1_DOWN= =YES&&Keyboard.Others_DOWN= =NO) //Only S1 down
{
//your code here
}
else if(Keyboard.S1_DOWN= =YES&&Keyboard.Others_DOWN= =YES) //组合键
{
if(Keyboard.S2_DOWN= =YES) //这是S1和S2都按下的情况.
{
//your code here
}
}
}
从上面来看,主程序是在一直循环的,可以方便的处理组合键的情况.在多个项目中使用都没有发现问题.
程序有写复杂,但是条理清晰.
相关文章推荐
- 排序算法——插入排序
- vc2010的ActiveX开发ocx,控件内引入对话框,对话框上的按钮响应建立过程(一)
- iOS tcpdump抓包方法
- 数据结构——栈和队列
- iOS系统网络抓包方法
- Ubuntu安装samba服务器
- 物联网系统设计——与单片机通讯
- JSP/PHP基于Ajax的分页功能实现
- 没钱买windows怎么办?
- 解决承载网络状态不可用问题
- ecosphere是什么意思_ecosphere的翻译_音标_读音_用法_例句 - 必应 Bing 词典
- 使用存储过程
- android restart reason机制
- opencv学习笔记1
- matlab编程与工程应用(第二版) 第一章 matlab简介 笔记
- 高性能服务器开发(链接)
- 模板模式
- 安卓打飞机游戏开发日志
- ACM(022)素数求和(2)
- 另一段攻击记录