- 1、本文档共117页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.4人机接口电路设计及编程.ppt
5.4 人机接口电路设计及编程 5.4.1 键盘电路设计及编程 1. 电路 键盘接口电路如图5-12所示,板上扩展了一个4×4行列式矩阵键盘接口。 该键盘采用中断扫描方式进行工作,行线选用PORTG4~7输出,列线选用PORTF5~8为输入。 行线接上拉电阻保持高电平,并通过“与”门将输出信号与MCU的中断EXINT0连接; 列线接上拉电阻保持高电平。 2. 编程 (1) I/O口和中断初始化 ① I/O引脚设置: rPDATE=0X60; rPCONF=0x2A; 列线PORTF5~8为输入 rPUPF=0x0; 列线接上拉电阻 rPDATG=0x0; rPCONG=0x55FF; 行线PORTG4~7输出, PORTG0作为EXINT0连接 rPUPG=0x0; 行线接上拉电阻 ② 中断初始化 rINTCON=0x5; // 非向量模式,IRQ 允许,FIQ 禁止 rINTMOD=0x0; // 全部IRQ 模式 rINTMSK =~(BIT_GLOBAL|BIT_EINT0); //EXINT0允许, 所有中断屏蔽位允许 pISR_EINT0=(unsigned)keyboard_ISR; //指定中断服务程序 (2) 程序 将行线PORTG4~7输出为低电平,当有键盘按下时,该行线被拉为低电平,使得EXINT0输入也为低电平,MCU产生中断。 中断产生后通过对键盘的行和列进行扫描的方法,可以计算出是哪个键按下,并跳到相应的键盘处理程序中去。 void keyboard_ISR(void) { char x,y,xrecord,yrecord,temp; rI_ISPC=BIT_EINT0; //clear pending_bit Delay(400); //delay 40ms if((rPDATF0x1E0)==0x1E0) { return 0; //no keyboard press,return } else { x=1; y=1; xrecord=(~((rPDATF0x1E0)1)); xrecord=xrecord4; while(xrecord!=0x1) //judge row { x=x+1; xrecord=xrecord1; if(xrecord==0) { rPDATG=0X0F; // no ,return return 0;} } Delay(200); //delay 20ms rPDATG=0XEF; //input high while((rPDATF0x1E0)==0x1E0) { rPDATG=rPDATG1; temp=rPDATG; if((temp0xf0)==0XF0) //noboard press,return { rPDATG=0X0F; return 0;} } Delay(200); //delay 10ms yrecord=~((rPDATG0xF0)4)0x0F; while(yrecord!=0x1) // judge line { y=y+1; yrecord=yrecord1; if(yrecord==0) { rPDATG=0X0F; //no board press,return return 0;} } Led_Display(x+(y-1)*4-1); Uart_Printf(%3d,x+(y-1)*4-1); Delay(1200);
文档评论(0)