欢迎来到天天文库
浏览记录
ID:28197256
大小:171.70 KB
页数:6页
时间:2018-12-08
《实验3行列式键盘》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、实验3行列式键盘一.实验目的1、了解行列式键盘的工作原理2、掌握行列式键盘的程序设计方法二.实验器材单片机开发板、电脑三.实验任务编写行列式键盘的驱动程序,在液晶显示屏上边显示所按键的编号四.实验原理1、行列式键盘的硬件电路LCDQpRSRWEPl)P25P26P21PI7PI6PI5P14PIOSTC89C52PHP12Pl3行列式键盘接U原理图4X4的行列式键盘由行线和列线组成。行线对应的接口力P10〜P13,列线对应的接口为P14〜P17。利用单片机编程扫描是否有按键按下的吋候,将行线P10〜
2、P13设为高电平1(即输出数字1)。列线P14〜P17设为0,再读冋行线P10〜P13的数值,就可以知道是否有按键按下。如果有键按下,则行线输入的信号就不全为1,例如,K5按下,则行线输入的信号就会变成1101。在行列式的键盘中,通常分三个步骤处來检测、识别和处理键盘的事件。第一步为是否有键按下的检测。将列线输出为0000,读入行线的数值,如果读入的为1111,则表示没有键盘按下。如果不全为1,就表示有键盘按下。第二步,如果检测到有键按下,就要识别到底那个键按下。列线在同一时间只有一根线输出为低,其
3、他三根为高电平,然后再根据行线读入的数值就可以知道到底是哪个键按丁。有键按下时对应的IO口的数值如下表所示。其中IO口的设定值中,高四位为列线,低四位为行线的状态。第三步,识别出按键后,等按键释放后就可根据按键的编号进行相应的处理。按键与10口变化对应表P1口设定值对应键按下时读回的数值K0键K1键K2键K1键1111111011101110110111101011111001111110OxfeOxeeOxdeOxbe0x7eK4键K5键K6键K7键111111011110110111011101
4、1011110101111101OxfdOxedOxddOxbdOx7dK8键K9键K9键K11键1111101111101011110110111011101101111011OxfbOxebOxdbOxbb0x7bK12键K13键K14键K15键11110111111001111101011110110111()11101110xf70xe7Oxd7Oxb70x772.五1.2.3.键盘识别流程实验步骤建立.T程文档key.uv2新建key.c文件,并加入工程项目中。在key.c巾加入下列程序代
5、码。如下页所示。i只别某个键按F流程includenreg52.hn#defineuintunsignedint#defineucharunsignedchar产LCD端口定义*///LCD端口要根据实际的连接情况分配IO#definebusy0x80sbitRS=P2A5;sbitRW=P2A6;sbitE=P2A7;sfrLCDData=0x80;//0x80-P0,0X90-P1,0xa0-P2,0xb0-P3/*键盘端口定义*/sfrkeyport=0x90;/氺氺氺沴氺氺氺氺氺沴氺承^氺氺
6、氺氺氺氺氺氺氺*氺*氺*氺*氺*氺*/voidDelay(uinti){while(i—);}/*写指令函数*/voidWrite_Instruction(ucharx){Delay(lOOO);E=0;RW=0;RS=0;LCDData=x;E=l;Delay(20);E=0;)/*写单个数据的函数*/voidWrite_Data(ucharx){Delay(lOOO);E二0;RW=0;RS=1;E=l;LCDData=x;E=0;}/*写入一串字符串函数*/voidWrite一String(u
7、charx,uchar*p){Writejnstruction(x);while(*p!=OxOO){Write一Data(*p);P++;if(x++==0x8f){Write_Instruction(OxcO);}}}/*初始化函数*/voidInitLCD(void){Write_Instruction(0x38);Delay(200);Write_Instruction(OxOe);Delay(200);Write_lnstruction(0x06);Delay(200);}氺*氺氺氺*氺*
8、氺氺糸氺承氺承氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺氺//氺氺氺氺氺氺氺氺^#3
9、^@$¥$氺*氺*氺*氺*氺*氺*氺*氺*氺*///将键盘的行线没为企1,列线没为全0,再读回行线,如果不为企1,有键按下//有键按下,返回1,无键按下,返回0bitReadKey(void){bitdat;keyport=OxOf;//键盘口高四位列线为0,第四位行线为1if(keyport==()xOf){ciat=O;//没有按键按下)elsedat=l;//当前有按键按下)retu
此文档下载收益归作者所有