当前位置:文档之家› Qt_Embedded环境下嵌入式键盘驱动的实现

Qt_Embedded环境下嵌入式键盘驱动的实现

Qt_Embedded环境下嵌入式键盘驱动的实现
Qt_Embedded环境下嵌入式键盘驱动的实现

—254

— Qt/Embedded 环境下嵌入式键盘驱动的实现

张 萍,徐 晶

(华中科技大学电子信息与工程系,武汉 430074)

摘 要:描述了基于嵌入式Linux 和Qt/Embedded 的手持终端的键盘驱动的设计与实现。依据嵌入式手持设备键盘的工作特点及其驱动实现难点,采用了一种将键盘驱动分解成底层驱动模块和上层文本输入模块的双层设计方案,且在实际设备中予以实现。 关键词:嵌入式终端;Linux ;Qt/Embedded ;键盘驱动;文本输入

Implementation of Embedded Keyboard Driver

in Qt/Embedded Environment

ZHANG Ping, XU Jing

(Electronic and Information Department, Huazhong University of Science and Technology, Wuhan 430074)

【Abstract 】This article discusses the design and implementation of keyboard device driver based on embedded Linux and Qt/Embedded. Based on the working process and keyboard driver characteristics, the article divides the keyboard driver into two modules: bottom device driver module and upper text input module.

【Key words 】Embedded device; Linux; Qt/embedded; Keyboard driver; Text input

计 算 机 工 程Computer Engineering 第33卷 第11期

Vol.33 No.11 2007年6月

June 2007

·开发研究与设计技术·

文章编号:1000—3428(2007)11—0254—02

文献标识码:A

中图分类号:TP334

嵌入式系统(Embedded System)无疑是当今最热门的概念之一。在嵌入式手持设备中,高性能、高可靠性GUI 的支持显得越来越重要。就现有的发展趋势看,越来越多的大型企业和组织开始选用Qt/Embedded ,包括Motorola 、Sharp 和IBM 等。在中国,作为TD-SCDMA 领头企业之一的大唐,也已经选择了Qt/Embedded 作为开发基于Linux 的移动电话的开发平台和图形用户界面。

作为一种和图形用户界面的交互手段,同时,也作为一种重要的数据输入方式,嵌入式键盘也起着举足轻重的作用。由于嵌入式系统具有功耗低、体积小、专用性强等特点,因此要求嵌入式键盘具有特殊的工作方式和特定的驱动设计。

本文通过系统地研究键盘工作原理,以及Linux 下在不同体系之间键盘驱动的接口和Qt/Embedded 下键盘驱动的接口[1~5],最终完成了嵌入式手持设备的键盘驱动的双层设计与实现。这种双层模块的设计方案,不仅取消了扫描码到键盘码、符号码的转换,同时也消除了对键盘模式的判断。

1 普通键盘驱动的不足

普通键盘一般工作在UNICODE 模式,并且应用程序也都接收符号码。这样一来,一个按键动作的产生,将要经过至少2次模式判断和2次码值变换,这对于一个嵌入式键盘而言是极其无效。因为用于表示一个基本按键的键盘扫描码由1个字节的接通扫描码和2个字节的断开扫描码组成,单单一个键的按下与断开,键盘最多要产生一系列多达6个字节的扫描码序列。再经过2次的模式判断和码值变换,不仅会降低整个系统的响应速度,也会占用更多的系统资源。资源有限性是嵌入式系统最基本的特征,因此这样的键盘及驱动是无法在嵌入式手持设备上使用的。

嵌入式系统的资源有限性也表现在对物理体积的最大压缩上。为了限制键盘体积,26个英文字母按字母表顺序3个或4个一组依次排列在2~9这8个数字键上,并与阿拉伯数字进行复用。这样每个按键同时表示了4~5个包括英文字母和数字在内的不同的键值。那么,原来的键盘驱动的处理过程,尤其是扫描码到键盘码、再到符号码的转换过程会变得极其复杂,因为这时出现了同一个扫描码对应多个键盘码和符号码的情况。这样势必会造成大量不必要的系统开销。

2 嵌入式键盘驱动的双层设计思想

本文描述的嵌入式键盘驱动采用了底层驱动模块和上层文本输入模块的双层模块设计方案。与普通键盘不同的是,嵌入式系统硬件平台上并没有键盘扫描芯片,本文采用了复杂可编程逻辑器件(CPLD)。CPLD 键盘逻辑主要提供扫描、 消抖和编码的硬件功能。在双层模块设计方案中,底层驱动模块只负责简单的读取CPLD 板级寄存器的扫描码,而不经过键盘码、符号码的转换,直接传递给上层应用程序。并且由CPLD 板级寄存器提供的经过编码的扫描码只有5位有效值,远远少于原来的3个字节,节省了系统资源。同时取消键盘模式的判断,提高键盘驱动的处理效率。

而作为双层模块设计方案中的上层文本输入模块将实现扫描码到图形用户接口Qt/Embedded 中Qt 键值的直接转化和文本输入的过程。这一直接转化过程将实现10个数字按键可以输出10个阿拉伯数字,26个大写英文字母,26个小写英文字母及常用标点符号等70多个不同符号。

3 嵌入式键盘驱动的双层设计实现

3.1 底层驱动模块设计实现

键盘的初始化是由TTY 设备的初始化开始的。由于TTY 设备在初始化时已经注册了相应的设备文件,因此,键盘的

基金项目:国家“863”计划基金资助项目(2005AA420050-05) 作者简介:张 萍(1982-),女,硕士生,主研方向:嵌入式系统和图形用户界面;徐 晶,博士生

收稿日期:2006-06-25 E-mail :lyneausten@https://www.doczj.com/doc/0e14717248.html,

初始化不需要注册键盘设备,而只要进行中断请求号的申请。

CPLD通过行和列信号的序列识别按键行为,并对按键进行5位有效值的编码,然后存放到CPLD板级寄存器中。键盘底层驱动程序通过板级寄存器的地址操作读取扫描码,把所获取的扫描码放入tty_flip_buffer,等候tasklet的底半部处理。

键盘底层驱动程序读入扫描码后的中断处理过程如图2所示。整个过程并没有扫描码到键盘码、符号码的转换,同时也没有键盘模式的判断。

图1 键盘驱动程序的中断处理

3.2 上层文本输入模块设计实现

对于上层文本输入模块,通过从QWSPC101Keyboard Handler中继承出子类QWSWlitKeyboardHandler,并在QWSServer::newKeyboardHandler()中给出实例的过程来实现键盘扫描码到图形用户接口Qt/Embedded中Qt键值的直接转换。同时利用Qt的信号与插槽机制将键盘设备文件信号与QWSWlitKeyboardHandler类中的插槽readKeyboardData()连接起来。

为了实现文本输入,上层文本输入模块定义了输入状态及按键次数。用于表示输入状态的变量input_state有4个不同的取值:数字输入状态;小写英文输入状态;大写英文输入状态;标点符号输入状态。利用功能键星号键(*)实现这4种状态的切换。计算连续按同一个键的次数是由成员函数HandleSameKey()实现的,如果连续2次按键时间的间隔在设定的域值以内,就判断为连续按键2下。

图2示意了函数HandleSameKey的实现流程。该函数首先判断是否是同一个键被按下,如果不是,则该键的按键次数为1次;如果是同一个键,还需要判断第2次按键与第1次按键的时间间隔是否小于设定的域值,如果不是,则该键的按键次数也为1次,但是输入了2次。换言之,只有在设定的域值以内按同一个按键,按键次数才自增1。当按键次数自增到比复用的英文字母个数还多的时候,就循环归置按键1次。需要注意的是数字键7和数字键9,在这两个键上都复用了4个英文字母,而在其它数字键上只复用了3个英文字母。

文本输入模块的实现还需要考虑一个符号分割的问题。当后续输入的符号和前一个已经输入的符号在同一个按键上,比如单词“ON”,字母O和N都在数字键6上。为了正确的输入单词“ON”,可以定义一个时限。连续按数字6键3次输入字母“O”,其中连续按键的时间间隔不超过定义的时限;然后系统等待该时限超时,再连续按数字6键2次输入字母“N”。另一个解决符号分割的方法是定义一个专门的按键来跳过时限限制,这样就可以不用等待时限超时直接在同一个按键上输入下一个符号。本文实现的键盘驱动的文本输入模块同时实现了这两种方法。不仅定义了符号分割的时限,还使用了光标右移键来跳过时限限制。这样用户可以按照自己的习惯选择使用。

图2 HandlleSameKey实现流程

在得到了输入状态和连续按键次数后,根据这2个变量的组合将扫描码直接转化为Qt键值。这一过程是由成员函数TranslationScancode来实现的。该函数的实现流程如图3所示。星号键用来切换输入状态,所以该函数将星号键与其它键分开处理。然后根据输入状态和连续按键次数的10种不同组合,将扫描码转换成对应的QWSKeyEvent并传递给静态函数QWSServer::processKeyEvent()进行下一步的处理。

而处理的过程会根据标志位first_press的值有所不同。标志位first_press表示按键是否首次被按下,首次按下是相对于循环归置而言的。对于首次被按下的键,直接调用processKeyEvent()函数输出对应的符号,将在光标处输出对应符号,并使光标右移;但当按键不是首次被按下时,先调用processKeyEvent()函数输出Qt::backspace,再调用processKeyEvent()函数输出对应的符号,这样才能在原光标处输出对应符号,并使光标右移。

(下转第258页)

—255—

—258

—者之间的关系如下:与每个校验节点相邻的所有变量节点的模2和为零。为了更直观地表达变量节点和校验节点的邻接

关系,文中以(7,4,3)汉明码为例,

其校验矩阵和对应的Tanner 图可以表示如图1、图2所示。

111010001110101101001??

??=??????

H

图1 校验矩阵 图2 Tanner 图示例

如图2所示,变量节点由白色的圆形表示,校验节点由黑色的圆形表示,变量节点1235,2346,1247的模2和均为零。

当主服务器发送到备用服务器的校验点信息丢失时,为了加快故障恢复必须最大限度减少译码时间,因此采用位翻转迭代译码算法[11],该算法的译码时间低于前文提到的和积迭代译码算法。

同时由于备用服务器中存储的校验点信息也存在部分损坏的可能性,为了保证故障恢复的顺利进行,需要采用如下改进方法:

对备用服务器中存储的校验点信息进行编码,编码产生的校验信息也存储在备用服务器中,但是考虑到备用服务器的空间有限,需要每隔一定的时间将备用服务器上较早时段的校验点信息及对应的编码信息转储到后备大容量存储设 备上。

由于备用服务器经过LDPC 解码获得的校验点信息属于本地信息,因此信息的编码需选用适合存储方式的编码类型,而LDPC 码是一类基于概率模型和信道性质的通信编码,因此并不适合,为此文中选用RS 码作为对应的编码类型,具体编解码过程如下所述:

根据前文所述,在RS 编码过程中长度为q ?δ的有效信息通过与生成矩阵G 进行乘法运算产生长度为1q ?的编码信息,在解码过程中首先获取可用的编码信息,将这些编码信息与校验矩阵H 进行乘法运算,如果结果为零则对应的编码信息无错,否则表示对应的编码信息已经损坏,如果测试结果无错的编码信息长度至少为q ?δ,则可以从中任意选择

q ?δ个无错信息单元,并且从生成矩阵G 中选择对应位置的

矢量组成矩阵S ,将选出的信息单元与矩阵S 执行乘法运算则可恢复出全部的有效信息。

4 结束语

软件冗余技术在控制系统容错过程中得到广泛应用,其中流程对模式虽然具有故障恢复时间短等优点,但是无法解决校验点信息在传输过程中出错或接收不完全的问题,为此本文提出了基于编码技术的改进方法,有效解决了上述问题,从而进一步增强了控制系统的可靠性。尽管如此,编码技术的引入仍然在一定程度上增加了故障恢复时间,如何使系统可靠性和故障恢复时间达到最佳组合是今后进一步的研究 方向。

参考文献

1 王仲生. 智能容错技术及应用[M]. 北京: 国防工业出版社, 2002.

2 Patton R J. Fault-tolerant Control[C]//Proceedings of IFAC/IMACS Symposium on Fault Detection, Supervision and Safety for Technical Process. 1997: 1033-1055.

3 Avizienis A, Chen L. On the Implementation of N-version Programming for Software Fault Tolerance During Execution[C]// Proc. of the 1st International Computer Software and Application Conference. 1977: 149-155.

4 Randell B. System Structure for Software Fault Tolerance[J]. IEEE Transaction on Software Engineering, 1975, 1(2): 220-232.

5 Koo R, Toueqt S. Checkpoing and Rollback-recovery for Distributed Systems[J]. IEEE Transaction on Software Engineering, 1987, 13(1): 23-31.

6 Cherniack M, Balakrishnan H, Balazinska M, et al. Scalable Distributed Stream Processing[C]//Proceedings of the 1st Conference on Innovative Data System Research. 2003: 1-12.

7 Gallager R G . Low Density Parity Check Codes[D]. Cambridge: Cambridge University, 1963.

8 Tanner R M. A Recursive Approach to Low Complexity Codes[J]. IEEE Transaction on Information Theory, 1981, 27(5): 533-547. 9 Mackay D J C. Good Error Correction Codes Based on Very Sparse Matrices[J]. IEEE Transaction on Information Theory, 1999, 45(2): 399-431.

10 王新梅, 肖国镇. 纠错码——原理与方法[M]. 西安: 西安电子科

技大学出版社, 1991.

11 彭 立, 朱光喜. LDPC 码位翻转解码算法研究[J]. 华中科技大

学学报, 2004, 32(5): 14-16.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

(上接第255页)

4 小结

本文通过将一个完整的键盘驱动分解成为底层驱动模块和上层文本输入模块的双层设计方案实现了一种嵌入式手持设备的键盘驱动。依据嵌入式手持设备的键盘工作特点及其驱动实现难点,该实现方法具有一定的普遍性和适用性。

参考文献

1 Brouwer A. The Linux Keyboard Driver[J/OL]. Linux Journal. https://www.doczj.com/doc/0e14717248.html,/article/1080, 2004.

2 Trolltech 公司. Documentation on Qt/Embedded[EB/OL]. 2005-01-10. https://www.doczj.com/doc/0e14717248.html,/qtopia2.1/html/.

3 Rubini A, Corbet J. Linux 设备驱动程序[M]. 2版. 魏永明, 译. 北京: 中国电力出版社, 2002-10.

4 毛德操, 胡希明. Linux 内核源代码情景分析(上册) [M ]. 杭州: 浙江大学出版社, 2001.

5 Sniff. Linux 键盘体系[EB/OL]. 2001-07-02. http://www. minigui. org/forum//usr/8/8_289.doc.

Qt_Embedded环境下嵌入式键盘驱动的实现

—254 — Qt/Embedded 环境下嵌入式键盘驱动的实现 张 萍,徐 晶 (华中科技大学电子信息与工程系,武汉 430074) 摘 要:描述了基于嵌入式Linux 和Qt/Embedded 的手持终端的键盘驱动的设计与实现。依据嵌入式手持设备键盘的工作特点及其驱动实现难点,采用了一种将键盘驱动分解成底层驱动模块和上层文本输入模块的双层设计方案,且在实际设备中予以实现。 关键词:嵌入式终端;Linux ;Qt/Embedded ;键盘驱动;文本输入 Implementation of Embedded Keyboard Driver in Qt/Embedded Environment ZHANG Ping, XU Jing (Electronic and Information Department, Huazhong University of Science and Technology, Wuhan 430074) 【Abstract 】This article discusses the design and implementation of keyboard device driver based on embedded Linux and Qt/Embedded. Based on the working process and keyboard driver characteristics, the article divides the keyboard driver into two modules: bottom device driver module and upper text input module. 【Key words 】Embedded device; Linux; Qt/embedded; Keyboard driver; Text input 计 算 机 工 程Computer Engineering 第33卷 第11期 Vol.33 No.11 2007年6月 June 2007 ·开发研究与设计技术· 文章编号:1000—3428(2007)11—0254—02 文献标识码:A 中图分类号:TP334 嵌入式系统(Embedded System)无疑是当今最热门的概念之一。在嵌入式手持设备中,高性能、高可靠性GUI 的支持显得越来越重要。就现有的发展趋势看,越来越多的大型企业和组织开始选用Qt/Embedded ,包括Motorola 、Sharp 和IBM 等。在中国,作为TD-SCDMA 领头企业之一的大唐,也已经选择了Qt/Embedded 作为开发基于Linux 的移动电话的开发平台和图形用户界面。 作为一种和图形用户界面的交互手段,同时,也作为一种重要的数据输入方式,嵌入式键盘也起着举足轻重的作用。由于嵌入式系统具有功耗低、体积小、专用性强等特点,因此要求嵌入式键盘具有特殊的工作方式和特定的驱动设计。 本文通过系统地研究键盘工作原理,以及Linux 下在不同体系之间键盘驱动的接口和Qt/Embedded 下键盘驱动的接口[1~5],最终完成了嵌入式手持设备的键盘驱动的双层设计与实现。这种双层模块的设计方案,不仅取消了扫描码到键盘码、符号码的转换,同时也消除了对键盘模式的判断。 1 普通键盘驱动的不足 普通键盘一般工作在UNICODE 模式,并且应用程序也都接收符号码。这样一来,一个按键动作的产生,将要经过至少2次模式判断和2次码值变换,这对于一个嵌入式键盘而言是极其无效。因为用于表示一个基本按键的键盘扫描码由1个字节的接通扫描码和2个字节的断开扫描码组成,单单一个键的按下与断开,键盘最多要产生一系列多达6个字节的扫描码序列。再经过2次的模式判断和码值变换,不仅会降低整个系统的响应速度,也会占用更多的系统资源。资源有限性是嵌入式系统最基本的特征,因此这样的键盘及驱动是无法在嵌入式手持设备上使用的。 嵌入式系统的资源有限性也表现在对物理体积的最大压缩上。为了限制键盘体积,26个英文字母按字母表顺序3个或4个一组依次排列在2~9这8个数字键上,并与阿拉伯数字进行复用。这样每个按键同时表示了4~5个包括英文字母和数字在内的不同的键值。那么,原来的键盘驱动的处理过程,尤其是扫描码到键盘码、再到符号码的转换过程会变得极其复杂,因为这时出现了同一个扫描码对应多个键盘码和符号码的情况。这样势必会造成大量不必要的系统开销。 2 嵌入式键盘驱动的双层设计思想 本文描述的嵌入式键盘驱动采用了底层驱动模块和上层文本输入模块的双层模块设计方案。与普通键盘不同的是,嵌入式系统硬件平台上并没有键盘扫描芯片,本文采用了复杂可编程逻辑器件(CPLD)。CPLD 键盘逻辑主要提供扫描、 消抖和编码的硬件功能。在双层模块设计方案中,底层驱动模块只负责简单的读取CPLD 板级寄存器的扫描码,而不经过键盘码、符号码的转换,直接传递给上层应用程序。并且由CPLD 板级寄存器提供的经过编码的扫描码只有5位有效值,远远少于原来的3个字节,节省了系统资源。同时取消键盘模式的判断,提高键盘驱动的处理效率。 而作为双层模块设计方案中的上层文本输入模块将实现扫描码到图形用户接口Qt/Embedded 中Qt 键值的直接转化和文本输入的过程。这一直接转化过程将实现10个数字按键可以输出10个阿拉伯数字,26个大写英文字母,26个小写英文字母及常用标点符号等70多个不同符号。 3 嵌入式键盘驱动的双层设计实现 3.1 底层驱动模块设计实现 键盘的初始化是由TTY 设备的初始化开始的。由于TTY 设备在初始化时已经注册了相应的设备文件,因此,键盘的 基金项目:国家“863”计划基金资助项目(2005AA420050-05) 作者简介:张 萍(1982-),女,硕士生,主研方向:嵌入式系统和图形用户界面;徐 晶,博士生 收稿日期:2006-06-25 E-mail :lyneausten@https://www.doczj.com/doc/0e14717248.html,

嵌入式点亮一个LED灯的程序

飞凌OK6410开发板(裸板)第一个点亮LED灯程序,主要的C程序,完整程序请下载附件。 #define rGPMCON (*(volatile unsigned *)(0x7F008820)) #define rGPMDAT (*(volatile unsigned *)(0x7F008824)) #define rGPMPUD (*(volatile unsigned *)(0x7F008828)) void msDelay(int time) { volatile unsigned int i,j; for(i = 0; i < 2000000; i++) for(j=0; j

1.设计要求 EM-STM3210E开发板上有一个LED灯D1,编写程序点亮该灯。 2.硬件电路连接 在开发板上,D1与STM32F103ZE芯片上的引脚PF6相连,如下图所示。 3.软件程序设计

根据任务要求,程序内容主要包括: 1、配置Reset and clock control (RCC)以使能GPIOF端口模块的时钟 2、配置GPIOF端口的PF6引脚(50MHz,推挽输出) 3、调用STM32标准固件库函数GPIO_WriteBit以令PF6引脚输出高电平,从而点亮LED灯D1。 整个工程用户只需要实现源代码文件:main.c,其他工程文件由MDK和STM32标准固件库提供。 main.c文件的内容如下: [cpp] /** ********************************************************** ******************** * @file main.c * @author Max Liao * @version * @date 02-Novenber-2012 * @brief Main program body ********************************************************** ******************** */ /* Includes ------------------------------------------------------------------*/ #include "stm32f10x.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/

ARM嵌入式系统中双口RAM的驱动开发及应用_图文.

ARM开发与应用 中文核心期刊《微计算机信息>(嵌入式与SOC)2007年第23卷第3—2期 文章编"号:1008-0570(2007)03—2—0134—03 ARM嵌入式系统中双口RAM的驱动开发及应用 Applicationanddriverdevelopmentofdual-port RAM inembeddedsystem (1.中国科学院声学研究所;2.中国科学院研究生院)张震1,2李淑秋1 ZHANGZHEN LISHUQIU 摘要:基于ARM的RISC处理器广泛应用于各种数字系统中.本文以AT91RM9200为系统平台,设计了一种基于双口RAM的 实时数据接口,针对双口RAM的“乒乓”传输方式在Linux2.6下设计并开发了其驱动程序,最终实现了数据源与处理器问不 间断、快速的数据传输。 关键词:嵌入式系统;双端口RAM;Linux2.6;驱动程序中图分类号:1.1B鹞.1文献标识码:A Abstract:RISCprocessorsbasedon

ARM are wildly usedinvariousdigitalsystems.Thisarticletook AT91RM9200 as systemplat? form,anddesigned a real-timedatainterfacebased on dual-port RAM(DPRAM),and also developedthedriverforLinux2.6 to implementthe“Ping-Pong”transmissionoftheDPRAM.Moreover,continuesandfast

嵌入式Linux开发环境搭建

第一章Ubuntu 8.10的安装和网络配置 1.安装虚拟机软件Vmware 6.0.2 虚拟机安装版本Vmware 6.0.2的版本 在winxp操作系统下用鼠标双击VMware-workstation-6.0.2-59824图标,开始安装虚拟机Vmware,如下图所示: 双击VMware-workstation-6.0.2-59824图标,出现vmware的安装界面,所有的选项都采用默认值,用鼠标点【下一步】,然后出现安装进度条,系统开始安装vmware,等待安装完成后,出现如下安装完成界面: 用鼠标点【Finish】,虚拟机安装完成。系统提示重新启动计算机,选择【是】重新启动计算机,电脑重新启动后,虚拟机安装完成。 2.新建虚拟机 打开Vmware虚拟机软件,选【File】->【New】->【Virtual Machine】,弹出新建虚拟机向导对话框,注意以下几个重要的选项,其他都采用默认选项即可。 选择操作系统和版本,如下图所示:

选择虚拟机名称和存放的路径,如下图所示: 设置虚拟机硬盘大小为20G ,如下图所示:

点击【完成】按钮,这样我们就新建了一个虚拟机,下面我们设置一下虚拟机的内存,步骤如下: 点击虚拟机Vmware的【VM】->【settings】时菜单,弹出虚拟机设置对话框,设置虚拟机使用的内存为512M或1024M,如下图所示:

点击【OK】按钮,这样我们就新建了一个虚拟机,该虚拟机的硬盘为20G, 内存为512M .接着我们就可以在该虚拟机上安装ubuntu操作系统了。 注: 键盘和鼠标控制权在虚拟机和Windows系统之间的切换是通过组合键【Ctrl】+【Alt】来实现的。 3 安装Linux操作系统ubuntu Ubuntu安装版本ubuntu 8.10 点击vmware软件工具栏上的【绿色箭头】启动虚拟机,如下图所示:

嵌入式键盘及LED驱动实验

《嵌入式系统设计》 实验报告 (2011-2012学年第2学期)

实验三键盘及LED驱动实验—C语言实现方法 一、实验目的 1.学习键盘及LED驱动原理。 2.掌握ZLG7289芯片的使用方法。 二、实验内容 通过ZLG7289芯片驱动17键的键盘和8个共阴极LED,将按键值在LED上显示出来。 三、预备知识 1.掌握在ARM SDT 2.5或ADS1.2集成开发环境中编写和调试程序的基本过程。2.了解ARM应用程序的框架结构。 3.了解μC/OS-II多任务的原理。 四、实验设备及工具 硬件:ARM嵌入式开发平台、用于ARM7TDMI的JTAG仿真器、PC机Pentium100以上。 软件:PC机操作系统win98、Win2000或WinXP、ARM SDT 2.51或ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序 五、实验原理 ZLG7289A是一片具有串行接口的,可同时驱动8位共阴式数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵,单片即可完成LED显示﹑键盘接口的全部功能。 ZLG7289A内部含有译码器,可直接接受BCD码或16进制码,并同时具有2种译码方式。此外,还具有多种控制指令,如消隐﹑闪烁﹑左移﹑右移﹑段寻址等。 ZLG7289A具有片选信号可方便地实现多于8位的显示或多于64键的键盘接口。其特点如下: a.串行接口无需外围元件可直接驱动LED。 b.各位独立控制译码/不译码及消隐和闪烁属性。 c.(循环)左移/(循环)右移指令。 d.具有段寻址指令方便控制独立LED。 e.键盘控制器内含去抖动电路。 表2-5 引脚说明 引脚名称说明 1 , 2 VDD 正电源 3 ,5 NC 悬空 4 VSS 接地 6 /CS 片选输入端,此引脚为低电平时,可向芯片发送指令及读取键盘数据

实验三 搭建嵌入式系统开发环境

实验三搭建嵌入式系统开发环境 一、实验目的: 1.掌握嵌入式开发环境的配置; 2.掌握开发工具链的安装与配置; 3.掌握嵌入式系统内核和根文件系统的烧写的过程。 二、实验内容: 1)安装配置嵌入式开发环境; 2)安装与配置工具链; 3)内核和根文件系统的烧写 三、实验设备及工具: 硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。 软件:PC机操作系统Red Hat Enterprise Linux 4、MINICOM 、AMRLINUX开发环境。 四、实验步骤: 1.共享windows下内核文件至linux环境下,并将文件复制至个人开发目录中 2.进入目录,输入make menuconfig,对内核进行裁剪配置 3.编译内核之前输入make clean清理编译环境 4.输入make dep 编译相关依赖文件 5.输入make zImage 输出最终编译后的镜像文件 6.将镜像文件共享至windows环境下 7.在windows打开超级终端,进入vivi,将镜像文件烧录至实验箱开发板中 五、实验总结: 通过本次实验,熟悉了Linux 开发环境,学会了如何进行linux内核的烧写。在实验

过程中了解到Linux内核模块的组成结构,通过本次实验,初步了解嵌入式开发的基本过程。 实验四嵌入式驱动程序设计 一、实验目的: 1.学习在LINUX 下进行驱动设计的原理 2.掌握使用模块方式进行驱动开发调试的过程 二、实验内容: 在PC 机上编写简单的虚拟硬件驱动程序并进调试,实验驱动的各个接口函数的实现,分析并理解驱动与应用程序的交互过程。 三、实验设备及工具: 硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。 软件:PC机操作系统Red Hat Enterprise Linux 4、MINICOM 、AMRLINUX开发环境。 四、预备知识: 1.有 C 语言基础。 2.掌握在Linux 下常用编辑器的使用。 3.掌握Makefile 的编写和使用。 4.掌握Linux 下的程序编译与交叉编译过程。 5.有驱动开发的基本知识。 五、实验步骤: 1.进入/arm2410cl/exp/drivers/01_demo,使用vi 编辑器或其他编辑器阅读理解源代码 2.使用makefile编译驱动模块与测试程序,编译器采用armv4l-unknown-linux-gcc 3.将编译后的驱动模块demo.o和测试程序test_demo挂载到实验箱上 4.插入驱动模块demo.o 执行命令insmod demo.o 5.查看驱动是否插入成功,执行命令lsmod demo.o 6.运行测试程序,查看执行结果

USB鼠标嵌入式驱动系统

USB鼠标嵌入式驱动系统 朱娟光华长春大学 吉林省 E-mail:zhuj_guanghua@ https://www.doczj.com/doc/0e14717248.html, 王帅中国科学院长春光 学精密机械与物理研究 所 吉林长春 张舒阳王津立李赵希 长春大学光华学院 吉林长春 摘要:该论文设计了一种USB鼠标基于AT89S52单片机的嵌入式驱动系统。这AT89S52控制USB的主控芯片,SL811HS实现控制USB鼠标的功能。硬件给出该系统的原理框图。软件介绍系统的实现原理和USB总线重新插入行动的装置检测、设备速度检测等。嵌入式USB驱动系统有重要的参考价值,USB主机系统的设计。 关键词——USB数目;SL811HS;AT89S52单片机 I.简介 USB设备因其便捷和高性价比特点,被广泛用于日常工作和生活中。例如,USB 磁盘,USB相机,USB鼠标,USB键盘,等等。单片机(SCM)有成熟的技术和高性价比,被广泛用于自动化领域中。但是单片机没有USB主机接口配置,从而导致直接控制USB外围设备有困难。如果我们在单片机系统中增加USB主机接口、通过接口控制USB从动装置设备,单片机系统的功能将大大扩展。该系统为单片机加上USB主机接口。使用常见的51单片机连接特殊解决USB接口芯片。这个解决方案具有良好的灵活性和简单的移植。它为低成本产品的开发提供了一个广阔的前景。系统选用Atmel公司的AT89S52单片机。USB的主控制芯片是芯片赛浦路斯的公司的SL811HS。SL811HS可以在任何一个主机或从动模型使用,它支持USB1.1的全速和低速数据传输。当在主机模式下工作时,就可以自动检测到嵌入SL811HS的行为。本论文介绍方法AT89S52控制SL811HS以完成USB控制的方法。例如,USB鼠标控制计划的情况。 II.系统硬件 系统的硬件如图一所示。AT89S52和SL811HS的电压分别为5V和3.3V。虽然电压不同,AT89S52和SL811HS的参数可以根据噪音容忍参数直接连接。

嵌入式LINUX四按键驱动

对一个具有四个按键的按键驱动的分析 源代码: /*Headers-------------------------------------------------*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef CONFIG_DEVFS_FS #include #endif /*V ars----------------------------------------------------*/ #define DEVICE_NAME "buttons" #define EXTINT_OFF (IRQ_EINT4 - 4) unsigned int buttons_major=0; unsigned int buttons_minor=0; unsigned int type = IRQT_FALLING; struct button_info { unsigned int irq_no; unsigned int gpio_port; unsigned int IN; int button_no; }; struct button_info realarm_button_info[4] = { { IRQ_EINT19, S3C2410_GPG11, S3C2410_GPG11_INP, 1 }, { IRQ_EINT8, S3C2410_GPG0, S3C2410_GPG0_INP, 2 },

嵌入式开发环境搭建步骤

嵌入式开发,通常都是在Linux环境下编译Uboot、Linux和android代码。编译uboot/Linux可以选择任何的Linux发行版,如redhat,suse,ubuntu,fedora,debian等,只要你配置好ARM交叉工具编译工具就可以了。 编译android,搭建环境最容易的就是ubuntu。google的官方网站上,也有搭建编译android的简单介绍,可以搜索下,网络上有相当多这方面的说明。 考虑到我们学习嵌入式的平台是Fast Models,以及自动的Realview EB模型硬件平台。而ARM官方推荐是在Redhat Enterprise(4,5,6)下安装Fast Models。所以,我们采用Redhat Enterprise 6作为开发环境。我们可以直接在电脑上安排RHEL6,也可以先安装vmware,然后在vmware中创建一个虚拟机,在虚拟机上安装RHEL6。在这里,小编是采用后者方式。 搭建Redhat Enterprise 6开发环境,建议做以下配置: 1)设置静态IP。在之前使用vmware的经历,发现如何网站采用dhcp方式,那么rhel6的IP地址有可能会发现改变。而我们需要网络IP最好是固定的,所以需要设置静态IP。RHEL6的静态IP的设置方法,可以搜索到。 2)开启ssh,samba服务 ARM嵌入式开发,基本上都是在命令(shell)方式下进行的,不需要图形界面。所以,在windows上运行vmware,vmware上虚拟机再运行rdel6的情况下,为了不增加windows系统的负荷,可以把vmware放在后台运行,使用ssh服务登陆到rdel6就可 以进行嵌入式开发了。 小编在开发嵌入式时,通常都是使用sourceinsight阅读、修改代码,然后在shell运 行命令进行编译。所以,开通samba服务,然后使用windows已安装的sourceinsight 工具,阅读放在rdel6上的Linux/uboot代码。 在Redhat发行版下,有关服务器的开启或关闭,可以在root用户下,使用setup命 令进入配置选项的“System Services”菜单下进行设置。 samba服务在菜单选项为:“smb”;ssh服务在菜单选项为:“sshd” 需要注意的是:windows下,要使用ssh服务/samba服务登陆vmware虚拟机上的rhel6,必须把rhel6上的防火墙关掉。setup命令--->Firewall Configuration--->去掉Enable。

标准PC机键盘在嵌入式系统中的应用

现代制造工程!""#($) 标准!"机键盘在嵌入式系统中的应用 ! 王#戈#黄忠全#张根保#张#颖#朱福益#颉瑞昌 摘要#讨论!$%&标准键盘接口的接口协议,并以’"()&*&嵌入式平台为例,介绍一种标准!"机键盘在嵌入式系统中 的应用方案,给出了相关的软、硬件设计方法。关键词:嵌入式系统#标准键盘#%&’&接口 中图分类号:+,-.;+!/0-#文献标识码:1#文章编号:-.*-—/-//(&22))2-—222/—2/ ())*+,-.+/0/12.-03-43%56789/43+07:973373282.7: ;-0<=7,>?-0<@A/06:?<@8@6@A @=58>;B>5:B @;8945>B:54F;@=5@=8G><:>;B 9><:G94698:58:B @;’"()&*&8>4AI G78H/432:I:973373282.7:#&.-03-436789/-43#%&’&+0.741-,7 -#标准键盘分析 键盘作为人机接口界面,是嵌入式系统的关键组成部分,通常是设计者重点考虑的内容。!"机键盘主要有J+、1+和!$%&三类。目前使用较多的是1+和!$%&键盘系统,键码由原先的K/键发展到-2L 键,由于采用双向串行通信协议,可以实现主机和键盘的双向通信。相对1+键盘,!$%&接口键盘使用更小的连接器,成为现在使用最为广泛的键盘。本文所采用的!"机键盘即为!$%&接口键盘。-M -#接口描述 ##!$%&键盘接口有)脚的3NO 和.脚的H4;H4P3NO 两种连接器。从电气特性上看,这两种连接器惟一的 图-#接口引脚定义 不同在于管脚的排列顺序。连接器上有用的管脚有L 个:电源(Q )R )、地、数据和时钟。.脚的H4;H4P 3NO 在连接器上的排列见图-。 -M &#工作原理 ##!$%&接口键盘本身是一个由K2LK 构成的单片机 !#国家自然科学基金资助项目 ()2/*)-.&);国家K./高技术研究发展计划资助项目(&22&11L-/)-2)图.#改进工艺后壁厚减薄量分布(S )表&#改进工艺前、 后的拉深性能对比项目工艺 壁厚最大减薄率%S 最大主应力%’!> 最大主应变原工艺改进后 -&M 2-2M L ./*/0& 2M &K/2M &/-L#结语 本文对热水器封头零件的拉深成形工艺进行了有限元模拟研究,模拟验证了原工艺方案,与实际生产中的数据符合较好。通过模拟研究提出了改进的工艺方法,不仅可以降低生产成本,而且零件的成形性能得到改善,可应用于生产工艺的改进。 参#考#文#献 -#金淼I 大型薄壁封头零件冷拉深工艺分析I 重型机械,&22-,(/)&#王志恒,张晶等I 影响拉延筋结构及应用的因素分析I 锻压 技术,-00*,(&) /#’I $>H7:AI N;=A7:;6:@= B<>GE:>B F:@H:8A =@A @=’>8:<4>A5!<@6:554;F +:69;@A@FD ,&22&, -&&作者通讯地址:清华大学机械系(-222KL )收稿日期:&22L202K / #试验研究# 万方数据

实现了多键齐按和重复按键的嵌入式系统键盘驱动设计

实现了多键齐按和重复按键的嵌入式系统键盘驱动设计 1 键盘驱动程序的设计随着电子信息技术飞速发展,嵌入式系统构成的各种设备得到了广泛的应用,嵌入式Linux是一种开放源码、软实时、多任务的操作系统,是开发嵌入式产品的优秀操作系统平台,其中键盘是人机界面中人类监控计算机重要数据输入设备。实现键盘有两种方法:一种是采用现有的一些芯片实现键盘扫描;二是用软件实现键盘扫描。目前许多芯片可用来实现键盘扫描,但是键盘扫描的软件实现方法有助于缩减系统的重复开发成本,而只需很少的CPU 开销。嵌入式控制器的功能很强,可以充分利用这一资源。本课题提出的键盘方案是以嵌入式Linux和PXA255为软硬件平台,通过测试,表明其具有良好的稳定性和实时性。 2 矩阵式键盘的结构与工作原理本课题采用矩阵键盘,如图1所示。四根行线四根列线组成4 *4矩阵键盘,分别用CPU 的4个GPIO口。当有键按下,某个列GPI O 口电平被下拉从而产生下降沿,触发中断。其中按键行阵列必须提供上拉信号,列阵列加二极管,防止瞬间电流过大对GPI O口造成冲击。 图1 矩阵键盘原理图。 3 Linux键盘驱动简介在Linux中,键盘驱动被划分成两层来实现。上层是一个通用键盘抽象层,下层则是硬件处理层,主要对硬件进行直接的操作。键盘驱动程序上层公共部分在driver /keyboard 。c里。文件中最重要的是内核用EXPORT _SYM BOL这个宏导出的handle_scancode函数。在这个文件中还定义了其它的几个回调函数,它们由键盘驱动程序中上层公共部分调用,并且由底层硬件处理函数实现。键盘驱动程序的底层硬件处理部分则根据不同硬件有不同实现。 4 键盘驱动程序的实现4.1 宏定义module init和module exit通过宏定义module init和module exit可以看出,驱动程序的入口从kd_ctrl_init()开始。当内核模块加载的时候,默认调用module_ i nit(kd_c trl_init),在kd_ctr l_ i nit()中将完成一些初始化工作,主要如下:

LED驱动程序设计

LED驱动程序设计 分类:ARM系统进阶班(arm裸机程序)2012-08-24 13:23 1561人阅读评论(0) 收藏举报 首先声明,此文章是基于对国嵌视频教程中tiny6410有关视频教程的总结,为方便大家的复习。再次予以感谢,感谢国嵌各位老师为我们提供如此好的视频教程,为对于想要迈入嵌入式大门却迟迟找不到合适方法的学子们指引一条光明的方向。好了,接下来步入正题,此处将介绍tiny6410 LED驱动程序的设计。

2 下面来看看tiny6410关于LED 的原理图如图(1)所示:

图1 LED原理图 3 LED实例,代码如下所示:(代码摘自\光盘4\实验代码\3-3-1\src\main.c) main.c [cpp]view plaincopy 1./********************************************************** 2.*实验要求:用Tiny6410上的4个LED资源实现跑马灯程序。 3.*功能描述: Tiny6410用下面4个引脚连接了LED发光二极管,分别是 4.* GPK4--LED1 5.* GPK5--LED2 6.* GPK6--LED3 7.* GPK7--LED4 8.* 本程序将控制这四个管脚的输出电平,实现跑马灯的效果 9.*日期: 2011-3-10 10.*作者:国嵌 11.**********************************************************/ 12.#include "def.h" 13.#include "gpio.h" 14. 15.#define LED1_ON ~(1<<4) 16.#define LED2_ON ~(1<<5) 17.#define LED3_ON ~(1<<6) 18.#define LED4_ON ~(1<<7) 19. 20.#define LED1_OFF (1<<4)

eink嵌入式驱动

起因 2007年,苹果公司推出了第一代的iPhone,后来这款产品完全改变了人们对于智能手机的理解和认识,智能手机以及衍生的后PC产品功能不断强化,正在一步步取代着原本PC 才能做的事情。而就是这样一个背景下,亚马逊公司却反其道而行,推出了一款功能无比单一的产品:Kindle。Kindle不但软件上设计成只能用来看书,就连硬件上也选用了一块基本只能用来看书的屏幕:黑白EPD屏幕。这种屏幕只能显示黑白颜色(或者灰阶),响应速度也非常慢(大约400ms-1s),而且还不能主动发光,必须要借助环境光才能显示……然而这种屏幕却也有一些非常重要的优点,比如显示效果非常接近纸张,不刺眼,只有在刷新时耗电等等。几年后,国产厂家也进军了这一领域,把这类使用EPD屏幕的电纸书的价格做到了千元以下。当时我就买了一台,着实是被这种显示屏的效果给吸引住了。当时我就想着要是能自己用单片机驱动起来玩一玩就好了。无奈当时自己技术差,屏幕也贵,没能顺利实施。最近发现大尺寸(6英寸,型号ED060SC4)的E-Ink屏幕价格已经降到了50以内,于是决定开始研究下它的驱动,也顺便做个最简单的应用:台历。 初步研究 首先,为了各位方便阅读,先来区分几个名词,首先是EPD,EPD并非是E-Paper Display (电子纸显示器)的缩写,而应该是Electrophoretic Display即电泳显示器的缩写。E-Ink 则是PVI公司的注册商标,用于指代他们旗下的EPD产品。但是并非只有PVI公司生产电子纸,天马、龙亭、友达、佳显和LG等公司都在生产类似且兼容的EPD产品,所以最好称他们为EPD而非E-Ink。电子纸这个概念就比较笼统了,EPD是一种电子纸,但是也有很多基于其它技术的电子纸,比如说Ch-LCD、PN-LCD、HR-TFT LCD等等,比如Pebble 所使用的HR-TFT LCD也被宣传为电子纸,但实际上并非EPD。

嵌入式LED灯显示

【设计题目】 矩阵LED字符显示控制系统设计 【设计目的】 1.掌握无操作系统下的硬件软件设计原理和方法; 2.进一步熟悉ARM 处理器的基本结构、指令集、存储系统以及基本接口编程; 3.熟悉嵌入式系统各部件的硬件初始化过程以及基本IO控制方法。 4.掌握矩阵LED 的应用原理 【设计内容】 1.利用sys_init初始化程序,利用串口实现PC和开发板的数据通信; 2.编写S3C2410X 处理器的点阵屏驱动程序; 3.编写S3C2410X 处理器的点阵屏应用程序。 4. 当程序运行等待要求从串口输入学生姓名的字符串在矩阵LED上显示出来。【实验环境】 硬件:Embest EduKit-IV 平台,ULINK2 仿真器套件,PC 机; 软件:μVision IDE for ARM 集成开发环境,Windows XP。 【相关知识综述】 背景知识、原理算法等 一、硬件部分 1.点阵屏的结构电路

图1点阵屏的结构电路 图上QL1-QL16为行驱动信号,每个信号控制一行, LR1~LR16 是点阵屏的列驱动信号,每一个信号控制一列。当行信号为高电平而列信号为低电平,对应的LED 就会亮。 2,S3C2410与点阵屏的连接 LL1 LL8 LL7 LL9

图2 S3C2410ARM处理器与两片CD4094连接得到16位行选信号图以上电路可以通过S3C2410GPIO口把CPU的并行数据(16位两个字节的数据)打入到两个CD4094芯片中并锁存起来变成LL1-LL16的行选信号。 各信号的作用如下表1;

3.点阵屏的保护电路 图3 点阵屏的保护电路图 为了保护LED 屏加了对应的电阻实现行限流作用,即LL1-LL16变为RQ1-RQ16 4.LED 的驱动 加入行驱动电路的目的是实现LED 灯的驱动。这样由RQ1-RQ16变为行驱动信号QL1-QL16。Q11-QL16为图1中的行驱动信号。

嵌入式Linux系统的软键盘实现

嵌入式Linux系统的软键盘实现 随着对嵌入式系统体积小型化和操作人性化的要求,以及大尺寸触摸式显示屏的广泛应用,在嵌入式系统中采用软键盘实现字符的输入,已经成为目前的发展主流。QT是一个跨平台的C++图形界面库,是由挪威TrollTech公司推出的产品。它采用的是面向对象的程序设计思想,因此,具有良好的可扩展性和可移植性,同时支持多个GUI平台的交互开发。QT采用了良好的封装机制,使得它的模块化程度非常高,可重用性好,开发方便。凭借其良好的性能,QT已成为目前GUI开发中使用最为广泛的图形界面库之一。QT/E (QT/Embedded)是用于嵌入式系统的QT版本。QT/E去掉了对XLib的依赖而直接工作于Frame Buffer上,因而效率更高,文中主要使用QT4.5.3版本,在嵌入式Linux环境下实现软键盘设计。 1 QT/E体系结构 QT/E是2001年Trolltech公司开发的一款面向嵌入式系统的QT版本。它采用轻量级窗口系统,完全摒弃了底层的XLib,

以Framebuffer作为底层图形接口,极大地减少了对内存的消耗。QT/E在上层仍然保持着原来的QT架构,因此,针对在Xwindow上设计的QT程序仍然具有很好的移植性。QT/E 的基本体系结构如图1所示。 1)QT/E体系结构中的图形引擎是通过相关的图形算法和Framebuffer操作底层的硬件设备来实现的;事件驱动则是通过底层的输入输出设备驱动来实现对外界事件的响应。 2)如图1所示,由图形引擎层实现对图形界面的绘图操作,然后由QT基本类提供对外界的操作接口。其中,图形类提供图形操作接口,比如:画线、画矩形等;控件类通过继承公共抽象类QWidget来实现基本的控件,为外界提供接口。 2 QT/E通信机制 在图形界面编程时,我们经常要实现界面之间的相互切换或

基于项目驱动的嵌入式综合开发

实训报告 实训名称:基于项目驱动的嵌入式综合开发姓名: 院(系): 专业班级: 学号: 指导教师: 实习时间:

一、实训目的 (一)实习目的 本实训课程是针对嵌入式软件专业学生专门设计的,通过本课程设置的几个嵌入式综合项目的系统学习,可以使学生由浅入深的对嵌入式Linux系统进行全面学习,能够独立胜任嵌入式Linux应用开发、系统开发、驱动开发等多方面工作,并注重敬业团队精神培养。 1)增强学生的理论联系实际的能力 2)通过实训了解企业项目开发流程和学习新技术的方法 3)通过实训项目了解企业项目开发过程中文档的整理方法和问题的分析方法 4)通过实训项目加强学生对基础课程的运用能力,使其认识到基础知识的重要性5)通过实训争强学生对本专业和未来工作岗位的理解,端正心态,明确就业目标6)通过实训争强学生的编程技能,培养其良好的编码风格和编码习惯 (二)方法 本实训课程安排在学校实验室统一进行实训,学生上机独立完成规定实训项目。 (三)任务 要求每位同学独立完成实训题目的编程、调试、优化与测试,并交付使用。要求强化编程思维、编程能力和代码优化的能力,撰写《实训报告》(含:需求分析、总体设计、算法分析及设计中遇到的主要问题和解决方法,设计中尚存的不足与心得体会)。上交完成的所有源程序及相关文件。

三、实训报告 3.1 项目1名称 智能手环 3.1.1 实训内容 本次实训内容是制作智能手环,需要实现计步,测量温度,显示时间,电量,报警等功能。具体模块如下: (1)LED模块:显示电量 (2)ADC模块:模数转换 (3)PWM模块:蜂鸣器报警 (4)KEY模块:按键控制 (5)RTC模块:实时时钟 (6)计步以及温度显示模块 (7)总体实现 3.1.2 实训过程及相关结果 首先需要搭建软硬件环境,安装Ubuntu系统,安装交叉编译工具链。然后需要下载调试硬件连接,安装串口驱动等。环境搭建完成之后需要实现相应的每一个功能,具体功能如下: (1)LED模块:显示电量 此模块主要功能为点亮LED灯,以此来实现手环的点亮显示功能。 原理图如下: 在项目目录下分别创建led.c,led.h,main.c文件,根据芯片手册所分析的对应寄存器数据,在

基于嵌入式系统键盘设计

课程名称:基于嵌入式系统键盘设计专业班级: 姓名: 学号: 批阅时间: 指导教师:成绩:

在ARM嵌入式应用中,人机交互对话最通用的方法就是通过键盘和LCD显示进行的,本设计是通过键盘向系统发送各种指令或置入必要的数据信息。键盘模块设计的好坏,直接关系到系统的可靠性和稳定性。 1 实例说明 在ARM应用系统中,键盘扫描只是ARM的工作之一,ARM在忙于各项工作任务时,如何兼顾键盘的输入,则取决于键盘的工作方式。键盘工作方式的选取原则是既要保证能及时响应按键操作,又要不过多占用ARM的工作时间。 本实例介绍ARM系统中常用的行列式键盘电路的硬件设计、键盘扫描及键盘测试,行列式键盘适应于按键数量较多,又不想使用专用键盘芯片的场合。这种方式的按键接口由行线和列线组成,按键位于行、列的交叉点上。 2键盘工作原理 2.1常用键盘接口 常用按键接门可分为独立式按键接口、行列式按键接口和专用芯片式等。具体采用哪种方式,可根据所设计系统的实际情况而定。下面分别介绍这几种接口方式的优缺点及适用场合。 1. 独立式按键接口 独立式按键接口设计优点是电路配置灵活,软件实现简单。但缺点也很明显,每个按键需要占用一根口线,若按键数量较多,资源浪费将比较严重,电路结构也变得复杂。因此本方法主要用于按键较少或对操作速度要求较高的场合。软件实现时,可以采用中断方式,也可以采用查询方式,示意图如图13-1所示。

2. 行列式按键接口 行列式按键接口示意图如图13-4(a)所示,其使用原理将在下节详细讲述。行列式按键接口适应于按键数量较多,又不想使用专用键盘芯片的场合。这种方式的按键接口由行线和列线组成,按键位于行、列的交叉点上。这种方式的优点就是相对于独立接口方式可以节省很多I/O资源,相对于专用芯片键盘可以节省成本,且更为灵活。缺点就是需要用软件处理消抖、重键等。 行列式按键接口是一种老式的键盘接口,其键扫描方法是几乎所有PC键盘所采用的方法。 3.专用芯片式设计 专用键盘处理芯片一般功能比较完善,芯片本身能完成对按键的编码、扫描、消抖和重键等问题的处理,甚至还集成了显示接口功能。专用键盘处理芯片的优点很明显,可靠性高,口简单,使用方便,适合处理按键较多的情况。但在很多应用场合,考虑成本因素,可能并不是最佳选择。 2.2行列式键盘工作原理 ARM嵌入式系统使用常用的行列式键盘电路,此电路的优点是比较节省I/0口线,并且接口简单。它的工作模式如图13-2所示。 它的行线与按键的一个引脚相连,列线与按键的另一个引脚相连。平时列线被置成低电平,没有按键被按下时,行线保持高电平,而有按键被按下时,行线被拉成低电平。这时候控制器知道有按键被按下,但只能判断出在哪一行,不能判断出在哪一列,因此接下来就要进行键盘扫描,以确定具体是哪个按键被按下。

相关主题
文本预览