stm32矩阵键盘原理图及程序介绍.doc

上传人:白大夫 文档编号:3273818 上传时间:2019-08-07 格式:DOC 页数:8 大小:36KB
返回 下载 相关 举报
stm32矩阵键盘原理图及程序介绍.doc_第1页
第1页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《stm32矩阵键盘原理图及程序介绍.doc》由会员分享,可在线阅读,更多相关《stm32矩阵键盘原理图及程序介绍.doc(8页珍藏版)》请在三一文库上搜索。

1、stm32矩阵键盘原理图及程序介绍STM32F0 系列产品基于超低功耗的 ARM Cortex-M0 处理器内核,整合增强的技术和功能,瞄准超低成本预算的应用。该系列微控制器缩短了采用 8 位和 16 位微控制器的设备与采用 32 位微控制器的设备之间的性能差距,能够在经济型用户终端产品上实现先进且复杂的功能。本文为大家介绍stm32矩阵键盘原理图及程序stm32矩阵键盘原理图主要实现:扫描矩阵键盘,将检测到的数据通过spi 通信发送到数码管显示。主要步骤:1:初始化时钟void RCC_Configuration(void)/-使用外部RC晶振-RCC_DeInit(); /初始化为缺省值R

2、CC_HSEConfig(RCC_HSE_ON); /使能外部的高速时钟while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) = RESET); /等待外部高速时钟使能就绪FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /Enable Prefetch BufferFLASH_SetLatency(FLASH_Latency_2); /Flash 2 wait stateRCC_HCLKConfig(RCC_SYSCLK_Div1); /HCLK = SYSCLKRCC_PCLK2Config(RCC_HC

3、LK_Div1); /PCLK2 = HCLKRCC_PCLK1Config(RCC_HCLK_Div2); /PCLK1 = HCLK/2RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); /PLLCLK = 8MHZ * 9 =72MHZRCC_PLLCmd(ENABLE); /Enable PLLCLKwhile(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET); /Wait till PLLCLK is readyRCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

4、 /Select PLL as system clockwhile(RCC_GetSYSCLKSource()!=0x08); /Wait till PLL is used as system clock source2:配置管脚void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;SPI_InitTypeDef SPI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);/开启GPIOD外设时钟GPIO_InitStructure.GP

5、IO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;/D0D3GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;/上拉输入GPIO_Init(GPIOD, GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;/D4D7GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MH

6、z;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/推挽输出GPIO_Init(GPIOD, /初始化管脚电平GPIO_SetBits(GPIOD, GPIO_Pin_0 | GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3);GPIO_ResetBits(GPIOD, GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_SPI1, ENABLE); /开启SP

7、I1和GPIOA外设时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;/设置SPI的四个引脚模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /复用推挽输出GPIO_Init(GPIOA, GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; /设置GPIO A1管脚 用于锁存74HC595输出GPIO_InitStr

8、ucture.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/推挽输出GPIO_Init(GPIOA, SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;/SPI数据模式 双线双向全双工SPI_InitStructure.SPI_Mode = SPI_Mode_Master; /SPI工作模式 主模式SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; /设置

9、SPI数据大小SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; /设置时钟的极性SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; /设置时钟的相位SPI_InitStructure.SPI_NSS = SPI_NSS_Hard; /NSS脚硬件置位SPI_InitStructure.SPI_BaudRatePrescaler =SPI_BaudRatePrescaler_64;/预分频值SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;/ 数据从高位传输SPI_Ini

10、tStructure.SPI_CRCPolynomial = 7; /CRC值SPI_I2S_DeInit(SPI1); /将外设SPI1寄存器重设为缺省值;SPI_Init(SPI1, SPI_Cmd(SPI1, ENABLE);/使能SPI1外设3:编写矩阵键盘扫描函数KEY.cu8 shu=16;void KeyScan(void)u8 i;if(GPIO_ReadInputData(GPIOD) Delay_MS(20);if(GPIO_ReadInputData(GPIOD) GPIO_SetBits(GPIOD, GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_

11、6);GPIO_ResetBits(GPIOD, GPIO_Pin_7);switch(GPIO_ReadInputData(GPIOD) case 0x07: shu=0; break;case 0x0b: shu=1; break;case 0x0d: shu=2; break;case 0x0e: shu=3; break;GPIO_SetBits(GPIOD, GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_7);GPIO_ResetBits(GPIOD, GPIO_Pin_6);switch(GPIO_ReadInputData(GPIOD) case 0x07:

12、 shu=4; break;case 0x0b: shu=5; break;case 0x0d: shu=6; break;case 0x0e: shu=7; break;GPIO_SetBits(GPIOD, GPIO_Pin_4 | GPIO_Pin_6| GPIO_Pin_7);GPIO_ResetBits(GPIOD, GPIO_Pin_5);switch(GPIO_ReadInputData(GPIOD) case 0x07: shu=8; break;case 0x0b: shu=9; break;case 0x0d: shu=10; break;case 0x0e: shu=11

13、; break;GPIO_SetBits(GPIOD, GPIO_Pin_7 | GPIO_Pin_5| GPIO_Pin_6);GPIO_ResetBits(GPIOD, GPIO_Pin_4);switch(GPIO_ReadInputData(GPIOD) case 0x07: shu=12; break;case 0x0b: shu=13; break;case 0x0d: shu=14; break;case 0x0e: shu=15; break;GPIO_SetBits(GPIOD, GPIO_Pin_0 | GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3)

14、;GPIO_ResetBits(GPIOD, GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7);while(i50)i+;Delay_MS(10);4: SPI传送数据函数void Display_Data(u8 data)u8 i=data;PAOut(1)=0;SPI_I2S_SendData(SPI1,DSY_CODEi);Delay_MS(2);PAOut(1)=1;Delay_MS(1000);5:主函数#include“stm32f10x_lib.h”#include#include“Exboard.h”u8 DSY_CODE=0xc

15、0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff;int main(void) /u8 i;RCC_Configuration();GPIO_Configuration();/EXTI_Configuration();/NVIC_Configuration();while(1)KeyScan();Display_Data(shu);附录:Exboard.h#ifndef _EXBOARD_H#define _EXBOARD_H#endif#include“stm32f10x_lib

16、.h”#define GPIOA_IDR (GPIOA_BASE+0x08)#define GPIOA_ODR (GPIOA_BASE+0x0c)#define GPIOB_IDR (GPIOB_BASE+0x08)#define GPIOB_ODR (GPIOB_BASE+0x0c)#define GPIOC_IDR (GPIOC_BASE+0x08)#define GPIOC_ODR (GPIOC_BASE+0x0c)#define GPIOD_IDR (GPIOD_BASE+0x08)#define GPIOD_ODR (GPIOD_BASE+0x0c)#define GPIOE_IDR

17、 (GPIOE_BASE+0x08)#define GPIOE_ODR (GPIOE_BASE+0x0c)#define GPIOF_IDR (GPIOF_BASE+0x08)#define GPIOF_ODR (GPIOF_BASE+0x0c)#define GPIOG_IDR (GPIOG_BASE+0x08)#define GPIOG_ODR (GPIOG_BASE+0x0c)#define BitBang(Addr,BitNum) *(volatile unsigned long*)(Addr#define PAIn(n) BitBang(GPIOA_IDR,n)#define PAO

18、ut(n) BitBang(GPIOA_ODR,n)#define PBIn(n) BitBang(GPIOB_IDR,n)#define PBOut(n) BitBang(GPIOB_ODR,n)#define PCIn(n) BitBang(GPIOC_IDR,n)#define PCOut(n) BitBang(GPIOC_ODR,n)#define PDIn(n) BitBang(GPIOD_IDR,n)#define PDOut(n) BitBang(GPIOD_ODR,n)#define PEIn(n) BitBang(GPIOE_IDR,n)#define PEOut(n) Bi

19、tBang(GPIOE_ODR,n)#define PFIn(n) BitBang(GPIOF_IDR,n)#define PFOut(n) BitBang(GPIOF_ODR,n)#define PGIn(n) BitBang(GPIOG_IDR,n)#define PGOut(n) BitBang(GPIOG_ODR,n)#define KEY1 PEIn(0)#define LED1 PDOut(13)#define KEY2 PCIn(13)#define LED2 PGOut(14)void Delay_MS(u16 dly);/void RCC_Configuration(void);void GPIO_Configuration(void);/void EXTI_Configuration(void);/void NVIC_Configuration(void);extern void KeyScan(void);void Display_Data(u8 data);extern u8 shu;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1