当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]引言随着嵌入式系统的发展,嵌入式软件设计向软件平台靠近,单片机软件设计不再是单一线程结构方式,而是逐步采用多任务的设计思想。实时操作系统使得实时应用程序的设计、

引言

随着嵌入式系统的发展,嵌入式软件设计向软件平台靠近,单片机软件设计不再是单一线程结构方式,而是逐步采用多任务的设计思想。实时操作系统使得实时应用程序的设计、扩展和维护变得更容易,无需大的改动就可以增加新的功能。然而随着任务的增加,要求输入的数据也会增加,类型也呈多样化。如果仍然用矩阵式扫描键盘,势必浪费单片机巨大的资源,且增加了成本。若用PC机标准PS/2键盘取而代之,将可解决以上矛盾。本文介绍基于实时操作系统Small RTOS51的PS/2键盘驱动程序的设计,具有响应快,移植性强,占用资源少等优点。

1 驱动的设计

驱动的实现一般可用以下几种方法:① 使用任务编写;② 使用消息编写;③ 使用信号量编写。PS/2键盘既不需要CPU周期服务,又不具有自己的中断设备,但为了实现实时响应,本驱动采用中断方式,利用全局变量传递数据,并在中断服务程序唤醒处理任务。

1.1 中断服务程序

驱动程序使用中断接收按键的部分扫描码,并使用全局变量缓存它们。使用一个任务处理这些扫描码来获取按键键值。通过对各种按键扫描码的分析,可将扫描码分为下列3种情况:a. 普通按键。通码为唯一标识自己的1个字节;断码为2个字节。第1字节为F0H,第2字节为通码。b. 功能键,如CTR。通码第1字节为E0H,第2字节为区别于其他按键的标识码;断码有3个字节,分别为E0H、F0H和标识码。c. 组合键,如G。得到G的按键顺序是:按shift,按g,释放g,最后释放shift。所以扫描码应为:12H,34H,F0H,34H,F0H,12H。

由以上分析可知,无论是何种按键,只要知道扫描码的前两个字节,就可以确定哪个按键或那些组合键被按下,并可通过查表找到相应的ASCII码。这样,只接收2个字节,就可大大减少中断次数,节省CPU资源。中断程序如下:

void Receive() interrupt 0 {

IE0=0;

dat>>=1; //接收数据,低→高

if(sda) dat|=0x80;

count++;

if(count==num) {

if(num==9) {

temp[0]=dat;

num=20;

}

else {

temp[1]=dat;

IE&=0xfe;

count=0;

num=9;

OSSendIntSignal(KeyCodeTranst_ID);

OSIntExt();

}

}

}

程序首先按照Small RTOS51的中断编写规范调用宏OS_Int_ENTER()。如果用户禁止中断嵌套管理(EN_OS_Int_ENTER=0),那么不必调用宏。接着,接收扫描码的前面两个字节,并存放在数组temp[2]中。当判断接收完毕(count==20)时,就要将接收中断关闭,以拒绝接收键盘发送后面的扫描码。 然后, 直接调用 OSSendInt? Signal(KeyCodeTranst_ID),使键码转换处理任务就绪。最后,根据Small RTOS51的中断编写规范调用函数OSIntExt(),通知退出中断服务程序并进行任务切换。

1.2 键码处理任务设计

这个任务完全可以在中断服务中完成,但为了避免接收扫描码的后面部分,在接收到前两个字节后,必须进行一定的延时。若放在中断服务中完成,会增加中断延时。键码处理任务设计主要完成从中断服务程序返回的扫描码的前两个字节,判断按键属于何种类型,并通过查表找到相应的ASCII码。任务源代码如下:

KeyCodeTranst() {

uint8Key;

PS2Int();//键盘初始化

OSQCreate(Key_ASCII,16);//创建存放按键ASCII码数据队列

while(1) {

OSWait(K_SIG,0);//等待按键

IE&=0x0fe;//屏蔽无用扫描码

if(temp[1]==0xf0&&temp[0]!=0xe0)Key=noshift[temp[0]];//键码转换

else if(temp[0]==0xe0&&temp[1]!=0xf0)Key=noshift[temp[1]];

else if(temp[0]==0x12||temp[0]==0x59)Key=addshift[temp[1]];

OSWait(K_TMO,5);//延时5个滴答

IE0=0;

IE|=0x01;//准备接收下一个按键

OSQPost(Key_ASCII,Key);//发送ASCII码

}

}

任务首先创建一个存放按键ASCII码的消息队列,然后对PS/2键盘初始化PS2Int()。初始化中,可以简单地开始所使用的中断,也可以在该函数中加上其他一些用户程序。

下面服务函数开始进入一个无限循环中。OSWait(K_SIG,0);是等待信号,当中断程序接收完扫描码时,会通过函数OSSendIntSignal(KeyCodeTranst_ID)唤醒该任务。此时数组temp[2]中存放当前按键扫描码的前两个字节:

若temp[1]为0xf0,且temp[0]不等于0xe0,则说明是普通按键,可通过查表noshift[temp[0]],找到相应的ASCII码;

若temp[0]为0xe0且temp[0]不等于0xf0,则说明是功能键,可通过查表noshift[temp[1]],找到相应的ASCII码;

若temp[0]为0x12或0x59,则说明是shift与一个普通键的组合键,可通过查表addshift[temp[1]],找到相应的ASCII码。

随后关接收按键中断,调用函数OSWait(K_TMO,5),延时5个时钟周期,以屏蔽按键剩余的扫描码。最后,将得到的按键ASCII码发送到消息队列中去,等待其他任务作相应的处理。

2 驱动的移植及使用

本驱动程序用51系列单片机的资源,使1个中断(外部中断0)和1个普通I/O口,分别与PS/2接口的CLK和SDA相连。在移植时必须首先在config.h中定义CLK和SDA,例如:

SbitSDA=P1^0;

SbitCLK=P3^2;

还要定义键码处理任务的优先级,#define KeyCodeTranst_ID 0。这些定义后,就可将驱动程序移到操作系统中使用。使用时不必知道具体如何实现,直接调用 OSQPend(&Val_Key,Key_ASCII,0)获取按键的ASCII码,再根据ASCII码作相应处理即可。

结语

本驱动程序没有对PS/2键盘作初始化。因为只要通电,PS/2键盘就会按默认设置进行初始化。既然没有初始化,小键盘只能作相应的功能键使用,而不能作数字键使用。有兴趣者可将初始化程序补充完整。

参考文献

[1] 陈明计,等.嵌入式实时操作系统Small RTOS51原理及应用.北京:北京航空航天大学出版社,2004.

[2] 张晓辉.嵌入式操作系统驱动程序开发. 安徽电气工程职业技术学校学报,2005(3).

[3] 郑炜,等.单片机系统中PS/2键盘驱动程序设计.单片机与嵌入式系统应用,2005(4).

[4] 李华,等. MCS-51单片机实用接口技术. 北京:北京航空航天大学出版社,1993

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

与全球一线标准治疗方案泰瑞沙单药治疗相比,联合疗法降低疾病进展风险38% 新加坡2023年9月12日 /美通社/ -- III 期临床研究FLAURA2的阳性结果显示,在局部晚期(IIIB-IIIC 期)或转移性(IV...

关键字: BSP AI FOR SMALL

(全球TMT2022年8月15日讯)全球电子设计制造大厂USI环旭电子运用优化电路板设计与线路布局技术(Placement & Layout Optimization Technology),发展出Ultra-...

关键字: FACTOR FOR SMALL ULTRA

4月15日消息,据外媒报道,亚马逊日前证实,其位于美国加州仓库的一名管理人员因感染新型冠状病毒死亡,这是其首位因感染病毒而死亡的员工。到目前为止,亚马逊仓库和配送中心已经有70多例确诊感染病例。 据亚

关键字: 亚马逊 电子 EMI SMALL

Small cell 随着4G通信时代的到来,数据通信已取代话音成为运营商的主流业务。来自中国移动的一份报告称,未来超过50%的业务将会发生在室内,因此运营商必须找到室内覆盖的有效方法。

关键字: AVAGO SMALL 射频前端 CE

北京时间3月30日早间消息,据国外媒体报道,亚马逊公司位于美国史丹顿岛的仓库工人计划本周一举行罢工,提醒公司注意新冠病毒疫情期间,那些继续留在工作岗位上的工人缺乏病毒防护的问题。 这座仓库名为JFK8

关键字: 亚马逊 防护 隔离 SMALL

这是我从1月6日开始主持天极网论坛嵌入式开发版以来第一次发表文章,加上以前琐碎的文章共计30篇。研究的越多就越感觉自己懂的太少,其实在驱动开发方面我还是个菜鸟,我是想再次抛砖引玉,让做驱动有N年经验的人奉献一点出来,让大...

关键字: WinCE Windows 驱动程序开发

近日,物联网(IoT)成为技术产业的热门话题。这一术语描述的是一种生态体系,在该体系中,消费电子产品与电器可以联网实现相互通信。随着数以亿计的IoT设备之间建立“互联”,诸多权威专家,甚至技术创...

关键字: 物联网 SMALL CE IoT

针对Cellular的领域,LitePoint为您详解在测试时需要重点考虑的因素以及解决方案。Small Cell是一种低发射功率,小范围覆盖的基站设备。Small Cell作为3G/4G宏蜂窝的补充,能够使运营商以...

关键字: 无线测试 CE SMALL TIMES

Small Cell是一种蜂窝网接入点,在网络扩容、绿色节能、提高室内覆盖和宏小区性能等方面发挥了越来越突出的作用。随着数据业务的蓬勃发展,Small Cell越来越得到运营商的青睐。Small Cell的核心技术是...

关键字: 小基站 智能化 CE SMALL

O 引 言随着以计算机技术、通信技术和软件技术为核心的信息技术的发展,嵌入式系统在各个行业中得到了广泛的应用。嵌入式系统已成为当今IT行业的焦点之一。而在嵌入式系统中

关键字: 驱动程序开发 嵌入式LINUX 矩阵键盘驱动 INPUT
关闭