#include "iic_driver.h" #define sm2315_en 1 #define SDA 25 #define SCL 24 #define IIC_HIGH (0x3f) #define IIC_LOW (0x3e) /********************************************************* 功能:延时 *********************************************************/ void iic_delay(char i) { int y; for(;i>0;i--) for(y=2;y>0;y--) {;;;;;} } /********************************************************* 功能:开始 *********************************************************/ void hal_iic_start(void) { HWRITE(0x8080+SDA,IIC_HIGH); HWRITE(0x8080+SCL,IIC_HIGH); iic_delay(1); HWRITE(0x8080+SDA,IIC_LOW); iic_delay(1); HWRITE(0x8080+SCL,IIC_LOW); } /********************************************************* 功能:应答 *********************************************************/ void hal_iic_ack(void) { HWRITE(0x8080+SCL,IIC_LOW); iic_delay(1); HWRITE(0x8080+SCL,IIC_HIGH); iic_delay(1); HWRITE(0x8080+SCL,IIC_LOW); } /********************************************************* 功能:停止 *********************************************************/ void hal_iic_stop(void) { HWRITE(0x8080+SDA,IIC_LOW); HWRITE(0x8080+SCL,IIC_HIGH); iic_delay(1); HWRITE(0x8080+SDA,IIC_HIGH); } /********************************************************* 功能:写8位数据 *********************************************************/ void hal_iic_send_onebyte(unsigned char dat) { unsigned char i; for(i=0;i<8;i++) { HWRITE(0x8080+SCL,IIC_LOW); if(dat&0x80) HWRITE(0x8080+SDA,IIC_HIGH); else HWRITE(0x8080+SDA,IIC_LOW); iic_delay(3); dat=dat<<1; HWRITE(0x8080+SCL,IIC_HIGH); iic_delay(3); } hal_iic_ack(); } /********************************************************* 功能:写灰度位数据 *********************************************************/ void hal_iic_send_grayscale_dat(unsigned short dat) { hal_iic_send_onebyte( dat>>8) ; hal_iic_send_onebyte( dat & 0xFF) ; } /********************************************************* 功能:指令1 *********************************************************/ void hal_iic_send_control_cmd(unsigned char com) { hal_iic_stop(); ;; hal_iic_start(); hal_iic_send_onebyte(com); } #if (sm2235_en==1) #define sm2235_ch_addr 0xd8 #define sm2235_curr_val 0x69 //rgb=4.5w 24mA c/w=50ma //#define sm2235_curr_val 0xff void hal_send_light_control_dataout(uint16_t red,uint16_t gree,uint16_t blue,uint16_t cool,uint16_t wwarm) { hal_iic_send_control_cmd(sm2235_ch_addr); hal_iic_send_onebyte(sm2235_curr_val); // hal_iic_send_grayscale_dat(red); //跟手册rgb通道对应的参数值 可以兼容低压灯板 // hal_iic_send_grayscale_dat(gree); // hal_iic_send_grayscale_dat(blue); hal_iic_send_grayscale_dat(blue); //兼容我们的灯板控制顺序 hal_iic_send_grayscale_dat(gree); hal_iic_send_grayscale_dat(red); hal_iic_send_grayscale_dat(cool); hal_iic_send_grayscale_dat(wwarm); hal_iic_stop(); } #endif #if (sm2315_en==1) #define sm2315_ch_addr 0xC0 #define sm2315_curr_val 0x3b //rgb=24ma cw=40ma void hal_send_light_control_dataout(uint16_t red,uint16_t gree,uint16_t blue,uint16_t cool,uint16_t wwarm) { hal_iic_send_control_cmd(sm2315_ch_addr); hal_iic_send_onebyte(sm2315_curr_val); if((blue==0&&gree==0&&red==0)&&cool==0&&wwarm==0) { hal_iic_send_onebyte(0x20);//on待机功能 }else{ hal_iic_send_onebyte(0x00);//关闭待机功能 } hal_iic_send_onebyte(blue/4); //兼容我们的灯板控制顺序 hal_iic_send_onebyte(gree/4); hal_iic_send_onebyte(red/4); hal_iic_send_onebyte(cool/4); hal_iic_send_onebyte(wwarm/4); hal_iic_stop(); } #endif