SM16306S 使用
SM16306芯片手册
注意:1.LE引脚用于芯片数据锁存,OE引脚用于芯片使能
2.根据芯片技术手册,SDI每输入一位数据,需要LE置位一次,用于锁存数据
3.OE引脚最好不要直接接地拉低,如果OE引脚直接接地,芯片在写入过程中,会出现不受控的点亮,导致写入时闪烁现象出现
芯片驱动
本版本OE引脚直接接地了,所以没有对OE引脚进行操作,一般情况在写入时失能芯片
/******************************** 宏定义 *************************************/
#define CLK_PIN GPIO_Pin_3
#define SDI_PIN GPIO_Pin_8
#define EN_PIN GPIO_Pin_9
#define CLK_UP GPIOB_SetBits(GPIO_Pin_3)
#define CLK_DOWN GPIOB_ResetBits(GPIO_Pin_3)
#define SDI_UP GPIOB_SetBits(GPIO_Pin_8)
#define SDI_DOWN GPIOB_ResetBits(GPIO_Pin_8)
#define LE_UP GPIOB_SetBits(GPIO_Pin_9)
#define LE_DOWN GPIOB_ResetBits(GPIO_Pin_9)
/******************************** 库函数 *************************************/
void sm12306_init(void)
{
GPIOB_ModeCfg(CLK_PIN, GPIO_ModeOut_PP_5mA);
GPIOB_ModeCfg(SDI_PIN, GPIO_ModeOut_PP_5mA);
GPIOB_ModeCfg(EN_PIN, GPIO_ModeOut_PP_5mA);
CLK_DOWN;
SDI_DOWN;
LE_DOWN;
//初始化LED结构体
memset(&Led,0,sizeof(LED_CFG));
}
//内部调用,仅用于写入LED_STATE
static void open_sm16306s_led(u16 data)
{
for ( u8 i = 0; i < 16; i++)
{
if (data&0X8000)
SDI_UP;
else
SDI_DOWN;
CLK_UP;
data = (data<<1);
CLK_DOWN;
LE_UP;
CLK_UP;
LE_DOWN;
CLK_DOWN;
}
}
CLK_UP;
LE_DOWN;
CLK_DOWN;
}
}