jq8900-16p代码索引

news/2025/1/15 17:09:30/

jq8900-16p代码索引:

JQ8900.c

#include "stm32f10x.h"
#include "delay.h"
#include "JQ8900.h"void Init_One_line_Uart(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_SetBits(GPIOB,GPIO_Pin_12);
}//用于控制jq8900指令
void SendData(u8 addr)
{u8 i;sda(1);//拉高DelayUs( 1000);sda(0);//拉低DelayUs(3200);for ( i = 0; i < 8; i++ ) {sda(1);//拉高if ( addr & 0x01 )//高电平{DelayUs( 600 );sda(0);//拉低DelayUs( 210 );}else //低电平{DelayUs( 210 );sda(0);//拉低DelayUs( 600 );}addr >>= 1;//右移一位}sda(1);//拉高
}
//播放下一首
void Next(void)
{SendData(0x15);	
}
//播放上一首
void Previous(void)
{SendData(0x14);	
}
//设置音量
void Set_volume(u8 vol)
{SendData(0x0a);//清零数字SendData(vol);SendData(0x00);SendData(0x0c);//设置音量
}

JQ8900.h

#ifndef _JQ8900_H
#define _JQ8900_H
#include "stm32f10x.h"#define sda(EN) EN ?  GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET):GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET)void SendData(u8 addr);
void Next(void);
void Previous(void);
void Set_volume(u8 vol);
void Init_One_line_Uart(void);#endif

delay.c

/***************************************************************************************************************************************************************************************	文件名: 	delay.c**	作者: 		张继瑞**	日期: 		2016-11-23**	版本: 		V1.0**	说明: 		利用systick做阻塞式延时**	修改记录:	************************************************************************************************************************************************************************************
**///单片机头文件
#include "stm32f10x.h"//delay头文件
#include "delay.h"//延时系数
unsigned char UsCount = 0;
unsigned short MsCount = 0;/*
************************************************************
*	函数名称:	Delay_Init
*
*	函数功能:	systick初始化
*
*	入口参数:	无
*
*	返回参数:	无
*
*	说明:		
************************************************************
*/
void Delay_Init(void)
{SysTick->CTRL &= ~(1 << 2);		//选择时钟为HCLK(72MHz)/8		103--9MHzUsCount = 9;					//微秒级延时系数MsCount = UsCount * 1000;		//毫秒级延时系数}/*
************************************************************
*	函数名称:	DelayUs
*
*	函数功能:	微秒级延时
*
*	入口参数:	us:延时的时长
*
*	返回参数:	无
*
*	说明:		此时钟(21MHz)最大延时798915us
************************************************************
*/
void DelayUs(unsigned short us)
{unsigned int ctrlResult = 0;us &= 0x00FFFFFF;											//取低24位SysTick->LOAD = us * UsCount;								//装载数据SysTick->VAL = 0;SysTick->CTRL = 1;											//使能倒计数器do{ctrlResult = SysTick->CTRL;}while((ctrlResult & 0x01) && !(ctrlResult & (1 << 16)));	//保证在运行、检查是否倒计数到0SysTick->CTRL = 0;											//关闭倒计数器SysTick->VAL = 0;}/*
************************************************************
*	函数名称:	DelayXms
*
*	函数功能:	毫秒级延时
*
*	入口参数:	ms:延时的时长
*
*	返回参数:	无
*
*	说明:		
************************************************************
*/
void DelayXms(unsigned short ms)
{unsigned int ctrlResult = 0;if(ms == 0)return;ms &= 0x00FFFFFF;											//取低24位SysTick->LOAD = ms * MsCount;								//装载数据SysTick->VAL = 0;SysTick->CTRL = 1;											//使能倒计数器do{ctrlResult = SysTick->CTRL;}while((ctrlResult & 0x01) && !(ctrlResult & (1 << 16)));	//保证在运行、检查是否倒计数到0SysTick->CTRL = 0;											//关闭倒计数器SysTick->VAL = 0;}/*
************************************************************
*	函数名称:	DelayMs
*
*	函数功能:	微秒级长延时
*
*	入口参数:	ms:延时的时长
*
*	返回参数:	无
*
*	说明:		多次调用DelayXms,做到长延时
************************************************************
*/
void DelayMs(unsigned short ms)
{unsigned char repeat = 0;unsigned short remain = 0;repeat = ms / 500;remain = ms % 500;while(repeat){DelayXms(500);repeat--;}if(remain)DelayXms(remain);}void delay(uint32_t t)
{while(t--);
}	void delay_us(u32 us)//微秒
{SysTick_Config(72);while(us-->0){while(!((SysTick->CTRL)&(1<<16)));}SysTick ->CTRL&=~SysTick_CTRL_ENABLE_Msk;
}void delay_ms(u32 ms)//毫秒
{SysTick_Config(72000);while(ms-->0){while(!((SysTick->CTRL)&(1<<16)));}SysTick ->CTRL&=~SysTick_CTRL_ENABLE_Msk;
}

delay.h

#ifndef _DELAY_H_
#define _DELAY_H_#include "stm32f10x.h"void Delay_Init(void);void DelayUs(unsigned short us);void DelayXms(unsigned short ms);void DelayMs(unsigned short ms);
void delay(uint32_t t);void delay_us(u32 us);
void delay_ms(u32 ms);
#endif

http://www.ppmy.cn/news/1508815.html

相关文章

LeetCode_sql_day16(601.体育馆的人流量)

描述&#xff1a;601. 体育馆的人流量 - 力扣&#xff08;LeetCode&#xff09; 编写解决方案找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录。 返回按 visit_date 升序排列 的结果表。 输入Stadium表: ----------------------------- | id | visit_date | peop…

【OpenCV-Python实战项目】01-OCR文本检测

OpenCVTesseract文本检测 0.介绍1.基础功能实现1.1 字符检测1.2 单词检测1.3 只检测数字 2.工程应用2.1 封装类2.2 屏幕截图识别2.3 视频文本检测&#xff08;待优化&#xff09; 3.参考 0.介绍 &#xff08;1&#xff09;Tesseract是一个开源文本识别 (OCR)引擎&#xff0c;是…

JavaScript高阶笔记总结第三天:(JavaScript高阶完结)

Xmind鸟瞰图&#xff1a; 简单文字总结&#xff1a; js高阶笔记总结&#xff1a; 严格模式&#xff1a; 1.开启严格模式&#xff1a;"use strict" 2.不使用var关键字声明会报错 3.严格模式下普通函数的this指向undefined 高阶函数&#xff1a; 满足…

JS【详解】 延迟加载

动态创建标签 动态创建的 <script > let script document.createElement("script"); script.src "path/to/script.js"; document.body.appendChild(script);动态创建的 <img> let img new Image(); img.src path/to/image.jpg; img.onlo…

微信小程序--22(绑定事件1)

一.事件定义 渲染层到逻辑层的通讯方式 二、小程序常用事件 1.tap 手指点击使用步骤 1.通过bindtap&#xff0c;可以为组件绑定tap事件 2.在页面的.js文件中定义对应事件的处理函数&#xff0c;通过event形参来接收 演示 2.input 文本框的输入使用步骤 1.通过bindinput绑…

(el-Time-Picker)操作(不使用 ts):Element-plus 中 TimePicker 组件的使用及输出想要时间格式需求的解决过程

Ⅰ、Element-plus 提供的 TimePicker 时间选择器组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供 TimePicker 组件情况&#xff1a; 其一、Element-ui 自提供的 TimePicker 代码情况为(示例的代码)&#xff1a; // Element-plus 提供的组件代码: <template>…

删除一个git项目的所有提交历史

1. 切换到仓库的根目录&#xff1a; 确保你处于要操作的 Git 仓库的根目录。 2. 删除所有本地分支的历史记录&#xff1a; 首先&#xff0c;切换到一个临时分支&#xff0c;以避免在 master 分支上直接操作&#xff1a; git checkout --orphan temp-branch 3. 添加所有文件…

保姆级教程,一文了解LVS

目录 一.什么是LVS tips: 二.优点&#xff08;为什么要用LVS&#xff1f;&#xff09; 三.作用 四.程序组成 五.LVS 负载均衡集群的类型 六.分布式内容 六.一.分布式存储 六.二.分布式计算 六.三.分布式常见应用 tips&#xff1a; 七.LVS 涉及相关的术语 八.LVS 负…