/* 3x4矩阵键盘的扫描程序 按相应的按键,数码管显示相应的数字,星号键和井号键分别显示为E和F ********************************* Create by:左秀龙 support: Tel:0755-82879296 email: cutedesign@tom.com Date: 2005/06/23 ********************************* 测试通过*/
#include
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
void Dispaly(unsigned char k) //显示程序 { P0=table[k]; P2_1=0; } |