矩阵式键盘程序设计

更新时间:2024-03-18 01:41:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

矩阵式键盘程序设计

(1)定义字型码表和10ms延时程序设计。4X4矩阵键盘的16个键分别对应0~9、A~F十六个字符,由于数码管显示使用共阴极LED数码管,所以字型码采用共阴极字型码。定义字型码表和软件去抖的10ms延时程序如下:

#include

/*定义0~9,A~F十六个字符的字型码表*/ unsigned char table[]=

{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; /*10ms延时程序*/

void delay10ms(void) {

unsigned char i,j; for(i=20;i>0;i--)

for(j=248;j>0;j--); }

(2)矩阵式键盘主程序设计。4X4矩阵键盘的各行接P0口的P0.0~P0.3,矩阵键盘的各列接P0口的P0.4~P0.7,P1口的P1.0~P1.7接数码管的各段。矩阵式键盘主程序如下:

void main() {

char k=0;

unsigned char tmp,key; P1=0x00;

P0=0x0f; // P0口低四位做输入口,先输出全1 tmp=P0; while(1) {

while(tmp==0x0f) //循环判断是否有键按下 {

P0=0x0f; //所有列输出低电平

tmp=P0; //读行信号 }

delay10ms(); //延时10ms去抖

P0=0x0f; //所有列输出低电平 tmp=P0; //再次读键盘状态

if(tmp==0x0f) continue; //如果无键按下则认为是按键抖动,重新扫描键盘 key=scan_key( ); //有键按下,调用键盘扫描程序,并把键值送key while(k!=-1)

{delay10ms();k=scan_key();}

P1=table[key]; //查表或字型编码送P1口,数码管显示闭合按键的编码 }

(3)矩阵式键盘扫描程序设计

unsigned char scan_key(void) //键盘扫描子程序 {

unsigned char n,scan,col,rol,tmp;

bit flag=0; //设有键按下标志位 scan=0xef;

P0=0x0f; //P0口低四位做输入口,先输出全1 for(n=0;n<4;n++) //循环扫描4列,从0列开始 {

P0=scan; //逐列送出低电平 tmp=~P0; //读行值,并取反 tmp=tmp&0x0f;

col=n; //保存列号到col flag=1;

/*判断哪一行有键按下,并保存行号到rol*/ if(tmp==0x01)

{ rol=0; break;} //第0行有键按下 else if(tmp==0x02)

{ rol=1; break;} //第1行有键按下 else if(tmp==0x04)

{ rol=2; break;} //第2行有键按下 else if(tmp==0x08)

{ rol=3; break;} //第3行有键按下 else

flag=0;

scan=(scan<<1)+1; }

if(flag==0)

return -1; else

return(rol*4+col); }

本文来源:https://www.bwwdw.com/article/3qf8.html

Top