logo资料库

51单片机矩阵键盘和点阵的同时扫描程序.docx

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
#include #define uint unsigned int #define uchar unsigned char uint key=200,temp,i,a,num,num1,num2,qian,bai,shi,ge; void keyscan() { //第一行键送低电平 P2=0xfe; temp=P2; if((temp&0xfe)!=0xfe) { delay(10); if((temp&0xfe)!=0xfe) { switch(temp) { case 0xee: key=0; break; case 0xde: key=1; break; case 0xbe: key=2; break; case 0x7e: key=3; break; } while(temp!=0xfe) temp=P2; num++; P0=0xf0; wela=1; wela=0; P0=table[key]; dula=1; dula=0; delay(5); //按一次键 num 自加一次,从而实现累加 //把当前被按下的键值显示在中间的数码管 //第二行键送低电平 上 } } P2=0xfd; temp=P2; if((temp&0xfd)!=0xfd) { delay(10); if((temp&0xfd)!=0xfd) { switch(temp) {
case 0xed: key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; } while(temp!=0xfd) temp=P2; num++; P0=0xf0; wela=1; wela=0; P0=table[key]; dula=1; dula=0; delay(5); 上 } } //把当前被按下的键值显示在中间的数码管 //第三行键送低电平 P2=0xfb; temp=P2; if((temp&0xfb)!=0xfb) { delay(10); if((temp&0xfb)!=0xfb) { switch(temp) { case 0xeb: key=8; break; case 0xdb: key=9; break; case 0xbb: key=10; break; case 0x7b: key=11; break; } while(temp!=0xfb) //检测键盘是否被释放 temp=P2; num++; P0=0xf0; wela=1; wela=0; P0=table[key]; dula=1; dula=0; delay(5); 上 //把当前被按下的键值显示在中间的数码管
//第四行键送低电平 } } P2=0xf7; temp=P2; if((temp&0xf7)!=0xf7) { delay(10); if((temp&0xf7)!=0xf7) { switch(temp) { case 0xe7: key=12; break; case 0xd7: key=13; break; case 0xb7: key=14; break; case 0x77: key=15; break; } while(temp!=0xf7) //检测键盘是否被释放 temp=P2; num++; P0=0xf0; wela=1; wela=0; P0=table[key]; dula=1; dula=0; delay(5); } } } Void main() { While(1) { for(i=0;i<8;i++) { P0=0xff; le=1; le=0; P1=display[(8*key)+i]; P0=tab[i]; le=1; le=0; delay(1); //把当前被按下的键值显示在中间的数码管上 //移位,P1 控制阳极 //消影 //P0 控制阴极 //延时使点阵显示更亮,不写不行,延时太长会闪动
} Keyscan(); } }
分享到:
收藏