1、5.4 人机接口电路设计及编程5.4.1 键盘电路设计及编程1. 电路键盘接口电路 如图 5-12所示 ,板上扩展了一个 44行列式矩阵键盘接口。该键盘采用中断扫描方式进行工作 ,行线选用 PORTG47输出,列线选用 PORTF58为输入。行线 接上拉电阻保持高电平,并通过 “与 ”门将输出信号与 MCU的中断 EXINT0连接; 列线 接上拉电阻保持高电平。2. 编程(1) I/O口和中断初始化 I/O引脚设置:rPDATE=0X60;rPCONF=0x2A; 列线 PORTF58为输入rPUPF=0x0; 列线接上拉电阻rPDATG=0x0; rPCONG=0x55FF; 行线 PORT
2、G47输出, PORTG0作为 EXINT0连接rPUPG=0x0; 行线接上拉电阻 中断初始化rINTCON=0x5; / 非向量模式 ,IRQ 允许 ,FIQ 禁止rINTMOD=0x0; / 全部 IRQ 模式rINTMSK =(BIT_GLOBAL|BIT_EINT0);/EXINT0允许, 所有中断屏蔽位允许pISR_EINT0=(unsigned)keyboard_ISR; /指定中断服务程序(2) 程序将行线 PORTG47输出为低电平,当有键盘按下时,该行线被拉为低电平,使得EXINT0输入也为低电平, MCU产生中断。 中断产生后通过对键盘的行和列进行扫描的方法,可以计算出是
3、哪个键按下,并跳到相应的键盘处理程序中去。void keyboard_ISR(void) char x,y,xrecord,yrecord,temp;rI_ISPC=BIT_EINT0; /clear pending_bitDelay(400); /delay 40msif(rPDATF /no keyboard press,returnelsex=1;y=1;xrecord=(rPDATFxrecord=xrecord4; while(xrecord!=0x1) /judge rowx=x+1;xrecord=xrecord1;if(xrecord=0) rPDATG=0X0F; / no ,returnreturn 0;Delay(200); /delay 20msrPDATG=0XEF; /input high