历史上的今天
返回首页

历史上的今天

今天是:2025年08月16日(星期六)

正在发生

2019年08月16日 | STM32 矩阵键盘通过串口输出

2019-08-16 来源:eefocus

STM32F103C8T6 4*4矩阵键盘 通过串口输出,可以用来写密码锁


程序的思路如下:


1、首先需要配置的是矩阵键盘:配置两个函数:  KEY44_Init(矩阵键盘初始化)和key44_Scan(扫描并获取值)   。


2、其次,设置串口(本文设置为STM32F103C8T6的串口三): 我们需要对USART进行初始化设置,详细请见下文。


3、然后就开始写我们的主函数:主函数比较简单。因为程序已经分装了。


4、最后我们要实现按下一个键,串口打出一个字符(按下1键,打出1)


——————————————————————————————————————————————————-


下边为程序:所用芯片为STM32F103C8T6 


 串口3的管脚为PB10 -> TX 配置复用推挽式输出  PB11 ->RX配置浮空输入


配置矩阵键盘为PA0~PA3 推挽式输出 PA4~PA7 上拉输入


矩阵键盘的配置:


声明:

#define H_1 PAout(0)

#define H_2 PAout(1)

#define H_3 PAout(2)

#define H_4 PAout(3)

 

#define L_1 PAin(4)

#define L_2 PAin(5)

#define L_3 PAin(6)

#define L_4 PAin(7)

 

void  KEY44_Init(void);

unsigned char key44_Scan(void);

KEY44_Init(矩阵键盘初始化):


void  KEY44_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;//PA0~PA3 推挽式输出

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//初始化GPIOA时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 ;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6 |GPIO_Pin_7 ; //PA4~PA7 上拉输入

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

GPIO_Init(GPIOA, &GPIO_InitStructure);

}

配置为串口三:


void USART3_Init (u32 bound)

{

 

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

//开启GPIOB和复用推挽式输出

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);

//开启USART3初始化

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);

//PB10 -> TX 配置复用推挽式输出  

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10  ;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);

 

//PB11 ->RX配置浮空输入

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11  ;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOB, &GPIO_InitStructure);

//串口初始化

USART_InitStructure.USART_BaudRate = bound;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_Parity = USART_Parity_No;

USART_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;

USART_Init(USART3, &USART_InitStructure);

//使能串口

USART_Cmd(USART3,ENABLE);

USART_ClearFlag(USART3,USART_FLAG_TC);//解决发送第一个字节丢失的问题

}

主函数:


#include "sys.h"

# include "KEY44.h"

#include "usart3.h"

#include "delay.h"

u8 key_num = 0;//缓冲变量

int main()

{

uart3_init(115200);

delay_init();

KEY44_Init();

 

while(1)

{

key_num = key44_Scan();

if(key_num !=0)

{

printf("KEY Num is %drn",key_num);

 

}

}

}


最后要注意的是,本文不是库编程打印,所以要在程序里加入以下程序,并加上头文件# include


int fputc(int ch, FILE *f)

{      

while((USART3->SR&0X40)==0);//循环发送,直到发送完毕   

    USART3->DR = (u8) ch;      

return ch;


推荐阅读

史海拾趣

CML公司的发展小趣事

随着电子行业的快速发展,CML意识到只有不断创新才能在激烈的市场竞争中立于不败之地。于是,公司加大了对研发的投入,积极引进先进的技术和设备,不断提升产品的性能和质量。经过多年的努力,CML成功开发出了一系列具有自主知识产权的半导体产品,不仅在国内市场占据了领先地位,还成功打入国际市场,赢得了全球客户的信赖和好评。

Epistar Corp公司的发展小趣事

近年来,随着OLED(有机发光二极管)技术的兴起,LED行业面临着巨大的挑战。Epistar敏锐地意识到了这一点,开始积极调整战略方向,加大在OLED技术领域的研发力度。同时,公司还通过优化产品结构、提高生产效率等措施降低成本、提升竞争力。这些努力使Epistar在OLED技术浪潮中保持了稳健的发展态势。

C&K Switches公司的发展小趣事

2022年,C&K Switches公司被Littelfuse以5.4亿美元的企业价值收购。Littelfuse是一家工业技术制造公司,致力于打造一个可持续、互联和更安全的世界。两家公司在工业、通讯以及车载领域有着相近的市场布局和业务高度互补。收购完成后,C&K成为Littelfuse电子业务部门的一部分,双方共同为客户提供更全面的解决方案。这一收购不仅加强了C&K的市场地位,还为其未来的发展注入了新的活力和机遇。

EDO Corp公司的发展小趣事

在1930年代,Eclipse Magnetics这个名字首次出现,标志着品牌的诞生。当时,该公司主要从事磁性产品的研究和开发。进入1940年代,Eclipse Magnetics逐渐崭露头角,成为一个独立的公司。在电子行业的早期,该公司凭借其独特的磁性技术,开始在市场中占据一席之地。

Cal Crystal Lab Inc / Comclok Inc公司的发展小趣事

随着全球化的加速推进,国际化战略成为了企业发展的重要方向。Cal Crystal Lab Inc在稳固国内市场的基础上,积极实施国际化战略。公司不仅在海外设立了研发中心和生产基地,还加大了对国际市场的开拓力度。通过与当地企业的合作与交流,Cal Crystal Lab Inc不断适应国际市场的需求和变化,提升了公司在全球市场的竞争力。

这五个故事只是虚构的示例,并不代表任何真实公司的历史。实际的电子行业公司发展历程往往更加复杂和多样,受到市场、技术、政策等多种因素的影响。如果您需要了解特定公司的真实发展故事,建议查阅相关资料或咨询相关人士。

GSR Technology Ltd公司的发展小趣事

在电子行业的初期,GSR Technology Ltd专注于研发高性能的传感器技术,特别是针对工业自动化领域的GSR(Ground Surveillance Radar,地面监视雷达)技术。通过多年的技术积累和研发创新,公司成功开发出具有高精度、长距离监测能力的GSR系统,填补了市场空白。这一技术突破吸引了众多工业客户的关注,公司迅速获得市场准入,并与多家知名企业建立了长期合作关系。

问答坊 | AI 解惑

高手看看显示程序哪里出错啊

;--------------------------------------- ;  四位共阳LED动态扫描显示程序 ;  P0为段码口,P2为位选口(低电平有效) ;  参数为要显示的字符串指针 ;---------------------------------------    & ...…

查看全部问答>

美资公司LSI上海研发中心诚聘 Test Engineer

美资公司LSI上海研发中心诚聘 Test Engineer 内部推荐,有意者请将中英文简历发送至:asic_tapeout@hotmail.com Test Engineer DESCRIPTION OF DUTIES IN ADDITION TO THOSE IN JOB DESCRIPTION: - To support prototype and production relea ...…

查看全部问答>

使用串口老出现ttys input overruns!

使用串口老出现ttys input overruns!有谁知道!如何解决!或是什么问题引起的!谢谢了先!…

查看全部问答>

请教怎样把很大的数组放到2407的FLASH中?!

我用到液晶显示,但是由于液晶本身的CGRAM=2K远远不够存入我要显示的自定义字符数组(大约有三百个中文字,按照16*16*300来计算,要用到将近10K的空间.所以我想把这些数组放到FLASH中,请教应该如何设置才能实现此功能? 万分感谢!…

查看全部问答>

求证:"TI MSP430大学计划教材"中,5V的液晶显示器可与MSP430的I/O口直接相连,可以吗???

"TI MSP430大学计划教材"-"MSP430系列16位超低功耗单片机原理与应用"一书中,第306页和309页的电路图均表示5V的液晶显示器可与MSP430的I/O口直接相连,可以吗???,这对我很重要,因我要将51系统改为用MSP430.…

查看全部问答>

C51增强型单片机程序集

非常好的程序集,与大家分享,不要错过啊,不学习没道理!呵呵,祝大家好运!…

查看全部问答>

TI送的MSP430软件开发指南的P66页的这周期计算为什么要乘以2呢?我觉得应该不要呀

TI送的MSP430软件开发指南的P66页的这周期计算为什么要乘以2呢?我觉得应该不要呀!书上写的是增计数模式周期应该是CCR0/f呀!求指导 …

查看全部问答>

【晒样片】慷慨TI样片申请之TPS65980

本帖最后由 风雪天殇 于 2014-7-25 15:28 编辑 前几天看到这个活动,这种鼠标一点就有奖励神马的最有爱了,果断点了链接,本着申请不浪费的原则,选了个TPS65980,虽然仍有很大可能用不上....当然那个SN74LVC1G08也有可能用得上,但是太便宜了的 ...…

查看全部问答>

可变周期脉冲发生器的设计

信号为50mhz固定,要用分频来实现不同的型号输入。 设计一个周期、占空比可调的脉冲发生器。脉冲产生过程中,可对脉冲的周期、高电平和低电平的延续时间进行调整;调整步长自定;并同时显示已经输出的脉冲的个数,若脉冲个数达到了数码管显示的极 ...…

查看全部问答>

今年题目预测有可能出现红外吗?

今年题目预测有可能出现红外吗? …

查看全部问答>