单片机学习-使用矩阵按键来显示数码管0-F

这篇具有很好参考价值的文章主要介绍了单片机学习-使用矩阵按键来显示数码管0-F。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、硬件电路

单片机数码管数字显示的代码0-f,单片机学习-通用知识,电子元器件,51单片机,单片机,学习,嵌入式硬件

2.软件编程思想

矩阵按键分两种

1、行列扫码

//数码管字摸
u8 gsmg_code[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};      //共阴 显示0-F文章来源地址https://www.toymoban.com/news/detail-765470.html

#include "reg52.h"

// 类型重命名
typedef unsigned char u8;
typedef unsigned int u16;

// 使用宏定义端口
#define SMG_A_DP_PORT	P0	// 数码管段选端口
#define KEY_MAXRIX_SCAN P1	// 按键 端口

// 数码管字模
u8 smg_code[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};	//共阴 显示0-F

void delpaly(u16 times)
{
	while(times--);

}

// 定义一个char 类型的函数 void 是没有形参
u8 key_maxrix_ranks_scan(void)
{
	u8 key_value = 0;   // 定义一个变量	来接收按键的状态 键值
	//1111 0111  这个代表第一列 按键没有按下为高 按下为低电平
	KEY_MAXRIX_SCAN = 0xf7;
	if(KEY_MAXRIX_SCAN!= 0xf7)
	{
		delpaly(1000);	// 消抖
	   	switch(KEY_MAXRIX_SCAN)
		{
		// 第一个按下 0111 1111	转换十六进制 0x7f 
		case 0x77: key_value = 1; break; 
		case 0xb7: key_value = 5; break; 
		case 0xd7: key_value = 9; break; 
		case 0xe7: key_value = 13; break; 	
		}
		while(KEY_MAXRIX_SCAN != 0xf7);  // 循环 当按键不等于0xf7 就结束了	
	}


	// 第二列 第三列 第四列跟第一列是一样的
	// 第二列
	KEY_MAXRIX_SCAN = 0xfb; // 1111 1011  代表第二列
	if(KEY_MAXRIX_SCAN!=0xfb)
	{
	   	delpaly(1000);	// 消抖
	 	switch(KEY_MAXRIX_SCAN)
		{
		case 0x7b: key_value = 2; break; // 0111 1011 
		case 0xbb: key_value = 6; break;  // 1011 1011  / 1101 1011  / 1110 1011
		case 0xdb: key_value = 10; break; 
		case 0xeb: key_value = 14; break; 	
		}
		while(KEY_MAXRIX_SCAN != 0xfb);
	}
	  
	
	// 第三列
	KEY_MAXRIX_SCAN = 0xfd;	  // 1111 1101 代表第三列
	if(KEY_MAXRIX_SCAN!=0xfd)
	{
	 	delpaly(1000);	// 消抖
		switch(KEY_MAXRIX_SCAN)
		{
		case 0x7d: key_value = 3; break;   // 0111  1101/ 1011 1101 / 1101 1101 / 1110 1101
		case 0xbd: key_value = 7; break; 
		case 0xdd: key_value = 11; break; 
		case 0xed: key_value = 15; break; 	
		}
		while(KEY_MAXRIX_SCAN != 0xfd);
	} 
 

	// 第四列
	KEY_MAXRIX_SCAN = 0xfe;	   // 1111 1110 代表第四列
	if(KEY_MAXRIX_SCAN!=0xfe)
	{
		delpaly(1000);	// 消抖
		switch(KEY_MAXRIX_SCAN)
		{
		case 0x7e: key_value = 4; break;   // 0111 1110  / 1011 1110  / 1101 1110  / 1110 1110
		case 0xbe: key_value = 8; break; 
		case 0xde: key_value = 12; break; 
		case 0xee: key_value = 16; break; 	
		}
		while(KEY_MAXRIX_SCAN != 0xfe); 
	}
		
	return key_value; 	  // 返回 按键的键值
}



void main()
{

	u8 key =0;  // 定义变量 key初始为0 
	while(1)
	{
		key = key_maxrix_ranks_scan();   // 使用函数 需要接收键值
		if(key!=0)
			SMG_A_DP_PORT = smg_code[key-1];  			
	}
}

2、线翻转扫描

#include "reg52.h"

// 类型重命名
typedef unsigned char u8;
typedef unsigned int u16;

// 使用宏定义端口
#define SMG_A_DP_PORT	P0	// 数码管段选端口
#define KEY_MAXRIX_SCAN P1	// 按键 端口

// 数码管字模
u8 smg_code[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};	//共阴 显示0-F

void delpaly(u16 times)
{
	while(times--);

}

// 线翻转法
u8 key_matrix_flip_scan(void)
{
	static u8 key_value =0;  // 要这个变量不坐变化的
	KEY_MAXRIX_SCAN = 0x0f; //0000 1111
	// 测试列
	if(KEY_MAXRIX_SCAN!= 0x0f)
	{
		delpaly(1000);
		switch(KEY_MAXRIX_SCAN)
		{
			KEY_MAXRIX_SCAN = 0x0f;
			case 0x07: key_value =1 ;break;	// 0000 0111 / 0000 1011 / 0000 1101 / 0000 1110 
			case 0x0b: key_value =2 ;break;	
			case 0x0d: key_value =3 ;break;
			case 0x0e: key_value =4 ;break; 
		}
		// 测试行
		KEY_MAXRIX_SCAN = 0xf0; // 1111 0000
		switch(KEY_MAXRIX_SCAN)
		{
			case 0x70: key_value = key_value  ;break;	// 0111 0000    、1011 0000 、 1101 0000 、 1110 0000
			case 0xb0: key_value=key_value+4 ;break;
			case 0xd0: key_value=key_value+8 ;break;
			case 0xe0: key_value=key_value+12 ;break; 
		}
		while(KEY_MAXRIX_SCAN !=0xf0);				
	}
	
	return key_value; 
		
}
void main()
{

	u8 key =0;  // 定义变量 key初始为0 
	while(1)
	{
		key = key_matrix_flip_scan();   // 使用函数 需要接收键值
		if(key!=0)
			SMG_A_DP_PORT = smg_code[key-1];  			
	}
}

到了这里,关于单片机学习-使用矩阵按键来显示数码管0-F的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机——数码管、按键、矩阵按键C语言入门编程

    目录 数码管: 1.静态数码管:第二位数码管显示0 2.动态数码管:每一位数码管依次显示对应位数 按键: 1.独立按键:按下按键对应LED亮灭 矩阵按键: 1.矩阵按键:按下的每个按键,数码管显示对应键码          数码管按段数可分为七段数码管和八段数码管,八段数码管

    2024年01月23日
    浏览(45)
  • 51单片机按键控制数码管显示0-9

    实验题目:使用51单片机设计两个按键控制数码管显示0-9,当K1按下减1,当K2按下加1. 理解程序可参考我的另外两个文章; 51单片机数码管显示0-9_学习笔记吧的博客-CSDN博客 51单片机独立按键控制合集_学习笔记吧的博客-CSDN博客 两个文章一结合就是一个新的产物,所以51单片机

    2024年02月11日
    浏览(52)
  • 51单片机“独立按键”控制静态数码管———显示数字0-9

    (1).独立按键模块电路图可以清楚的看到,所有从引脚JP1出来的电流都会接到GND,且当所有按键按下时被执行链接GND。所以,当JP1引脚各端口----识别----到“电流为低电平为0时”,说明按键被按下,否则为高电平按键没有被按下。 ( 2).按键的原理其是需要我们单片机有检

    2024年02月11日
    浏览(45)
  • 51单片机实验三:数码管显示时钟 按键调节时间时闪烁提示

    功能效果:1.时分秒的动态显示。2.用三个按键实现时分秒的修改,调节的数字闪烁提示。  

    2024年02月11日
    浏览(36)
  • 51单片机的串口实验之数码管显示与按键实验(8位数字任意传输)

    目标效果: 1、电脑发送任意小于=8位数字( SUBF只有8位最大只能发送255,但是可以通过数组进行临时存储来实现传输多字节 )数字,在数码管上显示对应的数字且同时满足高位是0可以不显示  2、矩阵按键按下后,电脑接收所按下的按钮 实验器材: 1、普中51单片机。2、ST

    2024年02月02日
    浏览(48)
  • C51单片机的电子时钟(数码管显示+独立按键模块修改及暂停时间)

    IMG_1120 通过查看这三个原理图我们可以得知控制K1、K2、K3及K4是通过P31、P30、P32及P33来实现的,控制8个数码管是P22、P23及P24来实现, 控制发光二极管则由P00-P07来实现。 代码分为三部分分别为main.c、key.h、key.c scankey()函数的主要代码,通过软件入手提高系统的可靠性,防止外

    2024年02月05日
    浏览(51)
  • 51单片机矩阵键盘——数码管显示

    当我们熟悉了数码管的位选与段选,并了解的矩阵键盘的扫描之后就可以编写程序了。 按下矩阵键盘S1并松开,数码管第一位(LED8)显示0;按下矩阵键盘S2并松开,数码管第一位显示1;...按下矩阵键盘S16并松开,数码管第一位显示F; 矩阵键盘扫描(输入扫描)     原理:

    2024年02月11日
    浏览(52)
  • 【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯

    实验内容: 利用所学的单片机知识及电路知识编程实现单片机 I/O 口检测按键输入电平。         1.选中 8 位数码管的其中 1 位数码管,当独立按键 1 每按下一次,数码管加一(按下期间加 1),范围为 0—F;         2.选中 8 位数码管的另 1 位数码管,当独立按键 2

    2024年02月06日
    浏览(44)
  • 51单片机实现矩阵键盘密码锁,数码管显示

    板子是普中的,按键按下10为0,按键11为确认,按键12为取消。 输入密码正确时LED D8闪烁(正确密码为5555) #include REGX52.H//头文件定义 unsigned char nixie[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示的段码 unsigned int Code = 0;//用于保存密码的变量 void Tim_int(void);//定时器初

    2024年02月02日
    浏览(47)
  • 【笔记】6位数码管显示定时器定时的时分秒,通过按键控制时间,自定义串口通信协议,根据单片机接收到的指令控制数码管显示

              目的:利用PROTUES仿真软件、串口调试助手、虚拟串口,搭建单片机与PC通信仿真平台,熟悉单片机串口的配置及与PC机的通信方法;尝试制定通信协议(含开始码、指令、数据、停止码),单片机根据通信协议解析接收到的内容,并根据接收的指令执行相应的操

    2024年02月05日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包