3x4矩阵键盘的扫描程序(C语言) | |
发起人:admin1 回复数:0 浏览数:5944 最后更新:2009/10/30 13:48:38 by admin1 |
发表新帖 | 帖子排序: |
admin1 发表于 2009/10/30 13:48:39
|
3x4矩阵键盘的扫描程序(C语言) 3x4矩阵键盘的扫描程序(C语言)
按相应的按键,数码管显示相应的数字,星号键和井号键分别显示为E和F #include<AT89X51.h> unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99, //0~4 0x92,0x82,0xF8,0x80,0x90, //5~9 0x88,0x83,0xA7,0xA1,0x86,0x8E}; //A~F void KeyScan(); void delay10ms(unsigned char time); void Dispaly(unsigned char k); unsigned char key,temp; void main() //主程序 { while(1) { KeyScan(); } } void KeyScan() //按键扫描子程序 { P1=0xFF; P1_3=0; temp=P1; temp&=0xF0; if(temp !=0xF0) { delay10ms(1); temp=P1; temp&=0xF0; if(temp !=0xF0) { temp=P1; temp&=0xF0; switch(temp) { case 0x70: key=1;break; case 0xB0: key=2;break; case 0xD0: key=3;break; } Dispaly(key); } } P1=0xFF; P1_2=0; temp=P1; temp&=0xF0; if(temp !=0xF0) { delay10ms(1); temp=P1; temp&=0xF0; if(temp !=0xF0) { temp=P1; temp&=0xF0; switch(temp) { case 0x70: key=4;break; case 0xB0: key=5;break; case 0xD0: key=6;break; } Dispaly(key); } } P1=0xFF; P1_1=0; temp=P1; temp&=0xF0; if(temp !=0xF0) { delay10ms(1); temp=P1; temp&=0xF0; if(temp !=0xF0) { temp=P1; temp&=0xF0; switch(temp) { case 0x70: key=7;break; case 0xB0: key=8;break; case 0xD0: key=9;break; } Dispaly(key); } } P1=0xFF; P1_0=0; temp=P1; temp&=0xF0; if(temp !=0xF0) { delay10ms(1); temp=P1; temp&=0xF0; if(temp !=0xF0) { temp=P1; temp&=0xF0; switch(temp) { case 0x70: key=14;break; case 0xB0: key=0;break; case 0xD0: key=15;break; } Dispaly(key); } } } //延时程序 void delay10ms(unsigned char time) { unsigned char a,b,c; for(a=0;a<time;a++) for(b=0;b<10;b++) for(c=0;c<120;c++) ; } void Dispaly(unsigned char k) //显示程序 { P0=table[k]; P2_1=0; } |