MOVX A,@DPTR CPL A ANL A,#0FH RET OUT1:MOV 50H,#1 OUT:
7
19. 用C语言编写出定时扫描方式下矩阵键盘的处理程序。
F1和F2标志已在主函数前定义。
//************检测有无键按下函数************
uchar checkkey() //检测有无键按下函数,有返回0xff,无返回0 {uchar i;
XBYTE[0x7f00]=0x00; i=XBYTE[0x7f02]; i=i&0x0f;
if (i= =0x0f) return(0); else return(0xff); }
//************键盘扫描函数************
uchar keyscan()//键盘扫描函数,如果有键按下,则返回该键的编码,如果无键按下,则返回0xff {uchar scancode; //定义列扫描码变量 uchar codevalue; //定义返回的编码变量 uchar m; //定义行首编码变量 uchar k; //定义行检测码 uchar i,j;
if (checkkey()= =0) return(0xff); //检测有无键按下,无返回0xff else
{delay(200); //延时
if(checkkey()= =0) return(0xff); //检测有无键按下,无返回0xff else {
scancode=0xfe;m=0x00; //列扫描码,行首码赋初值 for (i=0;i<8;i++) {k=0x01;
XBYTE[0x7f00]=scancode; //送列扫描码 for (j=0;j<4;j++)
{if ((XBYTE[0x7f02]&k)= =0) //检测当前行是否有键按下 {codevalue=m+j; //按下,求编码 while(checkkey()! =0); //等待键位释放 return(codevalue); //返回编码 m=m+8; //计算下一行的行首编码 }
else k=k<<1; //行检测码左移一位 }
scancode=scancode<<1; //列扫描码左移一位,扫描下一列 }
} } }