我的程序如下:
#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;uchar key1,key2;uchar code key[4][4]={0,1,2,3,4,5,6,7,8,9,10,11 ,12,13,14,15};uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delayms(uint xms){ uint y,z; for(y=xms;y>0;y--) for(z=110;z>0;z--);}void scan(){ uchar i,j; dula=0; wela=0; P3=0x0f; if((P3&0x0f)!=0x0f) { delayms(5); if((P3&0x0f)!=0x0f) { switch(P3) { case 0x07:i=3;break; case 0x0b:i=2;break; case 0x0d:i=1;break; case 0x0e:i=0;break; default:break; } } } delayms(10); P3=0xf0; if((P3&0xf0)!=0xf0) { delayms(5); if((P3&0xf0)!=0xf0) { switch(P3) { case 0x70:j=3;break; case 0xb0:j=2;break; case 0xd0:j=1;break; case 0xe0:j=0;break; default:break; } } } key1=key[i][j]; }void main(){ wela=1; P0=0xc0; wela=0; while(1) { dula=0; wela=0; scan(); dula=1; P0=table[key1]; dula=0; delayms(500); }}
在51单片机上测试时候,按每一行都显示同一个数值,
如第一行4个按键都是0;第二行都是4;第三行都是8;第四行都是C;
后来我特意把J改变,发现是列变换没测出来,为什么.求助;
电路图如下:都是P3接口