矩阵式键盘原理图如图5-18所示,采用查表法编程,要求实现所按键值在共阳数码管显示。 程序编程如下 #include #include #define uchar unsigned char #define uint unsigned int uchar code c[17]={0xc0,0xf9,0xa4,0xb0,0x99, 0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0x3F};//共阳数码管顺序代码,请补充5、6编码,16进制小写表示,含标点。 uchar code k[16]={ 0xeb,0xe7,0xde,0xdd,0xdb,0xd7,0xbe,0xbd, 0xbb,0xb7,0x7e,0x7d,0x7b,0x77};//K0-K15按键闭合状态码数组,请依次补充K0、K1按键闭合状态码,含标点符号,16进制小写表示。 uint t; key_scan() //键盘扫描子函数,返回无符号字节变量 { ; //定义行扫描变量s,并赋初始值,P1.4先置低电平,16进制小写表示。 uchar i,j=0; for(i=0;i<4;i++) { ; //输出行扫描码 if( ) //如果本行有按下 { for(j=0;j<16;j++) //循环查表16次 //如果查到闭合状态码 ; //返回闭合兼序列 } else ; //如果本行无按下,行扫描码左移一位 } } void main() { P2=c[16]; ; //外部中断0触发方式边沿触发 ; //开放外部中断0,其他中断关闭 while(1) { P1=0x0f; for(t=0;t<2000;t++); } } void int0() interrupt 0 { for(t=0;t<2000;t++); ; //再发键值搜索信号,置行线低电平,列线高电平 if(P1!=0x0F) { ; //调用键盘扫描函数,并送P2口显示 } }