【51单片机6位数码管显示矩阵键值至右向左自左向右】2022-11-29

缘由51单片机实训实验报告-编程语言-CSDN问答

使用矩阵键盘模拟数字输入(s1-s9分别对应数字1-9,s10对应数字0)

显示于数码显示管上,最多显示6个数据,第一次按键的数字显示在最左侧,随

着后续键按下,前序数字随之右移,最新的数字显示在最左侧。(使用c语言)

cpp 复制代码
#include "reg52.h"
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;
	return Jian_Zhi;//按键排列
	//12 08 04 00
	//13 09 05 01
	//14 10 06 02
	//15 11 07 03
}
void main()
{//缘由https://bbs.csdn.net/topics/396577304?page=1#post-411560687 https://ask.csdn.net/answers/1282564/edit
	unsigned char jz=0,wei=128,ge=0,ys=0;//键值 位 数据2^8=256
	unsigned int Ys=747;//数据2^16=65536
	unsigned long m=1,zhi=0,ls=0;//模 值 存储 数据2^32=4294967296
	while(1)
	{
		jz=JianPanQuZhi();//矩阵值查看JianPanQuZhi
		if(jz!=255&&jz<10){ls=ls+jz*m;if(m<1000000)m*=10;else ls/=10;zhi=ls;}
//以下数码管显示,以上矩阵取值和运算
		P3=~wei;
		ge=zhi-zhi/10*10;
		P2=smgduan[ge];//数码管静态显示
		zhi/=10;
		if(!wei)wei=128;else wei/=2;//数码管动态显示
		if(!zhi){zhi=ls;wei=128;}
		while(++ys);P2=0;
	}
}
cpp 复制代码
#include "reg52.h"
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;
	return Jian_Zhi;//按键排列
	//12 08 04 00
	//13 09 05 01
	//14 10 06 02
	//15 11 07 03
}
void main()
{//缘由https://bbs.csdn.net/topics/396577304?page=1#post-411560687 https://ask.csdn.net/answers/1282564/edit
	unsigned char jz=0,wei=1,ge=0,ys=0,w=0;//键值 位 数据2^8=256
	unsigned int Ys=747;//数据2^16=65536
	unsigned long m=1,zhi=0,ls=0;//模 值 存储 数据2^32=4294967296
	while(1)
	{
		jz=JianPanQuZhi();//矩阵值查看JianPanQuZhi
		if(jz!=255&&jz<10){ls=ls*10+jz;if(++w>6)ls=ls-ls/1000000*1000000;zhi=ls;}
//以下数码管显示,以上矩阵取值和运算
		P3=~wei;
		ge=zhi-zhi/10*10;
		P2=smgduan[ge];//数码管静态显示
		zhi/=10;
		if(!wei)wei=1;else wei*=2;//数码管动态显示
		if(!zhi){zhi=ls;wei=1;}
		while(++ys);P2=0;
	}
}
相关推荐
wuminyu8 小时前
Kafka中sendfile与mmap实现机制解析
java·linux·c语言·jvm·c++
Blockbuater_drug9 小时前
FreeSASA: 开源 SASA 计算库,pip 一条命令替代 NACCESS
c语言·开源·sasa·freesasa·溶剂可及表面积·naccess·python api
开心就多写,一点就开心10 小时前
导演视听语言与分镜系统笔记(一):景别系统、机位视点与时空连贯性设计
笔记·aigc·镜头·电影
Logic10110 小时前
C语言/数据结构位运算题解:异或XOR找出蛋糕订单中的“VIP独特口味“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
Logic10111 小时前
C语言/数据结构位运算题解:异或XOR找出飞行棋中的“独特颜色棋子“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
疯狂打码的少年12 小时前
【计算机网络】IPv6基础(特点、表示法、与IPv4对比)
网络·笔记·计算机网络
总线通信小百科12 小时前
车队管理终端选型:一体化边缘计算机如何替代工控机+CAN卡组合
经验分享
Logic10113 小时前
C语言/数据动态规划题解:翻转一次子数组后的最大子数组和——四状态DP(O(n)时间O(1)空间)
c语言·数据结构·动态规划·时间复杂度·算法题·状态机dp·最大子数组和
糖糖单片机设计13 小时前
基于 STM32 的公交车定位与报站系统
stm32·单片机·嵌入式硬件
祖力5513 小时前
快速学会51单片机基础
单片机·嵌入式硬件·51单片机