学习笔记——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挂起标志位
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/335100.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试问题小结

说说你的项目&#xff0c;从里面学到啥了&#xff08;随便说&#xff09; CAS 线程池 的各个方面 线程咋创建&#xff08;4种方式&#xff09; 说一下聚集索引和非聚集索引 50w男 50w女 &#xff0c;在B树中咋存储的&#xff08;类似下面的图&#xff0c;变通一下就行了&a…

DOS学习-目录与文件应用操作经典案例-type

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 1. 查看文本文件内容 2. 同时查看多个文本文件内容 3. 合并文…

股票量化交易上手,一个特别简单却长期可用的交易策略,官方接口

股票实现程序化自动化交易的三个基础&#xff1a;获取数据、执行交易、查询账户。 以后说到策略示例的时候就不介绍接口的基础使用方法了&#xff0c;随便一个策略把过程写出来都会很啰嗦&#xff0c;尽量压缩内容吧&#xff0c;这些内容是面向新手的&#xff0c;大佬们忽略细节…

为WPF的Grid添加网格边框线

在WPF中使用Grid绘制表格的时候&#xff0c;如果元素较多、排列复杂的话&#xff0c;界面会看起来很糟糕&#xff0c;没有层次&#xff0c;这时用网格或边框线分割各元素&#xff08;标签或单元格&#xff09;将会是页面看起来整齐有条理。 默认没有边框线的如下图所示&#xf…

Rviz 复选框插件

Rviz 复选框插件 0.引言1.实现效果 0.引言 参考1参考2参考3参考4 我想做的插件是类似于 pangolin 侧面的复选框&#xff0c;动态传递 bool 值给程序内部使用。查了一下只能是通过插件的方式进行实现。但是Display 的参数在编译阶段就写死了&#xff0c;我想要在运行期给定参数…

hadoop hdfs优势和缺点

hdfs优点 高容错性适合处理大数据可构建再廉价的机器上 hdfs缺点 不适合做低延迟数据访问 毫秒级的存储数据做不到 无法高效的对大量小文件进行存储不支持并发写入 文件随机修改 一个文件只能有一个writer 不允许多个线程同时写仅支持数据追加 不支持文件的随机修改 hdf…

四川汇聚荣聚荣科技有限公司好不好?

在当今科技飞速发展的时代&#xff0c;企业要想在激烈的市场竞争中脱颖而出&#xff0c;必须具备强大的技术实力和良好的市场口碑。那么&#xff0c;作为一家专注于科技创新的公司&#xff0c;四川汇聚荣聚荣科技有限公司究竟如何呢?接下来&#xff0c;我们将从四个方面进行详…

Nginx的配置与调试

目录 1、安装Nginx 2、Nginx的配置文件结构 2.1 Nginx的全局配置 2.2 HTTP服务器配置 2.3 HttpGzip模块配置 2.4 负载均衡配置 2.5 server虚拟主机配置 2.6 location URL匹配配置 2.7 StubStatus模块配置 1、安装Nginx 在安装Nginx之前&#xff0c;需确保系统已经安装…

C++数据结构之:链List

摘要&#xff1a; it人员无论是使用哪种高级语言开发东东&#xff0c;想要更高效有层次的开发程序的话都躲不开三件套&#xff1a;数据结构&#xff0c;算法和设计模式。数据结构是相互之间存在一种或多种特定关系的数据元素的集合&#xff0c;即带“结构”的数据元素的集合&am…

有效运营企业内部社区的板块有哪些?

随着企业内部沟通和协作的重要性日益凸显&#xff0c;建立一个高效运营的企业内部社区成为越来越多企业的首要任务。针对不同的需求和目标&#xff0c;将企业内部社区分为多个板块&#xff0c;可以更好地促进员工之间的沟通、协作和共享知识。下面介绍如何从分多个板块创建的角…

K8s集群调度续章

目录 一、污点&#xff08;Taint&#xff09; 1、污点&#xff08;Taint&#xff09; 2、污点组成格式 3、当前taint effect支持如下三个选项&#xff1a; 4、查看node节点上的污点 5、设置污点 6、清除污点 7、示例一 查看pod状态&#xff0c;模拟驱逐node02上的pod …

ios 端如何免费使用Emby???(利用Quantumult X )

本文转自博主的个人博客&#xff1a;https://blog.zhumengmeng.work,欢迎大家前往查看。 原文链接&#xff1a;点我访问 注意&#xff1a;使用此激活方式&#xff0c;有唯一缺点&#xff0c;在观看Emby时需保持Quantumult X为开启状态&#xff01; 一、安装证书 开启 MitM 后…

222.完全二叉树的节点个数

给出一个完全二叉树&#xff0c;求出该树的节点个数。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,4,5,6]输出&#xff1a;6 示例 2&#xff1a; 输入&#xff1a;root []输出&#xff1a;0 示例 3&#xff1a; 输入&#xff1a;root [1]输出&#xff1a;1 提示…

每日5题Day10 - LeetCode 46 - 50

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;46. 全排列 - 力扣&#xff08;LeetCode&#xff09; class Solution {//这道题就是一个dfs//把所有结果遍历&#xff0c;到叶子节点就可以添加结果了List<Int…

k8s 1.24.x之后如果rest 访问apiserver

1.由于 在 1.24 &#xff08;还是 1.20 不清楚了&#xff09;之后&#xff0c;下面这两个apiserver的配置已经被弃用 了&#xff0c;简单的说就是想不安全的访问k8s是不可能了&#xff0c;所以只能走安全的访问方式也就是 https://xx:6443了&#xff0c;所以需要证书。 - --ins…

我觉得 “砍需求” 是程序员最牛逼的本领

在下认为&#xff0c;不会 “砍需求” 的程序员不是好程序员&#xff0c;工作经验越丰富的程序员&#xff0c;砍需求的本领一般就越高。即使现在我多了一个身份 —— 管理团队&#xff0c;我也会帮开发同学去跟产品砍需求。 没错&#xff0c;从管理者的角度&#xff0c;我希望…

手机信息恢复:应对数据丢失的策略与技术

由于各种原因&#xff0c;我们经常会遭遇到手机数据丢失的困境。如何有效地应对数据丢失&#xff0c;找回那些对我们来说至关重要的信息&#xff1f;这就需要我们了解和掌握手机信息恢复的策略与技巧。本文将为您揭示信息数据恢复的奥秘&#xff0c;介绍应对数据丢失的实用方法…

爬虫案例:有道翻译python逆向

pip install pip install requestspip install base64pip install pycrytodome tools 浏览器的开发者工具&#xff0c;重点使用断点&#xff0c;和调用堆栈 工具网站&#xff1a;https://curlconverter.com/ 简便请求发送信息 flow 根据网站信息&#xff0c;preview,respon…

Mysql 8.0 主从复制及读写分离搭建记录

前言 搭建参考&#xff1a;搭建Mysql主从复制 为什么要做主从复制&#xff1f; 做数据的热备&#xff0c;作为后备数据库&#xff0c;主数据库服务器故障后&#xff0c;可切换到从数据库继续工作&#xff0c;避免数据丢失。架构的扩展。业务量越来越大&#xff0c;I/O访问频…

开源大模型与闭源大模型:谁将引领AI的未来?

前言 在AI领域&#xff0c;开源大模型和闭源大模型一直并存&#xff0c;各自有其独特的优势和挑战。下面&#xff0c;我们将从数据隐私、商业应用和社区参与三个方向&#xff0c;对这两种模型进行深入探讨。 一、数据隐私 开源大模型&#xff1a; 1. 透明度高&#xff1a; …