- #include<reg51.h>
- char led_mod[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
- char key_buf[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
- 0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
- char getkey()
- {
- char key_scan[]={0xef,0xdf,0xbf,0x7f};
- char i=0,j=0;
- for(i=0;i<4;i++){
- P1=key_scan[i];
- if((P1&0x0f)!=0x0f){
- for(j=0;j<16;j++){
- if(key_buf[j]==P1) return j;
- }
- }
- }
- return -1;
- }
- void main(){
- char key=0;
- P0=0xFF;
- while(1){
- key=getkey();
- if(key!=-1) P0=led_mod[key];
- }
- }
复制代码 通过单片机的P1口控制4*4矩阵键盘,并使用P0口输出键值,在LED数码管上显示,可实现0到F的16进制显示
Proteus仿真见附件
|