LED单元板驱动(HUB75接口)
开始之前先吐槽一下,搜这个的资料。要么都是Arduino,要么单片机的收费。小小的一个LED单元板,凭什么?
用Arduino是你速度快还是我ST,树莓派不好用?收费更离谱,这点东西还藏私?给你个中指凸。把原理都写出来看你怎么收费。
一、接口定义及原理
如图,有两个RGB通道,共占用6个IO。剩下的ABCDE为地址通道,LAT为行数据锁存通道,CLK为数据时钟,OE为低电平使能LED显示。图片这里没有E,证明它是16扫的,有E就会把B上面的地改为E。这样就是5位,2的5次方32扫。16扫控制16行显示,共2个RGB通道所以16扫可以控制16*2=32行显示。
(1)单元板的显示为单位时间内显示一行数据,然后短时间内切换到另一行显示,16扫一个显示周期为切换16次。
(2)两个RGB通道分别控制上下两部分的RGB灯。图片中的为32*16。正常来说,需要3个地址ABC,假设ABC 3个IO为高电平意味着选定第7行跟第15行,RGB1通道数据被写到第7行,RGB2数据被写到第15行。(我这个板子比较坑,有点不同)
(3)数据的写入顺序,失能LED显示,写入一行数据,选定行,锁存,使能LED显示。
(4)颜色渐变,方法是同一行扫描32次,假设R1我只显示一次,那它占空比就是1/32,显示次数越多越来亮。
这方法挺麻烦,但暂时没想到别的方法。
By the way:我这板子比较奇怪,数据写入方式跟一般的板子不一样。具体看图:
数据填充的时候,RBG1通道前8个时钟周期数据在第0行,接下来8个时钟周期数据却跳到第4行去了。然后又跳回第一行。
正常的应该是一直往同一行填充数据才对的。所以我买的这个板子比较奇葩。
二、驱动代码
使用单片机为STM32F407VE,STM32CUBEMX生成代码
#include "main.h"
#include "tim.h"
#include "gpio.h"void SystemClock_Config(void);#define OE_H HAL_GPIO_WritePin(OE_GPIO_Port,OE_Pin,GPIO_PIN_SET)
#define R1_H HAL_GPIO_WritePin(R1_GPIO_Port,R1_Pin,GPIO_PIN_SET)
#define R2_H HAL_GPIO_WritePin(R2_GPIO_Port,R2_Pin,GPIO_PIN_SET)
#define G1_H HAL_GPIO_WritePin(G1_GPIO_Port,G1_Pin,GPIO_PIN_SET)
#define G2_H HAL_GPIO_WritePin(G2_GPIO_Port,G2_Pin,GPIO_PIN_SET)
#define B1_H HAL_GPIO_WritePin(B1_GPIO_Port,B1_Pin,GPIO_PIN_SET)
#define B2_H HAL_GPIO_WritePin(B2_GPIO_Port,B2_Pin,GPIO_PIN_SET)
#define A_H HAL_GPIO_WritePin(A_GPIO_Port,A_Pin,GPIO_PIN_SET)
#define B_H HAL_GPIO_WritePin(B_GPIO_Port,B_Pin,GPIO_PIN_SET)
#define CLK_H HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,GPIO_PIN_SET)
#define LAT_H HAL_GPIO_WritePin(LAT_GPIO_Port,LAT_Pin,GPIO_PIN_SET)#define OE_L HAL_GPIO_WritePin(OE_GPIO_Port,OE_Pin,GPIO_PIN_RESET)
#define R1_L HAL_GPIO_WritePin(R1_GPIO_Port,R1_Pin,GPIO_PIN_RESET)
#define R2_L HAL_GPIO_WritePin(R2_GPIO_Port,R2_Pin,GPIO_PIN_RESET)
#define G1_L HAL_GPIO_WritePin(G1_GPIO_Port,G1_Pin,GPIO_PIN_RESET)
#define G2_L HAL_GPIO_WritePin(G2_GPIO_Port,G2_Pin,GPIO_PIN_RESET)
#define B1_L HAL_GPIO_WritePin(B1_GPIO_Port,B1_Pin,GPIO_PIN_RESET)
#define B2_L HAL_GPIO_WritePin(B2_GPIO_Port,B2_Pin,GPIO_PIN_RESET)
#define A_L HAL_GPIO_WritePin(A_GPIO_Port,A_Pin,GPIO_PIN_RESET)
#define B_L HAL_GPIO_WritePin(B_GPIO_Port,B_Pin,GPIO_PIN_RESET)
#define CLK_L HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,GPIO_PIN_RESET)
#define LAT_L HAL_GPIO_WritePin(LAT_GPIO_Port,LAT_Pin,GPIO_PIN_RESET)//此单元板4扫一次性输入2行数据,2个通道,故控制2*2*LED_ROW=16行
#define LED_ROW 4
//一行32个点
#define LED_COLUMN 32typedef struct
{uint16_t B:5;uint16_t G:5;uint16_t R:5; uint16_t null:1;
}led_data;extern const unsigned char gImage_111[1024];
led_data *img_data = (led_data*)gImage_111;void delay(uint16_t time)
{uint16_t i,j;for(i=0;i<time;i++)for(j=0;j<100;j++);
}void led_DRamDis(led_data *pdata)
{uint16_t col_depth;uint16_t j,k,l;uint16_t row=0;uint16_t pos_down = LED_COLUMN*LED_ROW*2; //指向LED下半部分数据起点if(pdata == NULL) return;for(row = 0;row<LED_ROW;row++) //发送一扫数据{for(col_depth=0;col_depth<32;col_depth++) //每种颜色5bit,32种变化{OE_H;for(l=0;l<4;l++) //一行4*8像素点数据{ for(k=0;k<2;k++) //发送16像素点数据后,数据被续写{for(j=0;j<8;j++) //发送8像素点数据后数据会跳转{ if(col_depth<pdata[j+row*32+32*LED_ROW*k+l*8].B) B1_H; else B1_L; if(col_depth<pdata[j+row*32+32*LED_ROW*k+l*8].R) R1_H; else R1_L; if(col_depth<pdata[j+row*32+32*LED_ROW*k+l*8].G) G1_H; else G1_L; if(col_depth<pdata[j+row*32+pos_down+32*LED_ROW*k+l*8].B) B2_H; else B2_L; if(col_depth<pdata[j+row*32+pos_down+32*LED_ROW*k+l*8].R) R2_H; else R2_L; if(col_depth<pdata[j+row*32+pos_down+32*LED_ROW*k+l*8].G) G2_H; else G2_L; CLK_L;CLK_H; } }}//使能一行数据if(row&0x01) A_H;else A_L;if(row&0x02) B_H;else B_L;LAT_L;LAT_H; OE_L; delay(10); //短暂延时,让当前行数据显示一段时间} }
}led_data img_data2[512];void RedDis(uint8_t r)
{uint16_t i;for(i=0;i<512;i++){img_data2[i].R = r;img_data2[i].G = 0;img_data2[i].B = 0; }for(i=0;i<5;i++)led_DRamDis(img_data2);
}void BlueDis(uint8_t b)
{uint16_t i;for(i=0;i<512;i++){img_data2[i].R = 0;img_data2[i].G = 0;img_data2[i].B = b; }for(i=0;i<5;i++)led_DRamDis(img_data2);
}void GreenDis(uint8_t g)
{uint16_t i;for(i=0;i<512;i++){img_data2[i].R = 0;img_data2[i].G = g;img_data2[i].B = 0; }for(i=0;i<5;i++)led_DRamDis(img_data2);
}int main(void)
{uint16_t i;uint16_t *p;HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_TIM7_Init();while (1){for(i=0;i<16;i++)RedDis(i); for(i=0;i<16;i++)BlueDis(i); for(i=0;i<16;i++)GreenDis(i); for(i=0;i<100;i++)led_DRamDis(img_data);}
}void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Configure the main internal regulator output voltage */__HAL_RCC_PWR_CLK_ENABLE();__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);/** Initializes the CPU, AHB and APB busses clocks */RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = 8;RCC_OscInitStruct.PLL.PLLN = 336;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ = 4;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB busses clocks */RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK){Error_Handler();}
}void Error_Handler(void)
{}
图像数据数组采用Image2Lcd 2.9生成,搞单片机的人应该对此很熟悉。16位RBG555数据格式
const unsigned char gImage_111[1024] = { /* 0X00,0X10,0X20,0X00,0X10,0X00,0X00,0X1B, */
0XE9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XC9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,
0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XC9,0X03,0XC9,0X03,
0XE9,0X03,0XC9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE8,0X03,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0XC9,0X03,0XE9,0X03,0XC9,0X03,0XCA,0X03,0XE9,0X03,0XC9,0X03,0XC9,0X03,
0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XC8,0X03,
0XC9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XC9,0X03,0XC8,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XEA,0X03,
0XC9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0XC9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,
0XE9,0X03,0XE9,0X03,0XC9,0X03,0X00,0X7C,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0X1F,0X00,0X1F,0X00,0X1F,0X00,0X1F,0X00,0X1F,0X00,0X1F,0X00,0XC9,0X03,0XE9,0X03,
0XE9,0X03,0XE9,0X03,0XFF,0X7F,0XFF,0X7F,0XFF,0X7F,0XFF,0X7F,0XFF,0X7F,0XE9,0X03,
0XE0,0X7F,0XE0,0X7F,0XE0,0X7F,0XE0,0X7F,0XE0,0X7F,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0XE9,0X03,0XE9,0X03,0X00,0X7C,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0X1F,0X00,0XE9,0X03,0XC9,0X03,0XC9,0X03,0XE9,0X03,0X1F,0X00,0XE9,0X03,
0XE9,0X03,0XFF,0X7F,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XFF,0X7F,0XE9,0X03,
0XC9,0X03,0XE0,0X7F,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE0,0X7F,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0XE9,0X03,0X00,0X7C,0XC9,0X03,0X00,0X7C,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0X1F,0X00,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0X1F,0X00,0XE9,0X03,
0XFF,0X7F,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XFF,0X7F,0XC9,0X03,
0XC9,0X03,0XE0,0X7F,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE0,0X7F,0XE9,0X03,
0XC9,0X03,0XE9,0X03,0X00,0X7C,0XC9,0X03,0X00,0X7C,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0X1F,0X00,0XE9,0X03,0XE9,0X03,0XC9,0X03,0X1F,0X00,0XE9,0X03,0XC9,0X03,
0XFF,0X7F,0XE9,0X03,0XC9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0XE0,0X7F,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XC9,0X03,0XE0,0X7F,0XE9,0X03,
0XE9,0X03,0XE9,0X03,0X00,0X7C,0XE9,0X03,0X00,0X7C,0XC9,0X03,0XC9,0X03,0XE9,0X03,
0XC9,0X03,0X1F,0X00,0X1F,0X00,0X1F,0X00,0X1F,0X00,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XFF,0X7F,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0XE0,0X7F,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE0,0X7F,0XC9,0X03,
0XE9,0X03,0XE9,0X03,0X00,0X7C,0XC9,0X03,0X00,0X7C,0XC9,0X03,0XE9,0X03,0XC9,0X03,
0XE9,0X03,0X1F,0X00,0XC9,0X03,0XC9,0X03,0XE9,0X03,0X1F,0X00,0XE9,0X03,0XE9,0X03,
0XFF,0X7F,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XC9,0X03,0XE9,0X03,
0XE9,0X03,0XE0,0X7F,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE0,0X7F,0XC9,0X03,
0XE9,0X03,0X00,0X7C,0X00,0X7C,0X00,0X7C,0X00,0X7C,0X00,0X7C,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0X1F,0X00,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0X1F,0X00,0XE9,0X03,
0XFF,0X7F,0XE9,0X03,0XC9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0XE0,0X7F,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XC9,0X03,0XE0,0X7F,0XE9,0X03,
0XC9,0X03,0X00,0X7C,0XE9,0X03,0XC9,0X03,0XE9,0X03,0X00,0X7C,0XE9,0X03,0XC9,0X03,
0XC9,0X03,0X1F,0X00,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0X1F,0X00,0XE9,0X03,
0XFF,0X7F,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XFF,0X7F,0XE9,0X03,
0XC9,0X03,0XE0,0X7F,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE0,0X7F,0XE9,0X03,
0XE9,0X03,0X00,0X7C,0XE9,0X03,0XE9,0X03,0XE9,0X03,0X00,0X7C,0XC9,0X03,0XE9,0X03,
0XE9,0X03,0X1F,0X00,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0X1F,0X00,0XE9,0X03,
0XE9,0X03,0XFF,0X7F,0XEA,0X03,0XE9,0X03,0XE9,0X03,0XFF,0X7F,0XC8,0X03,0XE9,0X03,
0XC9,0X03,0XE0,0X7F,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE0,0X7F,0XE9,0X03,0XE9,0X03,
0X00,0X7C,0X00,0X7C,0X00,0X7C,0XE9,0X03,0X00,0X7C,0X00,0X7C,0X00,0X7C,0XC9,0X03,
0X1F,0X00,0X1F,0X00,0X1F,0X00,0X1F,0X00,0X1F,0X00,0X1F,0X00,0XC9,0X03,0XC9,0X03,
0XE9,0X03,0XE9,0X03,0XFF,0X7F,0XFF,0X7F,0XFF,0X7F,0XE9,0X03,0XE9,0X03,0XC9,0X03,
0XE0,0X7F,0XE0,0X7F,0XE0,0X7F,0XE0,0X7F,0XE0,0X7F,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,
0XC9,0X03,0XC9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,
0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0XC9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,
0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XC9,0X03,
0XE9,0X03,0XC9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XC8,0X03,
0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,
0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XC9,0X03,
0XE9,0X03,0XC9,0X03,0XE9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,0XC9,0X03,0XE9,0X03,
};
三、效果图
改变每个RGB通道的占空比实现渐变(一行扫描32次),所以闪烁会严重些。
LED单元板驱动(HUB75接口)相关推荐
- 一文搞懂HUB75接口(附带LED单元板驱动介绍)
导读:HUB75接口是一种常用的LED单元板驱动接口,本文就常见的HUB75接口知识点进行整理. 一.HUB75 接口介绍 上图中有 A/B/C/D 4根地址线,所以是16扫( 2 4 = 16 2^ ...
- 最新 Arduino 驱动 12接口/户外 LED显示屏/LED点阵屏/LED单元板
起因 现有的驱动LED显示屏的资料,比较好的只有这个.但是它驱动的是08接口的室内显示屏,而我要驱动的是12接口的户外显示屏.两种屏幕的区别在于户外屏幕点阵比较稀疏,而且二者的扫描方式,驱动方式都不太 ...
- 【花雕动手做】有趣好玩的音乐可视化系列项目(30)--P6 LED单元板
偶然心血来潮,想要做一个音乐可视化的系列专题.这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不过还是打算从最简单的开始,实际动手做做试验,耐心尝试一下各种方案,逐步积累 ...
- 检测LED单元板的好坏的常见方法
LED电子显示屏很重要的组成部分就有LED单元板,如果单元板有问题,会直接影响LED显示屏的整体质量!免费教你LED显示屏的安装和调试的四大技巧.所以,如何辨别LED单元板的好坏是LED显示屏商家关心 ...
- STM32F103 驱动32x64双色点阵单元板 (标准HUB08 接口 F3.75)
MCU:STM32F103C8 点阵屏:32*64 F3.75 单元板 红绿双色 显示 接口:标准HUB08 OE :高电平有效 ,138译码 , 1/16 扫 欢迎加QQ群 ...
- 【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板
偶然心血来潮,想要做一个音乐可视化的系列专题.这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不过还是打算从最简单的开始,实际动手做做试验,耐心尝试一下各种方案,逐步积累 ...
- [入门教程]详细讲解STM32控制LED点阵屏(HUB75接口)
本文适合初级入门的同学,大佬请绕道.讲解怎么用stm32驱动成品LED点阵屏显示一副七色无灰度的图片,有灰度的图片可以入门后继续研究. 使用软硬件: 软件:Keil5,程序在后面会给出 硬件:STM3 ...
- 51单片机驱动P10单元板
以下是P10单元板(单色,1/4扫描,户外半户外)的实物图. P10屏幕是店铺常用的点阵屏幕,像素32*16(可以级联很多块).内部电路是74hc595或者是74hc595的替代芯片和编码驱动芯片组合 ...
- 创龙TI AM437x ARM Cortex-A9 CPU开发板JTAG仿真器接口、LED指示灯
TL437x-IDK是广州创龙基于SOM-TL437x核心板研发的一款TI ARM Cortex-A9开发板,采用核心板+底板方式,尺寸为205mm*125mm,核心板采用4*60pin B2B工业级 ...
最新文章
- 零距离感受2015年安全***大赛:静动之美 ***兼备
- LAMP部署搭建————重要文件备份
- php memcache扩展的一个细节
- 台式电脑打不开计算机c盘,电脑电脑C盘打不开怎么办(计算机应用范文)
- UNIX再学习 -- XSI IPC通信方式
- 机器学习-算法背后的理论与优化(part3)--经验风险与泛化误差概述
- android4.0 菜单,三大主流安卓4.0界面解析 MIUI最实用
- 数论 —— 整数分解
- 迅雷没有做错什么,只是用户不需要了
- 目标检测-ImageAI从安装到使用详解
- lpush rpush 区别_关于redis之lpush、rpush、lset、lrem
- 2-16-树状关系模式
- 亚马逊云科技 Build On -轻松搭建咖啡点单系统
- HTML简单制作一个网页
- Rabbitmq基于插件的延迟队列
- 一个可以在多平台运行的任天堂GameBoy模拟器
- kotlin类的成员变量 方法
- sip协议呼叫流程详解
- MySQL的计算时间差
- 关于Uncaught TypeError (Cannot read property ..undefined)的解决办法