ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:23.35KB ,
资源ID:2907225      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2907225.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(键盘解码程序.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

键盘解码程序.docx

1、键盘解码程序PS2键盘解码程序 实测可以使用 但一直搞不懂如何写入键盘。 就是不知道如何通过单片机控制键盘的CapsLock、NumLock灯的亮灭,希望大虾指点指点。感谢! =C文件= #include #includescancodes.h #includeps2kbd.h #includedelay.h /#includeLCD1602.h /*- 名称:PS2键盘驱动程序 日期:2010.11 修改:无 内容:通过单片机读/写PS2键盘 备注:本程序需使用外部中断口 -*/ /-IO引脚宏定义-/ sbitKey_Data=P30;/定义Keyboard引脚 sbitKey_CLK=P

2、32;/使用中断 /-结构体-/ /-标识特殊按键-/ staticstructkey_sign charShift:1;/上档键 charCapsLock:1; /大小写 charNumLock:1; /小键盘锁 Button; /-标志-/ bitBF; /解码完毕标志 bitKey_UP;/定义通码断码标志 bitE0Key=0; /E0开头的键盘码 bitParitycheck=1; /奇偶校验标志 unsignedcharKeyV; /键值 unsignedcharIntNum; /中断次数 /*/ /*函数声明*/ /*/ voidDecode(unsignedcharScanCo

3、de);/解码子程序 voidkeyVcache(unsignedcharkeyV); /键值入口,keyV就是解码后返回的键码 voidKeyboard_WRITE(unsignedcharsentchar);/写一字节到PS2键盘 /*- 名称:主机读取PS2键盘一字节 日期:2010.11 修改:无 内容:读取PS2键盘返回值(未解码),外部中断法 备注:键值存KeyV -*/ voidKeyboard_READ(void)interrupt0 if(IntNum0)&(IntNum=1;/因键盘数据是低高,结合上一句所以右移一位 if(Key_Data) KeyV|=0x80;/当键盘

4、数据线为1时到最高位 Paritycheck=Paritycheck;/奇偶校验位,数据奇数1为0 ; ; if(IntNum=9) if(Key_Data!=Paritycheck) KeyV=0x00; /奇偶校验错误,清空数据 ; ; IntNum+; while(!Key_CLK); /等待PS/2CLK拉高 if(IntNum10) IntNum=0;/当中断11次后表示一帧数据收完,清变量准备下一次接收 BF=1;/标识有字符输入完了 EA=0;/关中断等显示完后再开中断 Paritycheck=1; /一次接收接收,初始化奇偶校验位 ; /*- 名称:PS2键盘解码 日期:201

5、0.11 修改:无 内容:解码键盘返回值 传入:ScanCode键盘返回值 传出:无 相关寄存器:BF,Shift,CapsLock,NumLock,Key_UP,E0_Key -*/ voidDecode(unsignedcharScanCode)/注意:如SHIFT+G为12H34HF0H34HF0H12H,也就是说shift的通码+G的通码+shift的断码+G的断码 unsignedcharTempCyc; if(!Key_UP)/当键盘按下时 switch(ScanCode) case0xF0:/当收到0xF0,Key_UP置1表示断码开始 Key_UP=1; break; case

6、0x12:/左SHIFT Button.Shift=1; break; case0x58: /CapsLock键 Button.CapsLock=Button.CapsLock; break; case0x59:/右SHIFT Button.Shift=1; break; case0x77: /小键盘锁 Button.NumLock=Button.NumLock; break; case0xe0: /以E0开头的键码 E0Key=1; break; case0xFA: /键盘应答信号 break; default: /*如果数据不是F0,E0或LOCK键,则进行:查表对比键盘码,输出键值*/

7、if(Button.Shift)/如果SHIFT按下 for(TempCyc=0;(kbdasciicodeTempCyc0!=ScanCode)&(TempCyc49);TempCyc+);/查表显示 if(kbdasciicodeTempCyc0=ScanCode) keyVcache(kbdasciicodeTempCyc2);/返回大写字母或第二功能键值 break; ; else/没有按下SHIFT for(TempCyc=0;(kbdasciicodeTempCyc0!=ScanCode)&(TempCyc49);TempCyc+);/查表显示 if(kbdasciicodeTem

8、pCyc0=ScanCode) if(Button.CapsLock&(TempCyc27) /如果CapsLock有效且按下字母键 keyVcache(kbdasciicodeTempCyc2);/返回大写字母键值 else keyVcache(kbdasciicodeTempCyc1);/否则返回小写或第一功能键值 ; break; ; ; /带E0开头类按键查表 if(E0Key)/如果属于E0开头的键盘码 E0Key=0; for(TempCyc=0;(E0startedcodeTempCyc0!=ScanCode)&(TempCyc18);TempCyc+);/查表显示 if(E0s

9、tartedcodeTempCyc0=ScanCode) keyVcache(E0startedcodeTempCyc1); break; ; ; /控制类键以及小键盘按键查表 for(TempCyc=0;(kbdcontrolcodeTempCyc0!=ScanCode)&(TempCyc37);TempCyc+);/查表显示 if(kbdcontrolcodeTempCyc0=ScanCode) if(Button.NumLock&(TempCyc14) /NumLock上锁,小键盘不返回键码 else keyVcache(kbdcontrolcodeTempCyc1); ; ; ; ; else Key_UP=0; switch(ScanCode)/当键松开时不处理判码,如G34HF0H34H那么第二个34H不会被处理 case0x12:/左SHIFT Button.Shift=0; break; case0x59:/右SHIFT Button.Shift=0; break; ; ; BF=0;/标识字符处理完了 /*- 名称:主机写PS2键盘 日期:2010.11 修改:无 内容:写一个字节入PS2键盘 传入:sentchar传入键盘的数据

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1