缘由这个单片机16个按键显示平方的程序实现不了啊,数码管会闪烁 - 24小时必答区
#include "reg52.h"
bit k=0;//标记
unsigned char code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴0~15
unsigned char code ShaoMiaoZhi[]={238,237,235,231,222,221,219,215,190,189,187,183,126,125,123,119};
unsigned char JianPanShaoMiao(/*使用行列反转扫描法*/)
{
unsigned char H=15,L=240,Ys=0;
P1=15;
if(P1!=15)
{
while(++Ys);//消抖
H=P1;
P1=240;
L=P1;
while(P1!=240);
}
P1 = 255;
return (H+L);
}
unsigned char JianPanQuZhi(/*定义按钮*/)
{
unsigned char Jian_Zhi=0,LinShi=JianPanShaoMiao();
if(LinShi==255)return LinShi;else//减小对延时影响提高运行效率
while(LinShi!=ShaoMiaoZhi[Jian_Zhi])if(++Jian_Zhi > 15)break;//if(LinShi!=255)
return Jian_Zhi;
}
void main()
{//缘由https://bbs.youkuaiyun.com/topics/396577304?page=1#post-411560687 https://ask.youkuaiyun.com/answers/1282564/edit
unsigned char jz=0,wei=128,ge=0;//键值 位
unsigned int Ys=47474,zhi=0,ls=0;
while(1)
{
if(--Ys==0)
{
jz=JianPanQuZhi();
if(jz!=255){ls=zhi=jz*jz;wei=128;}
if(zhi)
{
P3=wei;
ge=zhi-zhi/10*10;
P2=~smgduan[ge];//数码管静态显示
zhi/=10;
if(!(wei/=2))++wei;//数码管动态显示
}
else {wei=128;P2=255;zhi=ls;}
Ys=747;
}
}
}
#include "reg52.h"
bit k=0;//标记
unsigned char code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴0~15
unsigned char code ShaoMiaoZhi[]={1,2,4,8,16,32,64,128,254,253,251,247,239,223,191,127,238,237,235,231,222,221,219,215,190,189,187,183,126,125,123,119};
unsigned char JianPanShaoMiao(/*使用行列反转扫描法*/)
{
unsigned char H=15,L=240,Ys=0,zhi=H+L;
P1=zhi;
if(P1!=zhi){while(++Ys);zhi=P1;while(zhi==P1);return zhi;}
else P1=zhi+1;//~zhi;
if(P1!=~zhi){while(++Ys);zhi=P1;while(zhi==P1);return zhi;}
P1=15;
if(P1!=15)
{
while(++Ys);//消抖
H=P1;
P1=240;
L=P1;
while(P1!=240);
}
P1 = 255;
return (H+L);
}
unsigned char JianPanQuZhi(/*定义按钮*/)
{
unsigned char Jian_Zhi=0,LinShi=JianPanShaoMiao();
if(LinShi==255)return LinShi;else//减小对延时影响提高运行效率
while(LinShi!=ShaoMiaoZhi[Jian_Zhi])if(++Jian_Zhi > 31)break;//if(LinShi!=255)
return Jian_Zhi;
}
void main()
{//缘由https://bbs.youkuaiyun.com/topics/396577304?page=1#post-411560687 https://ask.youkuaiyun.com/answers/1282564/edit
unsigned char jz=0,wei=128,ge=0;//键值 位
unsigned int Ys=47474,zhi=0,ls=0;
while(1)
{
if(--Ys==0)
{
jz=JianPanQuZhi();
if(jz!=255){ls=zhi=jz*jz;wei=128;}
if(zhi)
{
P3=wei;
ge=zhi-zhi/10*10;
P2=~smgduan[ge];//数码管静态显示
zhi/=10;
if(!(wei/=2))wei=128;//数码管动态显示
}
else {wei=128;P2=255;zhi=ls;}
Ys=1747;
}
}
}