TLC6983驱动例程
时间: 2023-09-30 10:13:24 浏览: 118
TC6963的驱动程序
TLC6983是一款高精度的常数电流驱动器,通常用于LED显示屏的控制。下面是一个基于STM32的TLC6983驱动例程:
```c
#include <stdio.h>
#include "stm32f4xx.h"
#define LED1 0x01
#define LED2 0x02
#define LED3 0x04
#define LED4 0x08
#define LED5 0x10
#define LED6 0x20
#define LED7 0x40
#define LED8 0x80
//TLC6983控制信号定义
#define TLC6983_LE_H() GPIO_SetBits(GPIOE, GPIO_Pin_7)
#define TLC6983_LE_L() GPIO_ResetBits(GPIOE, GPIO_Pin_7)
#define TLC6983_CLK_H() GPIO_SetBits(GPIOE, GPIO_Pin_10)
#define TLC6983_CLK_L() GPIO_ResetBits(GPIOE, GPIO_Pin_10)
#define TLC6983_SDI_H() GPIO_SetBits(GPIOE, GPIO_Pin_11)
#define TLC6983_SDI_L() GPIO_ResetBits(GPIOE, GPIO_Pin_11)
void delay_us(uint32_t us) {
uint32_t count = 0;
us *= 12;
while(count < us) {
count++;
}
}
void TLC6983_SendData(uint8_t *data, uint8_t len) {
uint8_t i, j;
for(i = 0; i < len; i++) {
for(j = 0; j < 8; j++) {
if(data[i] & (0x80 >> j)) {
TLC6983_SDI_H();
} else {
TLC6983_SDI_L();
}
TLC6983_CLK_L();
delay_us(1);
TLC6983_CLK_H();
delay_us(1);
}
}
TLC6983_LE_L();
delay_us(1);
TLC6983_LE_H();
}
void TLC6983_Init(void) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
TLC6983_LE_H();
TLC6983_CLK_H();
TLC6983_SDI_H();
}
int main(void) {
uint8_t data[8] = {0};
uint8_t i = 0;
TLC6983_Init();
while(1) {
data[0] = LED1;
TLC6983_SendData(data, 8);
delay_us(500000);
data[0] = LED2;
TLC6983_SendData(data, 8);
delay_us(500000);
data[0] = LED3;
TLC6983_SendData(data, 8);
delay_us(500000);
data[0] = LED4;
TLC6983_SendData(data, 8);
delay_us(500000);
data[0] = LED5;
TLC6983_SendData(data, 8);
delay_us(500000);
data[0] = LED6;
TLC6983_SendData(data, 8);
delay_us(500000);
data[0] = LED7;
TLC6983_SendData(data, 8);
delay_us(500000);
data[0] = LED8;
TLC6983_SendData(data, 8);
delay_us(500000);
}
}
```
这个例程中使用了STM32F4系列的芯片作为主控,使用了GPIO来控制TLC6983的三个控制信号。在main函数中,通过依次控制LED1-LED8的亮灭来测试TLC6983是否正常工作。需要注意的是,TLC6983控制信号的电平需要经过调试才能确定,尤其是时序和数据的正确性。
阅读全文