AB32VG:(2)app.cbp工程源码阅读笔记(ADC按键和红外)

news2024/11/24 2:40:48

文章目录

  • 1.SDK文件目录
  • 2.ADCKEY和红外遥控器相关源码
    • 2.1 初始化
    • 2.2 在定时器中断服务程序中查询按键
  • 3. 更改参数以适应自己的ADC按键板
    • 3.1 我的ADC按键板硬件
    • 3.2 ADC值转换为键值
  • 4.红外遥控器
  • 5. 相关配置

参考文章:

  1. 作者:nunu1010,中科蓝讯蓝牙: 编译环境安装_ToolChain及CodeBlock(IDE)的安装
  2. 作者:机器人107,中科蓝讯蓝牙耳机SDK解析

有用资源:
1.《中科蓝讯蓝牙: 编译环境安装_ToolChain及CodeBlock(IDE)的安装》文章包含了工具链的下载链接,这里转载:
链接:https://pan.baidu.com/s/1hJbcuOGChOpBpDllFGePZg
提取码:1010
2. sdk源码:
链接:https://pan.baidu.com/s/1TbW_G_JFPUwNt2IdyIUCiA?pwd=1vej
提取码:1vej

1.SDK文件目录

└─app  
	├─platform
	│		├─bsp 
	│		│	├─bsp_music.c
	│		│	├─bsp_spiflash1.c
	│		│	├─bsp_spiflash1_music_bin.c
	│		│	├─bsp_fs.c
	│		│	├─bsp_spiflash_rec_play.c
	│		│	├─bsp_id3_tag.c
	│		│	├─bsp_lrc.c
	│		│	├─bsp_spp.c
	│		│	├─bsp_cm.c
	│		│	├─bsp_app.c
	│		│	├─bsp_ble.c
	│		│	├─bsp_param.c
	│		│	├─bsp_i2c.c
	│		│	├─bsp_aux.c
	│		│	├─bsp_fmtx.c
	│		│	├─bsp_record.c
	│		│	├─bsp_car_audio.c
	│		│	├─bsp_i2s.c
	│		│	├─bsp_iap.c
	│		│	├─bsp_i2s_ta5711.c
	│		│	├─bsp_i2s_wm8978.c
	│		│	├─bsp_audio.c
	│		│	├─bsp_charge.c
	│		│	├─bsp_karaok.c
	│		│	├─bsp_fmrx.c
	│		│	├─bsp_dac.c
	│		│	├─bsp_eq.c
	│		│	├─bsp_bt.c
	│		│	├─bsp_led.c
	│		│	├─bsp_sys.c
	│		│	├─bsp_key.c
	│		│	├─bsp_ir.c
	│		├─fmrx
	│		│	├─qn8035.c
	│		│   ├─fmrx_external.c
	│		├─functions
	│		│	├─func_music.c
	│		│	├─sfunc_record_play.c
	│		│	├─func_usbdev.c
	│		│	├─func_clock.c
	│		│	├─func_fmrx.c
	│		│	├─func_bt_hid.c
	│		│	├─func_fmam_freq.c
	│		│	├─func_idle.c
	│		│	├─func_update.c
	│		│	├─sfunc_bt_ring.c
	│		│	├─func_speaker.c
	│		│	├─func_spdif.c
	│		│	├─func_exspifalsh_music.c
	│		│	├─sfunc_record.c
	│		│	├─sfunc_bt_call.c
	│		│	├─func_bt.c
	│		│	├─func_lowpwr.c
	│		│	├─sfunc_bt_ota.c
	│		│	├─func_aux.c
	│		│	├─func.c
	│		├─gui
	│		│	├─gui.c
	│		│	├─lcd\lcd.c
	│		│	├─ledseg\ledseg_7p7s.c
	│		│	├─ledseg\ledseg_common.c
	│		├─libs
	│		│	├─strong_symbol.c
	│--------------------------------------------
	├─projects  
	│		├─standard
	│		│	├─config.c
	│		│	├─main.c
	│		│	├─display
	│		│	│	├─display_record.c
	│		│	│	├─display_music.c
	│		│	│	├─display_spdif.c
	│		│	│	├─display_fmrx.c
	│		│	│	├─display_idle.c
	│		│	│	├─display_fmam_freq.c
	│		│	│	├─display_clock.c
	│		│	│	├─display_bt.c
	│		│	│	├─display_aux.c
	│		│	│	├─display_speaker.c
	│		│	│	├─display_usbdev.c
	│		│	│	├─ledseg\display_ledseg.c
	│		│	├─message
	│		│	│	├─msg_speaker.c
	│		│	│	├─msg_music.c
	│		│	│	├─msg_clock.c
	│		│	│	├─msg_fmam_freq.c
	│		│	│	├─msg_fmrx.c
	│		│	│	├─msg_idle.c
	│		│	│	├─msg_bt.c
	│		│	│	├─msg_aux.c
	│		│	│	├─msg_record.c
	│		│	│	├─msg_spdif.c
	│		│	│	├─msg_usbdev.c
	│		│	│	├─msg_exspiflash_music.c
	│		│	├─plugin
	│		│	│	├─multi_lang.c
	│		│	│	├─eq_table.c
	│		│	│	├─plugin.c
	│		│	├─port
	│		│	│	├─port_led.c
	│		│	│	├─port_ledseg.c
	│		│	│	├─port_pwm.c
	│		│	│	├─port_mute.c
	│		│	│	├─port_update.c
	│		│	│	├─port_linein.c
	│		│	│	├─port_sd1.c
	│		│	│	├─port_earphone.c
	│		│	│	├─port_mic.c
	│		│	│	├─port_sd.c
	│		│	│	├─port_key.c
	│		│	│	├─port_ir.c

2.ADCKEY和红外遥控器相关源码

2.1 初始化

app\platform\bsp\bsp_key.c
app\platform\libs\libplatform.a
app\platform\bsp\bsp_sys.c
app\projects\standard\main.c
key_init()--初始化各种按键
sys_set_tmr_enable()--使能定时器
bsp_sys_init()--系统初始化
main()--主函数

2.2 在定时器中断服务程序中查询按键

app\platform\bsp\bsp_key.c
app\platform\bsp\bsp_sys.c
get_adkey()--读取ADC按键
bsp_key_scan()--扫描各种按键
get_irkey()--读取红外遥控器
usr_tmr5ms_isr()--5ms中断服务函数

3. 更改参数以适应自己的ADC按键板

3.1 我的ADC按键板硬件

在这里插入图片描述
AB32VG01的GPIO有3种内置的上拉电阻,分别是300R,10k,200k。我使用了外置的100k上拉。理论值如上图。
AB32VG01的ADC是10位比特,这里转换后,把低2bit舍弃,所以转换结果只需要一个无符号字节就可以表示。

电阻值按 键AD十进制AD十六进制功 能
4.7kK0110x0Bplay
14.7kK1330x21PREV
34.7kK2660x42NEXT
54.7kK3910x5BVOL-
84.7kK41170x75VOL+

3.2 ADC值转换为键值

typedef struct {
    u8 adc_val;
    u8 usage_id;
} adkey_tbl_t;
AT(.com_text.adkey.table)
//  app\projects\standard\port\port_key.c
//	表格中的 adc_val要比理论值大 5 左右
const adkey_tbl_t adkey_table[] = {
    {0x0F, KEY_PLAY},           //PLAY          
    {0x25, KEY_PREV},           //PREV          
    {0x45, KEY_NEXT},           //NEXT          
    {0x65, KEY_VOL_DOWN},       //VOL-          
    {0x7A, KEY_VOL_UP},         //VOL+          
    {0xFF, NO_KEY},             //              END
};
//	app\platform\bsp\bsp_key.c
AT(.com_text.port.key)
static u8 get_adkey(u8 key_val, u8 key_config_en)
{
    u8 num = 0;
    u8 *ptr;
    //配置工具是否使能
    if (!key_config_en) {
        return NO_KEY;
    }
    if(key_val > 0xaf){
        return NO_KEY;
    }
    //printf("ad=%d",key_val);
    while (key_val > adkey_table[num].adc_val) {
        num++;
    }
    //工具配置了第一组ADKEY的按键定义?
    ptr = get_adkey_configure(num);
    if (ptr != NULL) {
        if ((num > 11) || (adkey_table[num].adc_val == 0xff)) {
            return NO_KEY;
        }
        return key_config_table[*(ptr+num)];
    }
    return adkey_table[num].usage_id;
}

4.红外遥控器

我手头有一个红外遥控器,在淘宝找到的资料如下:
在这里插入图片描述

在这里插入图片描述
实际测到的键位码:
在这里插入图片描述
根据这个键位码,修改源码:

//	app\projects\standard\port\port_ir.c
AT(.com_text.ir.table)
const u8 ir_tbl_FF00[96] =
{
// 	   0              1 		     2	            3             4               5             6                 7
/*0*/  KEY_MUTE,     KEY_PLAY,        NO_KEY,       NO_KEY,     KEY_PREV,       NO_KEY,         KEY_NEXT,         KEY_EQ,
       NO_KEY,       KEY_VOL_DOWN,    NO_KEY, 	    NO_KEY,		NO_KEY,         KEY_VOL_UP,	    KEY_NUM_0,		  NO_KEY,
/*1*/  KEY_NUM_1,    KEY_NUM_2,       KEY_NUM_3,    NO_KEY,     KEY_NUM_4,      KEY_NUM_5,      KEY_NUM_6,	      NO_KEY,
       KEY_NUM_7,    KEY_NUM_8,       KEY_NUM_9,    NO_KEY, 	NO_KEY,         NO_KEY,	        NO_KEY,			  NO_KEY,
};

5. 相关配置

《app\projects\standard\config.h》

/*****************************************************************************
 * Module    : User按键配置 (可以同时选择多组按键)
 *****************************************************************************/
#define USER_ADKEY                      1           //ADKEY的使用, 0为不使用
#define USER_ADKEY2                     0           //ADKEY2的使用,0为不使用
#define USER_PWRKEY                     1           //PWRKEY的使用,0为不使用
#define USER_IOKEY                      0           //IOKEY的使用, 0为不使用
#define USER_ADKEY_MUX_SDCLK            0           //是否使用复用SDCLK的ADKEY, 共用USER_ADKEY的按键table
#define ADKEY_PU10K_EN                  0           //ADKEY是否使用内部10K上拉, 按键数量及阻值见port_key.c
#define USER_ADKEY_MUX_LED              0           //是否使用ADKEY与LED复用, 共用USER_ADKEY的流程(ADKEY与BLED配置同一IO)
/*****************************************************************************
 * Module    : IRRX配置
 *****************************************************************************/
#define IRRX_HW_EN                      1           //是否打IRRX硬件模块
#define IRRX_SW_EN                      0           //是否打开timer capture ir
#define IR_NUMKEY_EN                    1           //是否打开数字键输入
#define IR_INPUT_NUM_MAX                999         //最大输入数字9999

//可以打开一个或多个
#define IR_ADDR_FF00_EN                 1
#define IR_ADDR_BF00_EN                 0
#define IR_ADDR_FD02_EN                 0

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VSCode+Git+TortoiseGit+Tools

目录 一、Tools 1、VSCode(visual studio code)下载安装 VSCode使用技巧和经验 2、Git下载安装 3、TortoiseGit 简介 3.1、下载安装Git及Tortoisegit 3.2、Tortoisegit拉取gitee仓库到本地 3.3、Git拉取gitee仓库到本地 3.4、Git提交到gitee仓库 4、国内获取GitHub链…

华为OD机试真题B卷 Java 实现【蛇形矩阵】,附详细解题思路

一、题目描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 例如,当输入5时,应该输出的三角形为: 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 二、输入描述 输入正整数N(N不大于100)。 三、输出描述…

Vector DDFS

矢量数字频率生成器 版本:vivado2021.1 帮助文档:C:/Xilinx/Vivado/2021.1/doc/sysgen/html_help/vectorddfs.html 接口 I 频率控制字,I 输出频率 * 采样时间 * 2^(频率分辨率);VI、VO 用于同步&#x…

什么是优雅的代码设计

今天我来解释一下什么样的代码才是优雅的代码设计。当然我们的代码根据实际的应用场景也分了很多维度,有偏向于底层系统的,有偏向于中间件的,也有偏向上层业务的,还有偏向于前端展示的。今天我主要来跟大家分析一下我对于业务代码…

电子科技大学计算机系统结构:课后作业

计算机体系结构作业答案 第一二章作业 1.试述Flynn 分类的4 种计算机系统结构有何特点。 参考答案: Flynn按照指令流和数据流两种不同的组合,把计算机系统的结构分为以下4 类: (1)单指令流单数据流SISD&#xff0…

这款AI绘画工具也太太太赞了!模型丰富,轻松绘画,赶快收藏起来!

现今科技发展迅速,让人工智能(AI)成为了我们日常生活中的必备之物。在艺术领域,AI技术也开始广泛应用。特别是AI绘画软件,以其高效、精准的绘画方式,已成为越来越多艺术家、设计师和普通用户绘画的首选工具…

HUSTOJ使用指南

如何快速上手(了解系统的功能)? admin管理员用户登录,点击右上角管理,仔细阅读管理首页的说明。 切记:题目导入后一次只能删一题,不要导入过多你暂时用不上的题目,正确的方式是每次…

Cron在前端的使用,vue与element ui的vue-cron插件的使用及将定时任务cron表达式解析成中文

文章目录 vue-cron插件的使用安装依赖引用Vue页面去掉秒和年定时任务cron解析成中文该插件存在的一个缺陷 vue-cron插件的使用 安装依赖 执行下面npm命令: npm install vue-cron --save 引用 在想使用cron的vue页面引入以下: import VueCron from ‘vue-cron’ …

node版本管理工具nvm安装和使用

公司的前端项目使用的node版本是10.11.1比较老的版本,但是新开发的项目需要使用vue3viteelectron,需要使用较新的node版本 。综上决定研究研究nvm对node进行切换管理。有相同需求的朋友希望下面的文章可以帮助到你们。借鉴了一些博主的文章,在文章里也总…

重磅!Cloud Ace 在班加罗尔和孟买成立新的据点

Cloud Ace Cooperation(总部位于东京千代田区; Makoto Aoki,总裁)很高兴地宣布,我们已经在班加罗尔建立了新的开发中心,并在孟买建立了新的销售办事处,作为 Cloud Ace 进一步扩大公司在印度业务…

docker-compose通过volume恢复mysql数据

概述 docker rm是docker删除容器的命令。 会清空容器内的所有数据和配置,即真正的将容器清空并删除。 但是之前通过volume挂载到宿主机上是不受影响的。 docker rm -v如果是-v的命令那么会同时删除通过volume映射到宿主机上的文件 通过volume恢复数据 使用docke…

第六十六天学习记录:《高质量C/C++编程指南》中附录的考试试卷(含答案)

该试卷转载自林锐《高质量C/C编程指南》,先贴下原作者的版权声明。 版权声明:本书的大部分内容取材于作者一年前的书籍手稿(尚未出版),现整理汇编成为上海贝尔网络应用事业部的一个规范化文件,同时作为培训…

chatgpt赋能python:Python如何分配内存

Python如何分配内存 Python是一种动态解释型语言,它在运行时分配内存用于存储变量和对象。Python提供了一种内存管理机制,它能够动态地分配和管理内存。本文将介绍Python如何分配内存并讨论与之相关的一些最佳实践。 Python内存管理机制 Python中的所…

Vue.js 中的性能优化是什么?如何进行性能优化?

Vue.js 中的性能优化是什么?如何进行性能优化? Vue.js 是一款流行的前端框架,它具有响应式数据绑定、组件化开发、虚拟 DOM 等特性,使得开发者可以更加高效地构建交互式的用户界面。然而,在实际开发中,由于…

LeetCode 2352. 相等行列对:手动哈希

【LetMeFly】2352.相等行列对:手动哈希 力扣题目链接:https://leetcode.cn/problems/equal-row-and-column-pairs/ 给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ,返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。 如果行和…

ArduPilot之H743遗留配置问题解决

ArduPilot之H743遗留配置问题解决 1. 源由2. 资源3 遗留问题汇总3.1 问题一:无法设置VTX 600m3.2 问题二:双向Dshot未显示RMP转速3.3 问题三:mavlink esp32 2.4G WiFi电传 4. 参考资料 1. 源由 在ArduPilot开源代码之H743BMI270x2ChibiOS配置…

步进电机相数、细分、步距角、接线方法

1、旋转步进电机 旋转步进电机就是电机是一步一步转动的,故叫旋转步进电动机。每输入一个脉冲冲信号,该电动机就转过一定的角度,因此旋转步进电机是一种把脉冲变为角度位移的执行元件。 可通过脉冲频率控制步进电机的旋转速度,通…

ChatGPT中文版提示词学习手册, 学完工作效率提升百倍!

既然你对ChatGPT及其功能有了⼀些了解,让我们更深入地了解⼀下ChatGPT是什么以及它是如何工作的。 那么ChatGPT是如何工作的呢?在高层次上,这个过程可以分解为以下步骤: 1. 用户将文本输入ChatGPT界面。这可能是一个问题&#xf…

Android AIDL的使用(配源码)

零、完整源代码 链接: https://github.com/jx0260/TestGradle 一、创建AIDL文件 // IShopAidlInterface.aidl package com.example.testgradle;// Declare any non-default types here with import statementsinterface IShopAidlInterface {String getProductInfo(int prod…

speedtest-cli 源码集成

speedtest-cli 是一个开源的测速sdk,可以下载源码集成到自己的项目中,源码是C代码,所以可以集成到linux终端程序中,如果在Android APP中需要通过NDK开发集成,下面是在linux设备中集成过程。 1、首先在github中下载源码…