身价过亿的女总裁对小码农说你按键会了吗

文章目录

  • 小码农为了总裁,咳咳,为了知识敢说按键不会吗?
    • ==**帝都富豪与富家总裁联动文章 [身价过亿的帝都富豪对小码农说预处理学的不错](https://blog.csdn.net/diandengren/article/details/120679417?spm=1001.2014.3001.5502)**==
    • 独立按键与矩阵按键
    • 独立按键
      • 图样
      • 原理图
    • 按键的简单功能(为了智能小车,可以朝上面靠)
  • ==[显示的过程](https://www.bilibili.com/video/BV1qQ4y167Xs/)==
    • 功能
  • ==[半成品示范](https://www.bilibili.com/video/bv1NL4y167vx)==
  • ==[丐版展示](https://www.bilibili.com/video/BV13h411J7sZ?spm_id_from=333.999.0.0)==
      • 还有一直按就是一直加加的功能,但是代码基本类似,就没必要再写了,都是重复的类似工作
  • 高潮来袭
    • 矩阵键盘
      • 原理图
      • 分析
  • 矩阵键盘
    • ==**帝都富豪与富家总裁联动文章 [身价过亿的帝都富豪对小码农说预处理学的不错](https://blog.csdn.net/diandengren/article/details/120679417?spm=1001.2014.3001.5502)**==

小码农为了总裁,咳咳,为了知识敢说按键不会吗?

帝都富豪与富家总裁联动文章 身价过亿的帝都富豪对小码农说预处理学的不错

独立按键与矩阵按键

独立按键

图样

身价过亿的女总裁对小码农说你按键会了吗_第1张图片

身价过亿的女总裁对小码农说你按键会了吗_第2张图片

按键按下去之后,往往会有抖动的问题,按键本身的弹性,按键按下去或者放开,都会形成撞击的不稳定过程,这个过程需要一定的时间,所以单片机在这个过程中不能读取IO状态,可以软件延迟或者硬件延迟

身价过亿的女总裁对小码农说你按键会了吗_第3张图片

原理图

身价过亿的女总裁对小码农说你按键会了吗_第4张图片

身价过亿的女总裁对小码农说你按键会了吗_第5张图片

按键的简单功能(为了智能小车,可以朝上面靠)

身价过亿的女总裁对小码农说你按键会了吗_第6张图片

显示的过程

显示过程

没有制作GIF的原因是做完一直不小于1M导致我typora插入我不显示,因此狠心投稿到B站,今后B站就是我的视频库

功能

上面按键就是一按一按没有什么吸引人的地方,没有什么亮点,所以我们推倒重来

身价过亿的女总裁对小码农说你按键会了吗_第7张图片

半成品示范

半成品示范

加了长按标志的展示

丐版展示

丐版展示

//按键扫描
void Key_Scan_Drive()
{
     
	static bit flag = 0;//长短按标志
	static bit key_down = 0;//按下标志,由于双击也用这个,所以标记范围得扩大
	
	static u8 count1 = 0;//计数器1,因为100以内,所以u8足够了
	static u16 count2 = 0;//计数器2,大于255就用u16
	
	if(key_down)//检测按键是否被按下过
	{
     
		count2++;
		if(count2>250)
		{
     
			count2 = 0;		
			flag = 1;	
			//长按程序
			LCD12864_Write_Cmd(0x8c);
			LCD12864_Write_Data(0x30);
			LCD12864_Write_Data(0x30+LCD12864_Num_Buffer[1]);
		}
		if(KEY1)
		{
     
			key_down = 0;//松开就把标志清零
			count2 = 0;
			if(flag)
			{
     
				flag = 0;
			}
			else
			{
     
				//短按程序
				LCD12864_Write_Cmd(0x8c);
				LCD12864_Write_Data(0x30);
				LCD12864_Write_Data(0x30+LCD12864_Num_Buffer[3]);
			}
		}
	}
	else
	{
     
		if(!KEY1)
		{
     
			count1++;
			if(count1>20)
			{
     
				count1 = 0;
				if(!KEY1)
				{
     
					key_down = 1;
				}
			}				
		}
	}	
}

还有一直按就是一直加加的功能,但是代码基本类似,就没必要再写了,都是重复的类似工作

高潮来袭

矩阵键盘

P6^0 P6^1 P6^2 P6^3 四线是行扫描,P6^4 P6^5 P6^6 P6^7 四线是列扫描。4 行 4 列总共使用 8 个 IO 口,可以扫描 16 个按键的开关状态,这就是矩阵键盘的优势。( IO 口之间必须串联电阻 )

原理图

身价过亿的女总裁对小码农说你按键会了吗_第8张图片

分析

身价过亿的女总裁对小码农说你按键会了吗_第9张图片

#include "all.h"

u8 code KEY4x4_Buffer[4] = {
     0xef,0xdf,0xbf,0x7f};//列输入 /列控制数组
u8 xdata KEY4x4_Read_Byte = 0;   //读到/检测到的字节


void KEY4x4_Drive_Init()
{
     
	P6M1 = 0;
	P6M0 = 0; 
}

void KEY4x4_Scan_Drive()
{
     
	static xdata u16 count = 0;
	u8 i = 0;
	u8 j = 0;//循环扫描变量
	u8 Value = 0;//检测行变量
	count++;
	if(count>10)//通过计数的方式来减少循环次数,还消抖
	{
     
		count = 0;
		for(i = 0;i<4;i++)//列输入 /列控制 
		{
     
			P6 = KEY4x4_Buffer[i];
			Value = 0x08;
			for(j = 0;j<4;j++)
			{
     
				if(!(Value&P6))//哪个位被拉成0了就会被检测到
				{
     
					KEY4x4_Read_Byte = j*4+i+1;
				}
				Value >>= 1;//右移一位
			}		
		}	
		P6 = 0xff;//P6口用完拉高,因为以后会用到他
	}
	
}

矩阵键盘

矩阵按键

帝都富豪与富家总裁联动文章 身价过亿的帝都富豪对小码农说预处理学的不错

你可能感兴趣的:(单片机,硬件电路,stm32,物联网,单片机,51单片机)