51蛋骗鸡4*4矩阵按键实现平方值的数码管显示(含32键盘4*4矩阵并8+8独立同用一组IO)(含使用一片74HC573锁存器实现8位数码管驱动)

缘由这个单片机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;
		}
	}
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值