android wifi智能车,STM32智能WiFi视频小车全套资料(带安卓app与stm32源码等)
/* 包含头文件 ----------------------------------------------------------------*/
#include "stm32f1xx_hal.h"
#include "usart/usart.h"
#include "string.h"
#include "pwm/pwm.h"
#include "gpio/gpio.h"
#include "adc/adc.h"
#include "tim4capture/tim4capture.h"
#include "tim2capture/tim2capture.h"
#include "delayus/delayus.h"
#include "ultrasonic/ultrasonic.h"
#include "public/public.h"
#include "speed/speed.h"
#include "voltage/voltage.h"
#include "usartjudge/usartjudge.h"
#include "direction/direction.h"
#include "time1/time1.h"
/* 类型定义 ------------------------------------------------------------------*/
/*************************timecapture***********************************/
STRUCT_CAPTURE strCapture1 = { 0, 0, 0, 0 };
STRUCT_CAPTURE strCapture2 = { 0, 0, 0, 0 };
STRUCT_CAPTURE strCapture3 = { 0, 0, 0, 0 };
extern uint8_t ultrasonic_overtime;//超声波超时标志位
extern uint8_t usart_switch;//串口接完成标志位
extern uint8_t usart_data[4];//串口接收数据
uint8_t aRxBuffer;//串口接收缓存
uint8_t aTxBuffer;//串口发送缓存
__IO uint16_t ADC_ConvertedValue;// AD转换结果值
uint32_t sleep_time=0;//睡眠时间,60000=1分钟
uint8_t sleep_switch=0;//睡眠开关标志位
uint16_t speed_time=0;//检测没有速度周期
uint16_t ultrasonic_time=0;
uint8_t ultrasonic_switch=0;//超声波开关标志位
uint16_t missile1_time=0;//导弹1导通时间
uint8_t missile1_switch=0;//导弹1开关标志位
uint16_t missile2_time=0;//导弹2导通时间
uint8_t missile2_switch=0;//导弹2开关标志位
uint16_t missile3_time=0;//导弹3导通时间
uint8_t missile3_switch=0;//导弹3开关标志位
uint16_t missile4_time=0;//导弹4导通时间
uint8_t missile4_switch=0;//导弹4开关标志位
uint16_t voltage_time=0;///电压数据发送周期时间
/* 扩展变量 ------------------------------------------------------------------*/
/* 私有函数原形 --------------------------------------------------------------*/
/* 函数体 --------------------------------------------------------------------*/
/**
* 函数功能: 系统时钟配置
* 输入参数: 无
* 返 回 值: 无
* 说 明: 无
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; // 外部晶振,8MHz
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; // 9倍频,得到72MHz主时钟
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 系统时钟:72MHz
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // AHB时钟:72MHz
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // APB1时钟:36MHz
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // APB2时钟:72MHz
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
// HAL_RCC_GetHCLKFreq()/1000 1ms中断一次
// HAL_RCC_GetHCLKFreq()/100000 10us中断一次
// HAL_RCC_GetHCLKFreq()/1000000 1us中断一次
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); // 配置并启动系统滴答定时器
/* 系统滴答定时器时钟源 */
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* 系统滴答定时器中断优先级配置 */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
/**
* 函数功能: 主函数.
* 输入参数: 无
* 返 回 值: 无
* 说 明: 无
*/
int main(void)
{
uint32_t ulTmrClk; //timecapture
/* 复位所有外设,初始化Flash接口和系统滴答定时器 */
HAL_Init();
/* 配置系统时钟 */
SystemClock_Config();
/**************GPIO******************************************************************/
GPIOC13_Init();
GPIOA2_Init();
GPIOA_Init();
GPIOB_Init();
/***************串口******************************************************************/
/* 初始化串口并配置串口中断优先级 */
USART1_Init();
/* 使能接收,进入中断回调函数 */
HAL_UART_Receive_IT(&husart1,&aRxBuffer,1);
/***************PWM******************************************************************/
/* 通用定时器初始化并配置PWM输出功能 */
GENERAL_TIMx_Init();
/* 启动通道PWM输出 */
HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_4);
/**************ADC****************************************************************/
/* ADC 初始化 */
MX_ADCx_Init();
HAL_ADCEx_Calibration_Start(&hadcx);
/* 启动AD转换并使能AD中断 */
HAL_ADC_Start_IT(&hadcx);
/* ************************time4capture**********************************/
/*定时器4初始化并配置输入捕获功能 */
TIM4_Init();
/* 获取定时器时钟周期 */
ulTmrClk = HAL_RCC_GetHCLKFreq()/72;
/* 启动定时器 */
HAL_TIM_Base_Start_IT(&htim4);
/* 启动定时器通道输入捕获并开启中断 */
HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_2);
/* ************************time2capture**********************************/
/*定时器2初始化并配置输入捕获功能 */
TIM2_Init();
/* 启动定时器 */
HAL_TIM_Base_Start_IT(&htim2);
/* 启动定时器通道输入捕获并开启中断 */
HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);
/****************************time1************************************/
/* 基本定时器初始化:1ms中断一次 */
TIM1_Init();
/* 在中断模式下启动定时器 */
HAL_TIM_Base_Start_IT(&htim1);
/*雷达舵机归位*/
TIM3->CCR4 =170;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);//雷达扫描ON
HAL_Delay(2000);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);//雷达扫描OFF
/* 无限循环 */
while (1)
{
/*-----------------------------------------------*/
if(usart_switch)
{
switch(usart_data[1])
{
case 0x00:
switch(usart_data[2])
{
case 0x00:stop();//停止
break;
case 0x01:forward();//前进
break;
case 0x02:back();//后退
break;
case 0x03:left();//向左
break;
case 0x04:right();//向右
break;
default:break;
}break;
case 0x01:
switch(usart_data[2])
{
case 0x00:HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);//探照灯OFF
break;
case 0x01:HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);//探照灯ON
break;
default:break;
}break;
case 0x02:
switch(usart_data[2])
{
case 0x00:HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);//激光武器OFF
break;
case 0x01:HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);//激光武器ON
break;
default:break;
}break;
case 0x03:
switch(usart_data[2])
{
case 0x01://导弹1发射
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
missile1_switch=1;
break;
case 0x02://导弹2发射
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);
missile2_switch=1;
break;
case 0x03://导弹3发射
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET);
missile3_switch=1;
break;
case 0x04://导弹4发射
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_SET);
missile4_switch=1;
break;
default:break;
}break;
case 0x04:
switch(usart_data[2])
{
case 0x00:
ultrasonic_switch=0;
TIM3->CCR4 =170;
ultrasonic_time=2000;
break;
case 0x01:
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);//雷达扫描ON
ultrasonic_switch=1;
break;
default:break;
}break;
case 0x05:
{
TIM3->CCR1=TIM3->CCR2=(usart_data[2]*256)+usart_data[3];
}break;
case 0x06:
{
sleep_time=((usart_data[2]*256)+usart_data[3])*60000;
if(sleep_time) sleep_switch=1;
}break;
case 0x07:
{
TIM3->CCR3 = usart_data[3];//导弹舵机PWM占空比(150-230)
}break;
default:break;
}
usart_switch=0;
}
/*超声波*/
if(ultrasonic_switch)
{
ultrasonic();
}else if(!ultrasonic_time) HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
/*测转速*/
speed();
if(speed_time>100)//100ms
{
/* 打印速度speed1 */
aTxBuffer=0xFE;
HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
aTxBuffer=0xEF;
HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
aTxBuffer=0x03;//3位有效数据位
HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
aTxBuffer=0x02;//测速功能标志位
HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
aTxBuffer=0x00;
HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
aTxBuffer=0x00;
HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
/* 打印速度speed2*/
aTxBuffer=0xFE;
HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
aTxBuffer=0xEF;
HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
aTxBuffer=0x03;//3位有效数据位
HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
aTxBuffer=0x03;//测速功能标志位
HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
aTxBuffer=0x00;
HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
aTxBuffer=0x00;
HAL_UART_Transmit(&husart1, &aTxBuffer, 1, 0xFFFF);
speed_time=0;
}
/*测电压*/
if(voltage_time>500)
{
voltage();
voltage_time=0;
}
/*导弹发射*/
if(missile1_switch && missile1_time>2000)//2s
{
missile1_time=0;
missile1_switch=0;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
}
if(missile2_switch && missile2_time>2000)//2s
{
missile2_time=0;
missile2_switch=0;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);
}
if(missile3_switch && missile3_time>2000)//2s
{
missile3_time=0;
missile3_switch=0;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
}
if(missile4_switch && missile4_time>2000)//2s
{
missile4_time=0;
missile4_switch=0;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_RESET);
}
if(sleep_switch)
{
/*雷达舵机归位*/
ultrasonic_switch=0;
TIM3->CCR4 =170;
HAL_Delay(2000);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);//雷达扫描OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);//激光武器OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);//探照灯OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);//路由器OFF
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
while(sleep_time) delay_us(1);//延时函数不能删除,否者程序卡死
HAL_Delay(1000);//此处延时不能删,否者可能会出现程序时序错误
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET);//路由器ON
}
}
}
/**
* 函数功能: 串口接收完成回调函数
* 输入参数: 无
* 返 回 值: 无
* 说 明:无
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
if(UartHandle->Instance==USART1)
{
usartjudge();
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
while(HAL_OK!=HAL_UART_Receive_IT(&husart1,&aRxBuffer,1));
}
}
/**
* 函数功能: AD转换结束回调函数
* 输入参数: hadc:AD设备类型句柄
* 返 回 值: 无
* 说 明: 无
*/
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
ADC_ConvertedValue=HAL_ADC_GetValue(&hadcx);
}
/**
* 函数功能: 非阻塞模式下定时器的回调函数
* 输入参数: htim:定时器句柄
* 返 回 值: 无
* 说 明: 无
*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM4)
{
strCapture2 .usPeriod ++;
strCapture3 .usPeriod ++;
}
if(htim->Instance==TIM2)
{
ultrasonic_overtime=1;
}
if(htim->Instance==TIM1)
{
speed_time++;
voltage_time++;
if(ultrasonic_time) ultrasonic_time--;
if(missile1_switch) missile1_time++;
if(missile2_switch) missile2_time++;
if(missile3_switch) missile3_time++;
if(missile4_switch) missile4_time++;
if(sleep_switch && sleep_time) sleep_time--;
else sleep_switch=0;
}
}
/**
* 函数功能: 定时器捕获中断
* 输入参数: htim:定时器句柄
* 返 回 值: 无
* 说 明: 无
*/
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM4)
{
TIM_IC_InitTypeDef sConfigIC;
if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)//TIM_CHANNEL_1
{
if ( strCapture2 .ucStartFlag == 0 )
{
strCapture2 .usPeriod = 0;
// 获取定时器计数值
strCapture2 .usCtr = HAL_TIM_ReadCapturedValue(&htim4,TIM_CHANNEL_1);
// 配置输入捕获参数,主要是修改触发电平
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
sConfigIC.ICFilter = 0;
HAL_TIM_IC_ConfigChannel(&htim4, &sConfigIC, TIM_CHANNEL_1);
// 清除中断标志位
__HAL_TIM_CLEAR_IT(&htim4, TIM_IT_CC1);
// 启动输入捕获并开启中断
HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_1);
strCapture2 .ucStartFlag = 1;
}
else
{
// 获取定时器计数值
strCapture2 .usCtr2 = HAL_TIM_ReadCapturedValue(&htim4,TIM_CHANNEL_1);
// 配置输入捕获参数,主要是修改触发电平
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
sConfigIC.ICFilter = 0;
HAL_TIM_IC_ConfigChannel(&htim4, &sConfigIC, TIM_CHANNEL_1);
// 清除中断标志位
__HAL_TIM_CLEAR_IT(&htim4, TIM_IT_CC1);
// 启动输入捕获并开启中断
HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_1);
strCapture2 .ucStartFlag = 0;
strCapture2 .ucFinishFlag = 1;
}
}
else//TIM_CHANNEL_2
{
if ( strCapture3 .ucStartFlag == 0 )
{
strCapture3 .usPeriod = 0;
// 获取定时器计数值
strCapture3 .usCtr = HAL_TIM_ReadCapturedValue(&htim4,TIM_CHANNEL_2);
// 配置输入捕获参数,主要是修改触发电平
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
sConfigIC.ICFilter = 0;
HAL_TIM_IC_ConfigChannel(&htim4, &sConfigIC, TIM_CHANNEL_2);
// 清除中断标志位
__HAL_TIM_CLEAR_IT(&htim4, TIM_IT_CC2);
// 启动输入捕获并开启中断
HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_2);
strCapture3 .ucStartFlag = 1;
}
else
{
// 获取定时器计数值
strCapture3 .usCtr2 = HAL_TIM_ReadCapturedValue(&htim4,TIM_CHANNEL_2);
// 配置输入捕获参数,主要是修改触发电平
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
sConfigIC.ICFilter = 0;
HAL_TIM_IC_ConfigChannel(&htim4, &sConfigIC, TIM_CHANNEL_2);
// 清除中断标志位
__HAL_TIM_CLEAR_IT(&htim4, TIM_IT_CC2);
// 启动输入捕获并开启中断
HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_2);
strCapture3 .ucStartFlag = 0;
strCapture3 .ucFinishFlag = 1;
}
}
}
if(htim->Instance==TIM2)
{
TIM_IC_InitTypeDef sConfigIC;
if ( strCapture1 .ucStartFlag == 0 )
{
htim2.Instance->CNT=0; // 清零定时器计数
ultrasonic_overtime=0;
strCapture1 .usCtr = 0;
// 配置输入捕获参数,主要是修改触发电平
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
sConfigIC.ICFilter = 0;
HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2);
// 清除中断标志位
__HAL_TIM_CLEAR_IT(&htim2, TIM_IT_CC2);
// 启动输入捕获并开启中断
HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);
strCapture1 .ucStartFlag = 1;
}
else
{
// 获取定时器计数值
strCapture1 .usCtr = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_2);
// 配置输入捕获参数,主要是修改触发电平
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
sConfigIC.ICFilter = 0;
HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2);
// 清除中断标志位
__HAL_TIM_CLEAR_IT(&htim2, TIM_IT_CC2);
// 启动输入捕获并开启中断
HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);
strCapture1 .ucStartFlag = 0;
strCapture1 .ucFinishFlag = 1;
}
}
}
android wifi智能车,STM32智能WiFi视频小车全套资料(带安卓app与stm32源码等)相关推荐
- hc06蓝牙模块android,HC-06蓝牙扩展模块的安卓APP与单片机源码
/********************************************************************************* * [作 者]: 清翔电子: ...
- 第十七届全国大学生智能车竞赛智能视觉组培训第一弹
简 介: 第十七届全国大学生智能车竞赛竞速比赛中,由NXP赞助的智能视觉组的比赛细则已经公布的.为了帮助同学们能够更好地制作比赛作品,在在此过程中得到更好地锻炼,NXP公司近期举行智能视觉组培训.欢迎 ...
- android修改原生代码,【ROM教程】安卓原生ROM修改源码消除WIFI叹号教程
[ROM教程]安卓原生ROM修改源码消除WIFI叹号教程.Android为了对网络状态进行检测,采用了一种叫做captive detection的方式进行网络状态检测.其实说起来很简单,每当连接到一个 ...
- android视频缓存框架 [AndroidVideoCache](https://github.com/danikula/AndroidVideoCache) 源码解析与评估
文章目录 android视频缓存框架 [AndroidVideoCache](https://github.com/danikula/AndroidVideoCache) 源码解析与评估 引言 使用方 ...
- 筷子SaaS智能系统源码-短视频私域流量增长解决方案,出【源码-无限授权】
在内容营销过程中,相信大家最常听到的一个词是:私域. 一时间,私域流量.私域运营等话题风生水起,不少企业开始搭建自己的私域系统,连以公域见长的平台也向开始布局私域生态,可谓是将私域推向了新高点.那么, ...
- 【朝花夕拾】Android自定义View之(一)手把手教你看懂View绘制流程——向源码要答案
前言 原文:Android自定义View之(一)手把手教你看懂View绘制流程--向源码要答案 View作为整个app的颜值担当,在Android体系中占有重要的地位.深入理解Android View ...
- 仿抖音短视频APP双端系统源码+带教程/PHP的
正文: 仿抖音短视频APP双端系统源码+带教程/PHP的. 下方是程序完整标题: 标题上所谓的双端其实就是安卓/IOS都是分别有源码的,这系统是有安装教程的,有兴趣的自行去研究吧. 程序: wwgeg ...
- java写脸萌_FaceLovely 本项目是一个仿安卓脸萌app应用的源码, 款非常有趣的拼脸软件,即使你不会画 android 259万源代码下载- www.pudn.com...
文件名称: FaceLovely下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 6940 KB 上传时间: 2016-05-25 下载次数: 0 详细说明:本项 ...
- PHP视频点赞任务发布平台,Thinkphp短视频点赞关注评论任务悬赏接单平台源码
源码介绍 ThinkPHP短视频点赞关注评论任务悬赏接单平台源码 ThinkPHP内核开发的抖音快手微视短视频APP一键点赞 关注评论接单任务悬赏平台源码.源码特点 1.全新ui清新主页可接取抖音快手 ...
最新文章
- struct sockaddr与struct sockaddr in struct sockaddr un的区别和联系
- vue实现查询多条记录_sql:多表查询
- 在Simplicity Studio下创建适用于EFR32的工程项目
- Java命令学习系列(一)——Jps
- sap获取系统时间_获取系统当前时间
- C++ SVM Opencv3.4实现人脸检测
- C++ 文字常量与常变量
- Java 非小数BigDecimal转换为Integer
- catia中尺子没了怎么调出来_CATIA点线面工具栏怎么调出来
- SheetJS xlsx js库入门使用
- Fermat theorem (stationary points)
- c语言编程被7整除的4位数,四位数3a8c能被7整除,且是55的倍数,求a..._一建考试_帮考网...
- HTTP(9):新增功能协议
- RoboCup救援仿真和代理开发框架手册
- 利用css伪类元素实现点击范围扩大
- 阿里中间件seata源码剖析六:TCC模式中2阶段提交实现
- 基于asp.net116教师工资管理系统
- 基于fabric的联盟链管理项目
- JavaScript unescape() 函数
- Java3D安装(idea版)