123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- #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
|