在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

stm32矩陣鍵盤(pán)原理圖及程序介紹

jf_f8pIz0xS ? 來(lái)源:電子發(fā)燒友整理 ? 2018-02-09 11:30 ? 次閱讀

STM32F0 系列產(chǎn)品基于超低功耗的 ARM Cortex-M0 處理器內(nèi)核,整合增強(qiáng)的技術(shù)和功能,瞄準(zhǔn)超低成本預(yù)算的應(yīng)用。該系列微控制器縮短了采用 8 位和 16 位微控制器的設(shè)備與采用 32 位微控制器的設(shè)備之間的性能差距,能夠在經(jīng)濟(jì)型用戶終端產(chǎn)品上實(shí)現(xiàn)先進(jìn)且復(fù)雜的功能。本文為大家介紹stm32矩陣鍵盤(pán)原理圖及程序

stm32矩陣鍵盤(pán)原理圖

stm32矩陣鍵盤(pán)原理圖及程序介紹

stm32矩陣鍵盤(pán)原理圖及程序介紹

stm32矩陣鍵盤(pán)原理圖及程序介紹

stm32矩陣鍵盤(pán)程序介紹

主要實(shí)現(xiàn):掃描矩陣鍵盤(pán),將檢測(cè)到的數(shù)據(jù)通過(guò)spi 通信發(fā)送到數(shù)碼管顯示。

主要步驟:

1:初始化時(shí)鐘

void RCC_Configuration(void)

{

//----------使用外部RC晶振-----------

RCC_DeInit(); //初始化為缺省值

RCC_HSEConfig(RCC_HSE_ON); //使能外部的高速時(shí)鐘

while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //等待外部高速時(shí)鐘使能就緒

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer

FLASH_SetLatency(FLASH_Latency_2); //Flash 2 wait state

RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK

RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 = HCLK

RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ

RCC_PLLCmd(ENABLE); //Enable PLLCLK

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLLCLK is ready

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock

while(RCC_GetSYSCLKSource()!=0x08); //Wait till PLL is used as system clock source

}

2:配置管腳

void GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

SPI_InitTypeDef SPI_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//開(kāi)啟GPIOD外設(shè)時(shí)鐘

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//D0~D3

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉輸入

GPIO_Init(GPIOD, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//D4~D7

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽輸出

GPIO_Init(GPIOD, &GPIO_InitStructure);

//初始化管腳電平

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); //開(kāi)啟SPI1和GPIOA外設(shè)時(shí)鐘

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//設(shè)置SPI的四個(gè)引腳模式

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復(fù)用推挽輸出

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //設(shè)置GPIO A1管腳 用于鎖存74HC595輸出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽輸出

GPIO_Init(GPIOA, &GPIO_InitStructure);

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//SPI數(shù)據(jù)模式 雙線雙向全雙工

SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //SPI工作模式 主模式

SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //設(shè)置SPI數(shù)據(jù)大小

SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //設(shè)置時(shí)鐘的極性

SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //設(shè)置時(shí)鐘的相位

SPI_InitStructure.SPI_NSS = SPI_NSS_Hard; //NSS腳硬件置位

SPI_InitStructure.SPI_BaudRatePrescaler =SPI_BaudRatePrescaler_64;//預(yù)分頻值

SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;// 數(shù)據(jù)從高位傳輸

SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值

SPI_I2S_DeInit(SPI1); //將外設(shè)SPI1寄存器重設(shè)為缺省值;

SPI_Init(SPI1, &SPI_InitStructure);

SPI_Cmd(SPI1, ENABLE);//使能SPI1外設(shè)

}

3:編寫(xiě)矩陣鍵盤(pán)掃描函數(shù)KEY.c

u8 shu=16;

void KeyScan(void)

{

u8 i;

if((GPIO_ReadInputData(GPIOD) & 0x0f) != 0x0f )

{

Delay_MS(20);

if((GPIO_ReadInputData(GPIOD) & 0x0f) != 0x0f )

{

GPIO_SetBits(GPIOD, GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_6);

GPIO_ResetBits(GPIOD, GPIO_Pin_7);

switch(GPIO_ReadInputData(GPIOD) & 0x0f)

{

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) & 0x0f)

{

case 0x07: 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) & 0x0f)

{

case 0x07: shu=8; break;

case 0x0b: shu=9; break;

case 0x0d: shu=10; break;

case 0x0e: shu=11; break;

}

GPIO_SetBits(GPIOD, GPIO_Pin_7 | GPIO_Pin_5| GPIO_Pin_6);

GPIO_ResetBits(GPIOD, GPIO_Pin_4);

switch(GPIO_ReadInputData(GPIOD) & 0x0f)

{

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);

GPIO_ResetBits(GPIOD, GPIO_Pin_4 | GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7);

while((i《50)&&((GPIO_ReadInputData(GPIOD) & 0x0f) != 0x0f))

{

i++;

Delay_MS(10);

}

}

}

}

4: SPI傳送數(shù)據(jù)函數(shù)

void Display_Data(u8 data)

{

u8 i=data;

PAOut(1)=0;

SPI_I2S_SendData(SPI1,DSY_CODE[i]);

Delay_MS(2);

PAOut(1)=1;

Delay_MS(1000);

}

5:主函數(shù)

#include“stm32f10x_lib.h”

#include

#include“Exboard.h”

u8 DSY_CODE[]={0xc0,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.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 (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&0xf0000000)+ 0x2000000)+(((Addr&0xfffff)《《5)+(BitNum《《2))))

#define PAIn(n) BitBang(GPIOA_IDR,n)

#define PAOut(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) BitBang(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;

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2273

    文章

    10926

    瀏覽量

    357767
  • 矩陣鍵盤(pán)
    +關(guān)注

    關(guān)注

    7

    文章

    207

    瀏覽量

    31552
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    求助:4*4矩陣鍵盤(pán)原理圖

    各位大俠,小弟初學(xué),求一個(gè)4*4矩陣鍵盤(pán)原理圖,不勝感激小弟郵箱:619018859@qq.com
    發(fā)表于 07-30 14:45

    什么是矩陣鍵盤(pán)

    矩形鍵盤(pán)介紹什么是矩陣鍵盤(pán)矩陣鍵盤(pán)的原理驅(qū)動(dòng)電路
    發(fā)表于 01-07 07:43

    矩陣鍵盤(pán)和獨(dú)立鍵盤(pán)的原理介紹

    學(xué)到矩陣鍵盤(pán)這一塊對(duì)網(wǎng)上別人寫(xiě)的C代碼有些疑問(wèn),希望有能看到的大牛幫助解答。矩陣鍵盤(pán)和獨(dú)立鍵盤(pán)原理圖
    發(fā)表于 01-13 08:10

    矩陣鍵盤(pán)掃描程序

    矩陣鍵盤(pán)掃描程序 按鍵掃描(線反轉(zhuǎn))//-------------------------------- ------------------------------------------------------------
    發(fā)表于 01-11 19:11 ?7814次閱讀

    4x4矩陣鍵盤(pán)程序原理圖PCB

    4x4矩陣鍵盤(pán)程序原理圖PCB,供大家下載。
    發(fā)表于 12-21 18:25 ?0次下載

    矩陣鍵盤(pán)(電子+程序

    這是基于AT89C芯片的矩陣鍵盤(pán),是一個(gè)計(jì)較簡(jiǎn)單使用的小程序,請(qǐng)大家指教
    發(fā)表于 06-03 15:31 ?30次下載

    4X4矩陣鍵盤(pán)原理圖

    鍵盤(pán)矩陣原理圖
    發(fā)表于 02-28 22:35 ?0次下載

    兩個(gè)4×4鍵盤(pán)矩陣控制條形LED顯示的電路原理圖免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是兩個(gè)4×4鍵盤(pán)矩陣控制條形LED顯示的電路原理圖免費(fèi)下載。
    發(fā)表于 12-25 16:52 ?30次下載
    兩個(gè)4×4<b class='flag-5'>鍵盤(pán)</b><b class='flag-5'>矩陣</b>控制條形LED顯示的電路<b class='flag-5'>原理圖</b>免費(fèi)下載

    數(shù)碼管顯示4X4鍵盤(pán)矩陣按鍵的仿真原理圖免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)碼管顯示4X4鍵盤(pán)矩陣按鍵的仿真原理圖免費(fèi)下載。
    發(fā)表于 12-31 10:04 ?49次下載
    數(shù)碼管顯示4X4<b class='flag-5'>鍵盤(pán)</b><b class='flag-5'>矩陣</b>按鍵的仿真<b class='flag-5'>原理圖</b>免費(fèi)下載

    基于1602加矩陣鍵盤(pán)的簡(jiǎn)易計(jì)算機(jī)原理圖及源碼

    基于1602加矩陣鍵盤(pán)的簡(jiǎn)易計(jì)算機(jī)原理圖及源碼
    發(fā)表于 04-29 09:57 ?4次下載
    基于1602加<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤(pán)</b>的簡(jiǎn)易計(jì)算機(jī)<b class='flag-5'>原理圖</b>及源碼

    STM32操作矩陣鍵盤(pán)的兩種方法——掃描和中斷

    目錄STM32操作矩陣鍵盤(pán)的兩種方法——掃描和中斷一、矩陣鍵盤(pán)的結(jié)構(gòu)和原理二、掃描式矩陣
    發(fā)表于 11-26 13:36 ?36次下載
    <b class='flag-5'>STM32</b>操作<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤(pán)</b>的兩種方法——掃描和中斷

    STM32f103c8t6矩陣鍵盤(pán)程序(串口通信)資料匯總

    STM32f103c8t6矩陣鍵盤(pán)程序(串口通信)資料匯總
    發(fā)表于 12-08 17:44 ?89次下載

    STM32矩陣鍵盤(pán)掃描及處理

    STM32矩陣鍵盤(pán)掃描及處理前言由于最近幫做一個(gè)畢業(yè)設(shè)計(jì)需要用到直接輸入目標(biāo)值去控制輸出,所以才寫(xiě)這么一個(gè)按鍵處理的程序。對(duì)于一個(gè)才接觸單片機(jī)沒(méi)多久的大學(xué)生菜鳥(niǎo)來(lái)說(shuō),實(shí)現(xiàn)畢設(shè)里的每一
    發(fā)表于 12-27 18:26 ?39次下載
    <b class='flag-5'>STM32</b>的<b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤(pán)</b>掃描及處理

    51單片機(jī)矩陣鍵盤(pán)原理圖

    51單片機(jī)矩陣鍵盤(pán)原理圖
    發(fā)表于 12-30 11:32 ?69次下載

    stm32矩陣鍵盤(pán)程序

    電子發(fā)燒友網(wǎng)站提供《stm32矩陣鍵盤(pán)程序.zip》資料免費(fèi)下載
    發(fā)表于 10-07 15:07 ?15次下載
    <b class='flag-5'>stm32</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤(pán)</b>的<b class='flag-5'>程序</b>
    主站蜘蛛池模板: h视频在线观看视频观看 | 你懂的在线视频观看 | cijilu刺激 国产 | 亚洲狠狠97婷婷综合久久久久 | 日本黄色大片免费 | 真人一级一级特黄高清毛片 | 久久午夜国产片 | 欧美久久天天综合香蕉伊 | 四大名著成人高h肉版 | 天堂最新版在线www在线 | 国产三级视频 | 免费高清在线观看a网站 | 国产美女特级嫩嫩嫩bbb | 刺激第一页720lu久久 | 婷婷日日夜夜 | 久久理论片 | 天天躁夜夜躁狠狠躁 | 欧美网站在线播放 | 窝窝午夜看片成人精品 | 免费一级片视频 | 午夜精品久久久久久久四虎 | 永久免费看毛片 | 大胆国模一区二区三区伊人 | 欧美婷婷 | 国产床戏无遮掩视频播放 | 日女人免费视频 | 欧美日韩伦理 | 天天操天天曰 | 最好看的2019中文字幕1 | 男人j进入女人j视频大全 | 天堂成人精品视频在线观 | 日本aaaa视频 | 中文字幕日韩三级 | www.黄视频| 亚洲不卡视频在线观看 | 2021国产精品| 色www视频永久免费 色www视频永久免费软件 | 久久精品操 | 日本三人交xxx69视频 | 国产nv精品你懂得 | 中韩日欧美电影免费看 |