为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 51单片机标准PS2键盘

51单片机标准PS2键盘

2018-03-21 7页 doc 19KB 15阅读

用户头像

is_005190

暂无简介

举报
51单片机标准PS2键盘51单片机标准PS2键盘 HJ-1G 51单片机标准PS2键盘输入实验2009年08月15日 星期六 20:51/************************************************************************************************** *** 慧净电子1天入门、10天学会、1年精通单片机与C语言视频教程配套程序源码 *** *** 实验目的:HJ-1G 开发板 *** *** MCU: STC89C52/AT89C52 部分C源码可以直接用...
51单片机标准PS2键盘
51单片机标准PS2键盘 HJ-1G 51单片机标准PS2键盘输入实验2009年08月15日 星期六 20:51/************************************************************************************************** *** 慧净电子1天入门、10天学会、1年精通单片机与C语言视频教程配套程序源码 *** *** 实验目的:HJ-1G 开发板 *** *** MCU: STC89C52/AT89C52 部分C源码可以直接用于项目开发、欢迎复制共享、功德无量、 没有版权 *** *** 作者:慧净助学会员 网上收集整理 *** *** 编译器:KEIL *** *** 百度交流空间:*** *** 论坛交流: 欢迎来论坛一分钱不要下载配套的仿真电路 *** *** 配套的硬件学习板网址:*** *** 日期:2008.8.8 *** *** 目标:用C语言写程序就这么简单、慧争祝你1天入门、10天学会、1年精通单片机与 C语言、找个好工作 *** ***************************************************************************************************/ /*说明:此程序使用标准PS2键盘输入,LCD1602液晶屏输出显示。此样例仅作测试使用 晶振使用12M或者11.0592M,本键盘使用部分字母和数字测试,其他按键不能使用,用 户可以自行扩展。由于开发板和程序的各种参数,程序中没有使用奇偶校验,不保证没有 误码,校验程序请自行添加。 */ //注意:接上标准PS2键盘后,按下键盘后,LCD1602才会显示出相关字母 #include //包含头文件 #include "scancodes.h" #include "LCD1602.h" sbit Key_Data = P3^1;//定义Keyboard引脚 //sbit Key_CLK =P3^2; //使用中断 //sbit Key_Data = P3^1;//定义Keyboard引脚 sbit Key_CLK =P3^2; //使用中断 bit BF; bit Shift; //定义上档键标志 bit Key_UP; //定义通码断码标志 unsigned char KeyV; unsigned char IntNum; unsigned char DisNum; void Decode(unsigned char ScanCode);//解码子程序 void main() { IT1 = 0; //设外部中断1为低电平触发 EA = 1; //外部中断开 EX0 = 1; //开中断 InitLcd();//初始化1602液晶屏 do { if (BF) Decode(KeyV); else EA = 1; //开中断 } while(1); } void Keyboard_out(void) interrupt 0 { if ((IntNum > 0) && (IntNum < 9)) { KeyV = KeyV >> 1; //因键盘数据是低>>高,结合上一句所以右移一位 if (Key_Data) KeyV = KeyV | 0x80; //当键盘数据线为1时到最高位 } IntNum++; while (!Key_CLK); //等待PS/2CLK拉高 if (IntNum > 10) { IntNum = 0; //当中断11次后示一帧数据收完,清变量准备下一次接收 BF = 1; //标识有字符输入完了 EA = 0; //关中断等显示完后再开中断 } } void Decode(unsigned char ScanCode) //注意:如SHIFT+G为12H 34H F0H 34H F0H 12H, 也就是说shift的通码+G的通码+shift的断码+G的断码 { unsigned char TempCyc; if (!Key_UP) //当键盘按下时 { switch (ScanCode) { case 0xF0 : // 当收到0xF0,Key_UP置1表示断码开始 Key_UP = 1; break; case 0x12 : // 左 SHIFT Shift = 1; break; case 0x59 : // 右 SHIFT Shift = 1; break; default: if(!Shift) //如果SHIFT没按下 { for (TempCyc = 0;(UnShifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示 if (UnShifted[TempCyc][0] == ScanCode) { ShowChar(DisNum,UnShifted[TempCyc][1]); DisNum++; if(DisNum==32) { WriteCommand(0x01);//清屏 DisNum=0;//重头写数据 } } } else //按下SHIFT { for(TempCyc = 0; (Shifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示 if (Shifted[TempCyc][0] == ScanCode) { ShowChar(DisNum,Shifted[TempCyc][1]); DisNum++; if(DisNum==32) { WriteCommand(0x01);//清屏 DisNum=0;//重头写数据 } } } break; } } else { Key_UP = 0; switch (ScanCode) //当键松开时不处理判码,如G 34H F0H 34H 那么第二个34H不会被处 理 { case 0x12 : // 左 SHIFT Shift = 0; break; case 0x59 : // 右 SHIFT Shift = 0; break; } } BF = 0; //标识字符处理完了 }
/
本文档为【51单片机标准PS2键盘】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索