按下16个矩阵键盘依次在数码管上显示116的平方如按下第一个显示1第二个显示4.docx
《按下16个矩阵键盘依次在数码管上显示116的平方如按下第一个显示1第二个显示4.docx》由会员分享,可在线阅读,更多相关《按下16个矩阵键盘依次在数码管上显示116的平方如按下第一个显示1第二个显示4.docx(7页珍藏版)》请在冰豆网上搜索。
按下16个矩阵键盘依次在数码管上显示116的平方如按下第一个显示1第二个显示4
按下16个矩阵键盘依次在数码管上显示1-16的平方。
如按下第一个显示1-第二个显示4...
按下16个矩阵键盘依次在数码管上显示1-16的平方。
如按下第一个显示1,第二个显示4...
Proteus仿真时,用的是元件库自带的矩阵键盘,分别代表1-16,仿真图如下:
#include
#defineuintunsignedint
#defineucharunsignedchar
voidinit();//初始化子程序
voiddelay(uint);//延时子程序
voiddisplay(uint);//显示子程序
uintkeyscan();//按键扫描子程序
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchartemp;
uintnum;
voidmain()
{
init();
while
(1)
display(keyscan());
}
voidinit()
{
num=0;
P2=0;
P1=0xff;
}
voiddelay(uintms)
{
uintx,y;
for(x=ms;x>0;x--)
for(y=110;y>0;y--);
}
voiddisplay(uinta)
{
ucharbai,ge,shi;
if(a==0)
{
P2=0;
P1=0xff;
}
else
{
if(a<10)
{
P2=table[a];
P1=0xfe;
}
elseif(a<100)
{
shi=a/10;
ge=a%10;
P2=table[shi];
P1=0xfe;
delay
(1);
P1=0xff;
P2=table[ge];
P1=0xfd;
delay
(1);
P1=0xff;
}
elseif(a<1000)
{
bai=a/100;
shi=a%100/10;
ge=a%10;
P2=table[bai];
P1=0xfe;
delay
(1);
P1=0xff;
P2=table[shi];
P1=0xfd;
delay
(1);
P1=0xff;
P2=table[ge];
P1=0xfb;
delay
(1);
P1=0xff;
}
}
}
uintkeyscan()
{
P3=0xfe;
temp=P3;
if(temp!
=0xfe)
{
delay(5);
temp=P3;
if(temp!
=0xfe)
{
switch(temp)
{
case0xee:
num=1;break;
case0xde:
num=4;break;
case0xbe:
num=9;break;
case0x7e:
num=16;break;
}
}
while(temp!
=0xfe)
temp=P3;
}
P3=0xfd;
temp=P3;
if(temp!
=0xfd)
{
delay(5);
temp=P3;
if(temp!
=0xfd)
{
switch(temp)
{
case0xed:
num=25;break;
case0xdd:
num=36;break;
}
}
while(temp!
=0xf7)
temp=P3;
}
returnnum;
}