单片机矩阵1到16平方数码管显示Word文档下载推荐.docx
《单片机矩阵1到16平方数码管显示Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机矩阵1到16平方数码管显示Word文档下载推荐.docx(8页珍藏版)》请在冰豆网上搜索。
![单片机矩阵1到16平方数码管显示Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-11/30/6df28466-f7d2-440c-b8a1-5ae997c0e2d1/6df28466-f7d2-440c-b8a1-5ae997c0e2d11.gif)
//无符号字符整型变量定义
voiddelay(uintz)//延时函数
{
uinti,j;
//局部变量定义I,j
for(i=z;
i>
0;
i--)//for循环先循环外循环再循环内循环
for(j=110;
j>
j--);
}
anjian()//16矩阵按键函数
P1=0xfe;
//先把P1口给fe
butt=P1;
//P1口的fe给变量按键butt
butt=butt&
0xf0;
//让butt和0xf0与一下,给下面好做判断
if(butt!
=0xf0)//如果与完之后的butt不等于0xf0,那么就有按键被按下
{
delay(3);
//延时下防抖确认是不是抖动错误按下的
//再把P1口断码给按键变量因为按键变量刚才和0xf0.变量变化了所以要重新赋值
//再与一次是给下面做判断的
=0xf0)//如果是真的butt!
=0xf的话就是有按键按下去。
//再把P1断码给butt
switch(butt)//判断变量butt如果是什么就执行后面的语句,break是跳出循环的。
下面的第二排按键同理就不做介绍了。
{
case0xee:
num=1;
break;
case0xde:
num=2;
break;
case0xbe:
num=3;
case0x7e:
num=4;
}
while(!
butt)
{
while(butt!
=0xf0)
{
delay
(2);
butt=P1;
}
}
P1=0xfd;
switch(butt)
case0xed:
num=5;
case0xdd:
num=6;
case0xbd:
num=7;
case0x7d:
num=8;
delay
(2);
}
}
P1=0xfb;
{
case0xeb:
num=9;
case0xdb:
num=10;
case0xbb:
num=11;
case0x7b:
num=12;
P1=0xf7;
case0xe7:
num=13;
case0xd7:
num=14;
case0xb7:
num=15;
case0x77:
num=16;
returnnum;
//返回来一个num值,1~16
pingfang(uchara)//调用num的值
zshu=a*a;
//调用到num的值再相乘就得到平方
baiwei=zshu/100;
//数位分解给数码管百位
shiwei=zshu%100/10;
//十位
gewei=zshu%100%10/1;
//个位
sm(uchara,ucharb,ucharc)//数码管扫描函数调用zshu的值
P3=0x01;
//点亮第一个数码管
P2=smg[a];
//将断码送给P2口
delay
(1);
//延时扫描下面同列
P3=0x02;
P2=smg[b];
P3=0x04;
P2=smg[c];
}
voidmain()//主函数
while
(1)//大循环
pingfang(anjian());
//函数调用
sm(gewei,shiwei,baiwei);
仿真图