学习笔记——STM32F103的V3版本——3*3矩阵键盘控制数码管

一.硬件

1.数码管

2.3*3的矩阵键盘(自己做的模块(手残党一枚))

3.总体连接

二.在Keil5中的部分软代码

test.c中:

#include "sys.h"

#include "usart.h"

#include "delay.h"

#include "key.h"

#include "led.h"

#include "exti.h"

//MCU会在外部中断时发生自动处理

int main(void)

{

vu8 t;

Stm32_Clock_Init(9); //初始化系统时钟为72MHZ

delay_init(72); //初始化延时函数

uart_init(72, 9600); // 舒适化串口,波特率为9600

LED_Init(); // 初始化LED

EXTI_Init(); // 初始化外部中断

while(1)

{

t=KEY_Scan(); //获取按键值

printf("t的值为:%d\n",t);

switch(t)

{

case 1:

printf("你按下了:1\r\n");

LED_1();

break;

case 2:

printf("你按下了:2\r\n");

LED_2();

break;

case 3:

printf("你按下了:3\r\n");

LED_3();

break;

case 4:

printf("你按下了:4\r\n");

LED_4();

break;

case 5:

printf("你按下了:5\r\n");

LED_5();

break;

case 6:

printf("你按下了:6\r\n");

LED_6();

break;

case 7:

printf("你按下了:7\r\n");

LED_7();

break;

case 8:

printf("你按下了:8\r\n");

LED_8();

break;

case 9:

printf("你按下了:9\r\n");

LED_9();

break;

default:

printf("无按键按下\r\n");

delay_ms(1000);

break;

}

}

}

led.c中:

#include "sys.h"

#include "led.h"

void LED_Init(void)

{

RCC->APB2ENR |= 1 << 2; // Enable GPIOA clock

RCC->APB2ENR |= 1 << 5; // Enable GPIOD clock

// Configure GPIOA pins for LED control

GPIOA->CRL &= 0X00000000; // Clear configuration for GPIOA pins

GPIOA->CRL |= 0x33333333; // Set GPIOA pins as general purpose output push-pull

JTAG_Set(SWD_ENABLE); // Enable SWD for debugging

GPIOA->ODR &= 0X00000000; // Clear GPIOA output data register

}

void LED_1(void)

{

PAout(1) = 1;

PAout(2) = 1;

PAout(0) = 1;

PAout(5) = 0;

PAout(6) = 1;

PAout(7) = 1;

PAout(3) = 1;

PAout(4) = 0;

}

void LED_2(void)

{

PAout(1) = 0;

PAout(2) = 1;

PAout(0) = 0;

PAout(5) = 0;

PAout(6) = 0;

PAout(7) = 1;

PAout(3) = 0;

PAout(4) = 1;

}

void LED_3(void)

{

PAout(1) = 0;

PAout(0) = 0;

PAout(2) = 0;

PAout(5) = 1;

PAout(6) = 0;

PAout(7) = 1;

PAout(3) = 0;

PAout(4) = 1;

}

void LED_4(void)

{

PAout(1) = 0;

PAout(0) = 1;

PAout(5) = 1;

PAout(6) = 0;

PAout(7) = 1;

PAout(2) = 0;

PAout(3) = 1;

PAout(4) = 0;

}

void LED_5(void)

{

PAout(1) = 1;

PAout(0) = 0;

PAout(5) = 1;

PAout(6) = 0;

PAout(7) = 1;

PAout(3) = 0;

PAout(2) = 0;

PAout(4) = 0;

}

void LED_6(void)

{

PAout(1) = 1;

PAout(0) = 0;

PAout(5) = 0;

PAout(6) = 0;

PAout(7) = 1;

PAout(3) = 0;

PAout(4) = 0;

PAout(2) = 0;

}

void LED_7(void)

{

PAout(1) = 0;

PAout(0) = 0;

PAout(5) = 1;

PAout(6) = 1;

PAout(7) = 1;

PAout(2) = 0;

PAout(3) = 1;

PAout(4) = 1;

}

void LED_8(void)

{

PAout(1) = 0;

PAout(0) = 0;

PAout(2) = 0;

PAout(5) = 0;

PAout(6) = 0;

PAout(7) = 1;

PAout(3) = 0;

PAout(4) = 0;

}

void LED_9(void)

{

PAout(1) = 0;

PAout(0) = 0;

PAout(5) = 1;

PAout(6) = 0;

PAout(7) = 1;

PAout(3) = 0;

PAout(4) = 0;

PAout(2) = 0;

}

exti.c中:

#include "exti.h"

#include "led.h"

#include "key.h"

#include "delay.h"

#include "usart.h"

//外部中断初始化函数

void EXTI_Init(void)

{

//配置外部中断出发方式

AFIO->EXTICR[3] &= ~(0xF << 8); //清除EXTI11-8位

AFIO->EXTICR[3] |= 0x1000; //EXTI11配置端口

EXTI->FTSR |= (1 << 11); // 配置EXIT11为下降沿触发

EXTI->IMR |= (1 << 11); // 使能EXTI11中断

NVIC_EnableIRQ(EXTI15_10_IRQn); // 在NVIC中使能EXTI15_10中断

}

//外部中断处理函数

void EXTI_IRQHandler(void)

{

if (EXTI->PR & (1 << 11))

{

vu8 key = KEY_Scan();

switch(key)

{

case 1:

printf("你按下了:1\r\n");

LED_1();//ÏÔʾ¶ÔÓ¦Êý×Ö

break;

case 2:

printf("你按下了:2\r\n");

LED_2();

break;

case 3:

printf("你按下了:3\r\n");

LED_3();

break;

case 4:

printf("你按下了:4\r\n");

LED_4();

break;

case 5:

printf("你按下了:5\r\n");

LED_5();

break;

case 6:

printf("你按下了:6\r\n");

LED_6();

break;

case 7:

printf("你按下了:7\r\n");

LED_7();

break;

case 8:

printf("你按下了:8\r\n");

LED_8();

break;

case 9:

printf("你按下了:9\r\n");

LED_9();

break;

default:

printf("无按键按下\r\n");

delay_ms(1000);

break;

}

EXTI->PR |= (1 << 11); //清除EXTII挂起标志位

}

}

相关推荐
Brookty8 分钟前
【Java学习】枚举(匿名类详解)
java·学习
chennalC#c.h.JA Ptho1 小时前
archlinux 详解系统层面
linux·经验分享·笔记·系统架构·系统安全
海尔辛4 小时前
学习黑客三次握手快速熟悉
网络·学习·tcp/ip
_Jyuan_5 小时前
镜头内常见的马达类型(私人笔记)
经验分享·笔记·数码相机
丰锋ff7 小时前
考研英一学习笔记 2018年
笔记·学习·考研
1296004527 小时前
pytorch基础的学习
人工智能·pytorch·学习
岂是尔等觊觎7 小时前
软件设计师教程——第一章 计算机系统知识(下)
经验分享·笔记·其他
Oll Correct7 小时前
计算机二级WPS Office第三套电子表格
笔记
睡不着还睡不醒8 小时前
【笔记】unsqueeze
笔记
LouSean8 小时前
Unity按钮事件冒泡
经验分享·笔记·学习·unity·游戏引擎