以下程序可以直接跑在arduino UNO开发板上:
#include <Wire.h>
#define HW_RESET_PIN 8
void test_i2c()
{
Wire.beginTransmission(0x48);
Wire.write(0x00);
Wire.write(0x01);
byte x = Wire.endTransmission();
Serial.println(x);
}
void tlc59108_config()
{
/* Set normal mode */
Wire.beginTransmission(0x48);
Wire.write(0x00);
Wire.write(0x01);
Wire.endTransmission();
/* Set FULL ON */
Wire.beginTransmission(0x48);
Wire.write(0x0c);
Wire.write(0x55);
Wire.endTransmission();
Wire.beginTransmission(0x48);
Wire.write(0x0d);
Wire.write(0x55);
Wire.endTransmission();
}
void tlc59108_setBrightness(byte dutyCycle)
{
/* Set PWM mode */
Wire.beginTransmission(0x48);
Wire.write(0x0c);
Wire.write(0xaa);
Wire.endTransmission();
Wire.beginTransmission(0x48);
Wire.write(0x0d);
Wire.write(0xaa);
Wire.endTransmission();
Wire.beginTransmission(0x48);
Wire.write(0x02 | 0xa0);
for (byte i = 0; i < 8; i++) {
Wire.write(dutyCycle);
}
Wire.endTransmission();
}
void tlc59108_reset()
{
/* Reset */
digitalWrite(HW_RESET_PIN, HIGH);
delay(1);
digitalWrite(HW_RESET_PIN, LOW);
delay(1);
digitalWrite(HW_RESET_PIN, HIGH);
delay(1);
}
void setup()
{
/* Setup init */
Wire.begin();
Serial.begin(9600);
pinMode(HW_RESET_PIN, OUTPUT);
tlc59108_reset();
tlc59108_config();
tlc59108_setBrightness(0xf0);
}
void loop(){
sweep();
}
void sweep() {
Serial.println("Blinking...");
delay(1000);
}