当前位置:首页 > 单片机 > 单片机
[导读] PS2键盘解码的基本原理是通过外部中断读取键盘输出的串行信号,在根据扫描码进行查表解码。键盘发送往主机的信号总是在时钟的下降沿因此此中断是在下降沿触发,且时钟信号是由键盘给出,因此使用P1口中

PS2键盘解码的基本原理是通过外部中断读取键盘输出的串行信号,在根据扫描码进行查表解码。键盘发送往主机的信号总是在时钟的下降沿因此此中断是在下降沿触发,且时钟信号是由键盘给出,因此使用P1口中断(已经在初始化端口时设置)。发送的数据位11位,第一位是起始位,总为0,紧接是8个数据位,然后是奇校验位,最后是停止位总为1.

本程序只能对基本按键(即键被按下时产生三个字节的扫描码的按键)做出解码,包括所有的可显示字符键和Table,Back Space和Ente三个特殊功能键。基本按键的扫描码由三个字节组成,第1个字节为接通码,第2、3字节为断开码;其中第1字节和第3字节相同,中间字节为断开标志0xf0。例如:通码和断码是以什么样的序列发送到你的计算机使得字符G 出现在你的字处理软件里呢?因为这是一个大写字母需要发生这样的事件次序按下Shift 键按下G 键释放G 键释放Shift 键,与这些时间相关的扫描码如下:Shift 键的通码12h G键的通码34h G 键的断码F0h 34h Shift 键的断码F0h 12h 因此发送到你的计算机的数据应该是12h 34h F0h 34h F0h 12h如果按键按着不放会连续发送通码命令,可以连续显示字符(没有验证,实验验证是可以的)。

具体的说明都已经在程序中做了注释,主程序,中断服务函数中读取键盘发送的值:


  1. /*****************************************************

  2. 程序功能:接收并解码来自标准键盘的基本按键的扫描码

  3. 然后在1602液晶上显示。按BackSpace键可以前向删除显

  4. 示字符,按Space键可以后向删除显示字符。

  5. -----------------------------------------------------

  6. 将拨码开关的SN74LVC2454和LCD位拨至ON

  7. 读取键盘的信号需要电平转换,注意设置SN74LVC2454的转换方向

  8. 跳线设置:将跳线座J13的B8脚和P1.7脚短接

  9. -----------------------------------------------------

  10. 测试说明:敲定标准键盘上的按键,观察液晶显示

  11. *****************************************************/

  12. #include

  13. #include"cry1602.h"

  14. #include"cry1602.C"

  15. #include"PS2Keyboard.h"

  16. #include"PS2Keyboard.C"

  17. #defineSIDvalP5IN&BIT6

  18. #defineBufferSize32//显示缓存大小

  19. unsignedcharbitcount=11;//位计数变量

  20. unsignedcharkb_buffer[BufferSize];//显示缓存

  21. unsignedcharinput=0;//数据压入缓存位置指针

  22. unsignedcharoutput=0;//数据弹出缓存位置指针

  23. unsignedcharpebit=0xff;//奇偶校验标志位

  24. unsignedcharrecdata=0;//接收到的数据

  25. unsignedchartishi[]={"thisisademo!"};

  26. /****************主函数****************/

  27. voidmain(void)

  28. {

  29. uchardisptmp,i;

  30. ucharx=0,y=0;

  31. ucharfirst=1;

  32. WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

  33. P6DIR|=BIT2;P6OUT&=~BIT2;//打开电平转换

  34. P2DIR|=BIT3;P2OUT|=BIT3;//方向5V-->3.3V

  35. /*------选择系统主时钟为8MHz-------*/

  36. BCSCTL1&=~XT2OFF;//打开XT2高频晶体振荡器

  37. do

  38. {

  39. IFG1&=~OFIFG;//清除晶振失败标志

  40. for(i=0xFF;i>0;i--);//等待8MHz晶体起振

  41. }

  42. while((IFG1&OFIFG));//晶振失效标志仍然存在?

  43. BCSCTL2|=SELM_2;//主时钟选择高频晶振

  44. LcdReset();//复位液晶

  45. DispNchar(0,0,15,tishi);//液晶显示提示信息

  46. Init_KB();//初始化键盘端口

  47. _EINT();//打开全局中断

  48. while(1)

  49. {

  50. LPM3;//进入低功耗模式

  51. if(first)

  52. {

  53. first=0;

  54. LcdWriteCommand(0x01,1);//显示清屏

  55. LcdWriteCommand(0x0f,1);//打开游标

  56. }

  57. disptmp=GetChar();//读取键值对应的ASCII码

  58. if(disptmp!=0xff)//取出了一个有效字符

  59. {

  60. if(disptmp==8)//如果是退格键

  61. {

  62. if((x==0)&&(y==0))//如果游标在第1行第1位

  63. {

  64. x=15;

  65. y=1;

  66. Disp1Char(x,y,0x20);//0x20是空格的ASCII码

  67. LocateXY(x,y);

  68. }

  69. elseif((x==0)&&(y==1))//如果游标在第2行第1位

  70. {

  71. x=15;

  72. y=0;

  73. Disp1Char(x,y,0x20);

  74. LocateXY(x,y);

  75. }

  76. else

  77. {

  78. Disp1Char(--x,y,0x20);

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

大家好,欢迎回来。在这个项目中,我们将学习如何使用键盘和LCD显示制作一个安全的基于Arduino的门锁。你可以用它来保护你的办公室、房间或家里的保险箱。要锁门和开锁,你需要在安全系统中输入密码。这确保了只有经过授权的人...

关键字: 键盘 LCD Arduino 电子门锁

随着电脑科技的飞速发展,作为电脑输入设备的重要组成部分,键盘的种类和功能也在不断演变。其中,机械键盘以其出色的手感、长久的使用寿命和高度个性化的特点,深受众多电脑用户的喜爱。而机械键盘的核心——键盘轴,更是决定键盘使用体...

关键字: 电脑 键盘 机械

键盘包括编码键盘和非编码键盘两种。编码键盘带有能够自动识别按键的硬件电路,当按键被按下闭合时,硬件可以提供按键的编号(也被称“键值”),这种键盘使用方便,但是硬件复杂,价格相对较高。非编码键盘不附带按键识别电路,需要利用...

关键字: 键盘 人机交互 编码键盘 非编码键盘

自俄乌冲突爆发之后,以苹果、戴尔、三星等为代表的科技企业,纷纷暂停了自己在俄罗斯当地的相关业务。在被这些企业断供之后,俄罗斯当地遇到了“以键盘为代表的PC外设出现缺货”的困扰。

关键字: PC 键盘

英国里士满2022年7月11日 /美通社/ -- 2022年7月11日,高性能电子产品压力传感触控用户界面的领先创新者Peratech公司宣布,其全系列压力传感技术将应用于最新的联想Legion 7i和7(16...

关键字: 联想 键盘 TE IO

上海2022年6月9日 /美通社/ -- 近期,雪碧视觉形象更新换代,以更加简洁清爽的白绿配色酷爽再出发,旋即发起了一场具有里程碑意义的全球营销活动"Heat Happens"(燥不可挡 酷爽以对)。...

关键字: BSP APP 大屏 键盘

摘要:为了实现智能仪表的人机交互功能,提出了一种采用具有串行接口的键盘显示驱动芯片TML638来对LED数码管及键盘进行管理的设计方案,给出了TM1638与单片机STC11F02进行接口的具体硬件设计方案和软件设计思想。

关键字: TM1638 数码管 键盘 智能仪表 显示电路

在这篇文章中,小编将为大家带来小米米物智能语音键盘的相关报道。

关键字: 米物智能语音键盘 键盘 智能

树莓派400(Raspberry Pi 400)将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对它的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 树莓派400 树莓派 键盘
关闭