/*按下16个矩阵键盘依次在数码管上显示1-16的平方。如按下第一个显示1,
第二个显示4...*/
要实现的功能就是这个了,程序烧进去之后,却有一点不一样,当按下第五个键,显示24,;第十个键时,显示的是99;12显示的是143;
13显示的是168,这三个比正常小1,其他正常,我用vs测试了POW函数,也没有什么问题。还有一个问题就是,在
前三个键不该显示的部分有一点隐隐,我已经在位锁存前加了P0=0xff;还是有浅浅的影子(段锁存加了0)。程序有点长,希望有人看看。3q
//2013 -8-11
#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
sbit duan=P2^6;
sbit wei=P2^7;
uchar code tableduan[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0xff,0x6f
};
uint tablewei[]={
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f
};
uint getx();
void display(uint);
void yanshi(uchar z)
{
uchar a,b;
for(a=z;a>0;a--)
for(b=110;b>0;b--);
}
uint temp ,x;
uint bai,shi,ge;
void main()
{
while(1)
{
display(getx());
}
}
uint getx()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
yanshi(7);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:x=pow(1,2);
break;
case 0xde:x=pow(2,2);
break;
case 0xbe:x=pow(3,2);
break;
case 0x7e:x=pow(4,2);
break;
}
if(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
yanshi(7);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:x=pow(5,2);
break;
case 0xdd:x=pow(6,2);
break;
case 0xbd:x=pow(7,2);
break;
case 0x7d:x=pow(8,2);
break;
}
if(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
yanshi(7);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:x=pow(9,2); //平方函数
break;
case 0xdb:x=pow(10,2);
break;
case 0xbb:x=pow(11,2);
break;
case 0x7b:x=pow(12,2);
break;
}
if(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
yanshi(7);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:x=pow(13,2);
break;
case 0xd7:x=pow(14,2);
break;
case 0xb7:x=pow(15,2);
break;
case 0x77:x=pow(16,2);
break;
}
if(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
return x;
}
void display(uint x)
{
bai=x/100;
shi=x%100/10;
ge=x%10;
P0=0xff;
wei=1;
P0=tablewei[0];
wei=0;
P0=0xff;
duan=1;
P0=tableduan[bai];
duan=0;
yanshi(10);
P0=0xff;
wei=1;
P0=tablewei[1];
wei=0;
P0=0xff;
duan=1;
P0=tableduan[shi];
duan=0;
yanshi(10);
P0=0xff;
wei=1;
P0=tablewei[2];
wei=0;
P0=0xff;
duan=1;
P0=tableduan[ge];
duan=0;
yanshi(10);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>