C51线反转法,无法显示列变换,求助!!

我的程序如下:
#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接口

你在调用笔形码出现问题啊 还有 我给个简单的程序给你
#include <reg51.h> //此文件中定义了51的一些特殊功能寄存器
#include <intrins.h>
#define uchar unsigned char
uchar a,b,c,n;
uchar code Xianshi[16]={0x11,0xD7,0x98,0x92,0x56,0x32,0x30,0x97,
0x10,0x12,0x14,0x70,0x39,0xD0,0x38,0x3C } ; //笔芯码
uchar code Shuzhu[16]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b, 0xe7,0xd7,0xb7,0x77 } ; // 键码表
void delayms(uchar ms) // 延时子程序
{
uchar i;
while(ms--)
{
for(i = 0; i <125; i++);
}
}
void display() //显示程序
{
SBUF=Xianshi[n];
P2=Xianshi[n];
while(!TI);
TI=0;
// delayms(1) ;
}
void list()
{
for(n=0;n<=16;n++)
{
if(c==Shuzhu[n])
display();
}
}
void main()
{
while(1)
{
P1=0x0f;
c=P1;
if(c!=0x0f)
{
delayms(1);
if(c!=0x0f)
{
a=c;
P1=0xf0;
c=P1;
温馨提示:答案为网友推荐,仅供参考