|
今天很郁闷,话了很久写了个程序,就是按下16个矩阵键盘依次在数码管上显示1-16的平方。如按下第一个显示1,第二个显示4...
但是怎么只就显示第一个 到 第8个键呢,就是 是显示001 到081, 到案第十个键的时候就不行了。第10个键 应该是100.按键次数多了,学习版就死机了。
找了个群问了下, 都说我程序乱七八糟。课我觉程序比较清楚啊;
就是 利用num的返回值。 然后i=num*num。 然后i=aa*aa; 分离参数。 最后调用。 望大家指点一下,谢谢。
bai=i/100;
shi= i%100/10;
ge=i%10;
程序如下;
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0x02 , 0x9F, 0x25, 0x0D , 0x99 ,
0x49 , 0x40, 0x1F, 0x00, 0x08,
0x10, 0xC0, 0x62, 0x84, 0X60, 0x70 ,0};
uchar temp,num,aa,bai, shi, ge ;
uint i;
void display(uchar bai, uchar shi,uchar ge) ;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar keyscan() ;
main()
{
while(1)
{
aa=keyscan();
i=aa*aa;
bai=i/100;
shi= i%100/10;
ge=i%10;
display( bai, shi, ge);
}
}
void display(uchar bai, uchar shi, uchar ge )
{
P2=0X04;
P0=table[bai];
delay(5);
P2=0X02;
P0=table[shi];
delay(5);
P2=0x01;
P0=table[ge];
delay(5);
}
uchar keyscan()
{
P1=0xfe;
delay(1) ;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0) //松手检测
{
delay(5);
temp=P1;
switch(temp)
{
case 0xee: num=1; break;
case 0xde: num=2; break;
case 0xbe: num=3; break;
case 0x7e: num=4; break ;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
P1=0xfd;
delay(1);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
switch(temp)
{
case 0xed: num=5; break;
case 0xdd: num=6; break;
case 0xbd: num=7; break;
case 0x7d: num=8; break ;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
P1=0xfb;
delay(1);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
switch(temp)
{
case 0xeb: num=9; break;
case 0xdb: num=10; break; //问题在这里就不正常显示了。
case 0xbb: num=11; break;
case 0x7b: num=12; break ;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
P1=0xf7;
delay(1);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
switch(temp)
{
case 0xe7: num=13; break;
case 0xd7: num=14; break;
case 0xb7: num=15; break;
case 0x77: num=16; break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
return num;
}
|
|