




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
AT89C2051设计的PC/AT键盘摘 要:在介绍PC/AT键码特征的基础上,介绍利用AT89C2051来实现PC/AT键盘的硬件和软件设计 方法。它具有结构简单、选择性强、便于实现等优点,特别适用于36个以下PC/AT键盘的 应用。关键词:键盘 键码 微控制器 在工业控制、测量仪器等领域,已大量使用嵌入式PC,如 ADVANTECH公司的PC/104、AMD公司的E86嵌入式PC等。它们除具有 PC的功能外,还提供了功能强大的各种标准接口,如:平板 /VGA显示器控制接口、光驱接口、以太网接口、RS-232/422/485 接口、PC/AT键盘接口等 。这就为新产品开发的标准化、模块化提供了方便,可大大缩小研发周期,降 低研制成本,快速进入市场。由于嵌入式PC具有标准PC/AT 键盘接口,也就是说,可以用标准的PC/AT键盘来对嵌入式 PC进行操作与控制。但是,在很多实际应用中,由于一般只用到某几个固定的键,并希望键盘 具有体积小巧、便于布放等特点,为此,希望能够设计一种小巧、灵活的 PC/AT键盘,来满足各种需求。本文介绍一种由AT89C2051设计实现的 PC/AT键盘。 1 PC/AT键盘的特点 PC/AT键盘由单片微控制器、键盘矩阵和支持逻辑三部分组成。键盘微控制器的主要功能是扫描 键盘,以得到有效的闭合键,一旦键被按下或放开,就为系统板产生键代码,将键代码以串行格式 传递到系统板,同时产生将键代码转换为供系统板使用的并行数据所需的时钟信号。 AT键盘使用接通键码,其值在007F之间,以串行数据格式传递 到系统板;每发送一个键码包含11个数据位,即1个起始位、 8个数据位(低位在前,高位在后)、1个奇偶校验位、1个停止位。在键码传送的同时, 微控制器还传送1个键码时钟同步信号,用于同步键码数据的接收。键码中每个数据位的传送发生在 键盘时钟的下降沿,时钟的波特率为16 Kb/s。图1为接通键码是2C,即按下t键时,键码的传送格式。 对于PC/AT键盘,如果按下键0.5 s之前放开该键,则键盘电路产生一个断开键码,将这个键码也 以串行数据的格式传送出去。AT键盘的断开键码为F0,在断开键码之后再跟接通键码。其中断开键 码通知BIOS键盘例程,按下的键序列功能已结束,键已被放开。如果在键按下 0.5 s之后仍未放开该键,则键盘电路产生一个接通键代码(与接通键码 相同),并以每秒6个键码的速率(每166.7 ms一个键码)进行传送,此过程直到键盘电路检测到断开代码为止。常用键的键码如表 1所列。 2 硬件设计 键盘电路如图2所示,由ATMEL公司的微控制器AT89C2051 、MAXIM 公司的看门狗自动复位电路MAX813L及键盘矩阵组成。由于AT 89C2051的可用端口为16个,除复位端RES、看门狗信号输出 端WDI、键码数据输出端TXD和时钟输出端CLK外,还剩12个可用端口,这样,其最大可独立响 应66=36个键的输入,可满足工控机常用控制键的要求。 MAX813L为看门狗电路,它实时接收来自AT89C2051的WDI信号,并自动判断两次 WDI信号的间隔时间。当时间间隔小于1.6 s时,其RST输出端保持低电平;当时间间隔大于1.6 s时,其RST输出端输出高电平,AT89C2051被复位。AT89C2051 具有如下特点: 具有2K字节可编程闪存; 1288bit 内部RAM; 15根可编程I/O线; 2个16位定时/计数器; 6个中断源; 可编程串行UART。 3 软件设计 软件包括定时0中断子程序、定时1中断子程序、主程序等。其中,定时器0定时中断子程序用 于定时检测有无键被按下、判断哪个键被按下并确定对应的键码。定时器 1定时中断子程序用于确定输出键码和时钟信号的波特率,并定时输出看门狗 信号,用于防止软件出现死机现象。主程序根据有无键被按下标志,确定是否输出键码和同步时钟信 号。如有键被按下,则调入由定时中断子程序所确定的键码,输出相应的键码并同时输出同步时钟信 号。主程序流程如图3所示。 4 设计实例 下面为一设计实例,要求所设计的小键盘输出F1、F2、 F3、F4、Page UP、Page Down、Esc、Enter 8个PC/AT PS/2键盘信号。8个按键的一端分别接P3.7、P1.0P1.6端口,8个按键的另一端为公共 接地端。 全部程序如下所示:/* CRYSTAL IS 20MHz, keycode clock is 12.5kHz,*/KEY: DO;$NOLIST$INCLUDE (REG51.DCL)$LISTDECLARE WDI LITERALLY P3_0;DECLARE SW1 LITERALLY P3_7;DECLARE SW2 LITERALLY P1_0;DECLARE SW3 LITERALLY P1_1;DECLARE SW4 LITERALLY P1_2;DECLARE SW5 LITERALLY P1_3;DECLARE SW6 LITERALLY P1_4;DECLARE SW7 LITERALLY P1_5;DECLARE SW8 LITERALLY P1_6;DECLARE KEY$DATA LITERALLY P3_1;DECLARE KEY$CLK LITERALLY P1_7;DECLARE (DK,KEY$CODE,PARITY,SHIFT$REG,NUMBER,DI,DN) BYTE;DECLARE (T0$INT) BIT;/* INTERRUPT OF TIMER 1 */TIMER1:PROCEDURE INTERRUPT 3 USING 1;DISABLE;WDI=1;DK=0;TH1=0BEH;TL1=0E6H;DN=800;IF SW1=0 THENDO;DI=DN;DO WHILE DI0;DI=DI-1;END;IF SW1=0 THEN DK=1;KEY$CODE=5AH; /*Enter*/PARITY=0FFH;END;IF SW2=0 THENDO;DI=DN;DO WHILE DI0;DI=DI-1;END;IF SW2=0 THEN DO;DK=2;KEY$CODE=76H; /*Esc*/PARITY=00H;END;IF SW3=0 THENDO;DI=DN;DO WHILE DI0;DI=DI-1;END;IF SW3=0 THEN DK=3;KEY$CODE=75H; /*8/up*/PARITY=00H;END;IF SW4=0 THENDO;DI=DN;DO WHILE DI0;DI=DI-1;END;IF SW4=0 THEN DK=4;KEY$CODE=72H; /*2/down*/PARITY=0FFH;END;IF SW5=0 THENDO;DI=DN;DO WHILE DI0;DI=DI-1;END;IF SW5=0 THEN DK=5;KEY$CODE=06H; /*F2*/PARITY=0FFH;END;IF SW6=0 THENDO;DI=DN;DO WHILE DI0;DI=DI-1;END;IF SW6=0 THEN DK=6;KEY$CODE=04H; /*F3*/PARITY=00H;END;IF SW7=0 THENDO;DI=DN;DO WHILE DI0;DI=DI-1;END;IF SW7=0 THEN DK=7;KEY$CODE=0CH; /*F4*/PARITY=0FFH;END;IF SW8=0 THENDO;DI=DN;DO WHILE DI0;DI=DI-1;END;IF SW8=0 THEN DK=8;KEY$CODE=05H; /*F1*/PARITY=0FFH;END;WDI=0;DN=0;T1$RET: ENABLE;END;/*INTERRUPT OF TIMER 0*/TIMER0:PROCEDURE INTERRUPT 1 USING 2;DISABLE;WDI=1;IF NUMBER=0 THENDO;KEY$CLK=0;KEY$DATA=1;END;ELSEDO;KEY$CLK=1;DI=4;DO WHILE DI0;DI=DI-1;END;IF (SHIFT$REG AND 01H)=0 THEN KEY$DATA=0;IF (SHIFT$REG AND 01H)=1 THEN KEY$DATA=1;DI=4;DO WHILE DI0;DI=DI-1;END;KEY$CLK=0;NUMBER=NUMBER-1;END;T0$RET:T0$INT=1;WDI=0;ENABLE;END;/*MAIN PROGRAM*/MAIN_PRG:SW1=1; /* INIT PORT */SW2=1;SW3=1;SW4=1;SW5=1;SW6=1;SW7=1;SW8=1;KEY$CLK=0;KEY$DATA=0;KEY$CODE=00H;PARITY=00H;SHIFT$REG=00H;NUMBER=11;T0$INT=0;DK=0;DI=0;DN=0;TMOD=10H; /*T1 MODE 1*/IE=0C8H; /*T1 interrupt enable *TCON=40H; /*T1 begin work */TH1=0BEH; /*T1 100Hz */TL1=0E6H;TH0=7BH; /*T0 16kHz*/TL0=7BH;ENABLE;MAIN$LOOP:IF DK=0 THEN GOTO MAIN$END;TMOD=02H; /*T0 BEGIN WORK*/IE=0C2H; /*T1 STOP WORK*/TCON=10H;T0$INT=0;SHIFT$REG=00H;WAIT1:IF T0$INT=0 THEN GOTO WAIT1; /*send S bit*/T0$INT=0;SHIFT$REG=KEY$CODE;WAIT2:IF T0$INT=0 THEN GOTO WAIT2; /*send Key$code*/SHIFT$REG=SHR(SHIFT$REG,1);T0$INT=0;IF NUMBER2 THEN GOTO WAIT2;SHIFT$REG=PARITY;WAIT3:IF T0$INT=0 THEN GOTO WAIT3; /*send parity bit*/T0$INT=0;SHIFT$REG=0FFH;WAIT4:IF T0$INT=0 THEN GOTO WAIT4; /*send ST bit*/T0$INT=0;DK=0;WAIT5:IF T0$INT=0 THEN GOTO WAIT5; /* KEY$CLK=0 for 300us*/T0$INT=0;DK=DK+1;IF DK2 THEN GOTO WAIT12;SHIFT$REG=0FFH;WAIT13:IF T0$INT=0 THEN GOTO WAIT13; /*send parity bit*/T0$INT=0;SHIFT$REG=0FFH;WAIT14:IF T0$INT=0 THEN GOTO WAIT14; /*send ST bit*/T0$INT=0;DK=0;WAIT15:IF T0$INT=0 THEN GOTO WAIT15; /* KEY$CLK=0 for 300us*/T0$INT=0DK=DK+1;IF DK2 THEN GOTO WAIT22;SHIFT$REG=PARITY;WAIT23:IF T0$INT=0 THEN GOTO WAIT23; /*send parity bit*/T0$INT=0;SHIFT$REG=0FFH;WAIT24:IF T0$INT=0 THEN GOTO WAIT24; /*send ST bit*/T0$INT=0;DK=0;WAIT25:IF T0$INT=0 THEN GOTO WAIT25; /* KEY$CLK=0 for 300us*/T0$INT=0;DK=DK+1; IF DK4 THEN GOTO WAIT25;KEY$CLK=1;KEY$DATA=1;T0$INT=0;DK=0;IE=00H; /*T0 STOP WORK*/TCON=00H;DO DI=1 TO 300; /*DELAY TIME*/CALL TIME(20
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人煤矿出售合同范本
- 入学教育心得体会左右大学五篇
- 文化教育合作协议书
- 娱乐游戏活动策划方案
- 商品购销合同的基本要素
- 环境评价公众参与机制在2025年公众参与评价体系构建中的应用报告
- 病历采集试题及答案
- 2025年数学阅读能力题库及答案
- 视唱模拟考试试题及答案
- 2025年食品科学与工程考公务员面试题(附答案+解析)
- 公路铣刨机转向桥关键结构疲劳寿命的深度剖析与精准预测
- 民事起诉状要素式(民间借贷纠纷)
- 幼儿园健康预防蚊虫叮咬
- 肺孢子菌肺炎护理查房
- 三级安全教育培训试题(含答案)
- 绿城好房子建设的理念与实践
- 茶叶施肥技术课件
- 老人进食护理课件
- 开学第一课:反诈教育主题班会
- 2025年湖南省长沙市中考物理试卷(含答案)
- 污水处理厂二期成套设备供货及安装调试项目施工组织设计
评论
0/150
提交评论