?? tw9910 i2c initial.c
字號:
void I2CStart(void)
{
I2CON=I2CRestart; //啟動I2C總線
while(SI==0); //啟動中...... 啟動完畢SI=1
}
void I2CSend(unsigned char send)
{
I2DAT=send; //待發送數據裝入I2DAT
I2CON=I2CBus_ACK; //清除SI準備發送
while(SI==0); //發送中...... 發送完畢SI=1
}
void WriteTW9910(unsigned char index,unsigned char dat)
{
I2CStart();
I2CSend(SLAW); //發送從器件地址
if(I2STAT!=0x18) //發送完畢后檢驗是否有應答
{
I2CON=I2CStop; //如果沒有應答就停止I2C總線
}
I2CSend(index); //發送從器件數據寄存器首地址
if(I2STAT!=0x28) //發送完畢后檢驗是否有應答
{
I2CON=I2CStop; //
}
I2CSend(dat); //發送從器件控制寄存器控制字
if(I2STAT!=0x28) //發送完畢后檢驗是否有應答
{
I2CON=I2CStop; //
}
I2CON=I2CStop; //數據發送完畢釋放總線
}
void I2CRead(void)
{
I2CON=I2CBus_ACK; //清除SI準備接收
while( SI==0 ); //接收中......
}
unsigned char ReadTW9910(unsigned char index)
{
unsigned char read=0;
I2CStart();
I2CSend(SLAW); //發送從器件地址
if(I2STAT!=0x18) //發送完畢后檢驗是否有應答
{
I2CON=I2CStop; //如果沒有應答就停止I2C總線
}
I2CSend(index); //發送從器件數據寄存器首地址
if(I2STAT!=0x28) //發送完畢后檢驗是否有應答
{
I2CON=I2CStop; //
}
I2CStart();
I2CSend(SLAR); //發送從器件地址
if(I2STAT!=0x40) //發送完畢后檢驗是否有應答
{
I2CON=I2CStop; //如果沒有應答就停止I2C總線
}
I2CRead(); //接收中......
if(I2STAT!=0x50) //接收完畢進行應答判斷
{
I2CON=I2CStop; //
}
read=I2DAT; //數據取出
if(I2STAT!=0x50)
{
read=0; //接收錯誤,數據清零
}
I2CON=I2CStop; //數據接收完畢釋放總線
return(read); //接收數據返回
}
void TW9910Initial(void)
{
RSTB=1;
// PAL
WriteTW9910(0x00,0x59);
WriteTW9910(0x01,0x69);
WriteTW9910(0x02,0x40);
WriteTW9910(0x03,0xa2);
WriteTW9910(0x04,0x00);
WriteTW9910(0x05,0x01);
WriteTW9910(0x06,0x00);
WriteTW9910(0x07,0x12);
WriteTW9910(0x08,0x19);
WriteTW9910(0x09,0x1f);
WriteTW9910(0x0a,0x0c);
WriteTW9910(0x0b,0xd0);
WriteTW9910(0x0c,0xcc);
WriteTW9910(0x0d,0x00);
WriteTW9910(0x0e,0x11);
WriteTW9910(0x0f,0x00);
WriteTW9910(0x10,0x00);
WriteTW9910(0x11,0x64);
WriteTW9910(0x12,0x11);
WriteTW9910(0x13,0x80);
WriteTW9910(0x14,0x80);
WriteTW9910(0x15,0x00);
WriteTW9910(0x16,0x00);
WriteTW9910(0x17,0x30);
WriteTW9910(0x18,0x44);
WriteTW9910(0x19,0x57);
WriteTW9910(0x1a,0x0f);
//WriteTW9910(0x1b,0xc0);
WriteTW9910(0x1b,0x80);
WriteTW9910(0x1c,0x17);
WriteTW9910(0x1d,0x7f);
WriteTW9910(0x1e,0x18);
WriteTW9910(0x1f,0x00);
WriteTW9910(0x20,0x50);
WriteTW9910(0x21,0x42);
WriteTW9910(0x22,0xf0);
WriteTW9910(0x23,0xd8);
WriteTW9910(0x24,0xbc);
WriteTW9910(0x25,0xb8);
WriteTW9910(0x26,0x44);
WriteTW9910(0x27,0x2a);
WriteTW9910(0x28,0x00);
WriteTW9910(0x29,0x03);
WriteTW9910(0x2a,0x78);
WriteTW9910(0x2b,0x44);
WriteTW9910(0x2c,0x30);
WriteTW9910(0x2d,0x07);
WriteTW9910(0x2e,0xa5);
WriteTW9910(0x2f,0xe0);
WriteTW9910(0x30,0x00);
WriteTW9910(0x31,0x10);
WriteTW9910(0x32,0xff);
WriteTW9910(0x33,0x05);
WriteTW9910(0x34,0x1a);
WriteTW9910(0x35,0);
WriteTW9910(0x36,0);
WriteTW9910(0x37,0);
WriteTW9910(0x38,0);
WriteTW9910(0x39,0);
WriteTW9910(0x3a,0);
WriteTW9910(0x3b,0);
WriteTW9910(0x3c,0);
WriteTW9910(0x3d,0);
WriteTW9910(0x3e,0);
WriteTW9910(0x3f,0);
WriteTW9910(0x40,0);
WriteTW9910(0x41,0);
WriteTW9910(0x42,0);
WriteTW9910(0x43,0);
WriteTW9910(0x44,0);
WriteTW9910(0x45,0);
WriteTW9910(0x46,0);
WriteTW9910(0x47,0);
WriteTW9910(0x48,0);
WriteTW9910(0x49,0);
WriteTW9910(0x4a,0);
WriteTW9910(0x4b,0);
WriteTW9910(0x4c,0x0d);
WriteTW9910(0x4d,0x40);
WriteTW9910(0x4e,0x00);
WriteTW9910(0x4f,0x00);
WriteTW9910(0x50,0xa0);
WriteTW9910(0x51,0x22);
WriteTW9910(0x52,0x31);
WriteTW9910(0x53,0x80);
WriteTW9910(0x54,0);
WriteTW9910(0x55,0);
WriteTW9910(0x56,0);
WriteTW9910(0x57,0);
WriteTW9910(0x58,0);
WriteTW9910(0x59,0);
WriteTW9910(0x5a,0);
WriteTW9910(0x5b,0);
WriteTW9910(0x5c,0);
WriteTW9910(0x5d,0);
WriteTW9910(0x5e,0);
WriteTW9910(0x5f,0);
WriteTW9910(0x60,0);
WriteTW9910(0x61,0);
WriteTW9910(0x62,0);
WriteTW9910(0x63,0);
WriteTW9910(0x64,0);
WriteTW9910(0x65,0);
WriteTW9910(0x66,0);
WriteTW9910(0x67,0);
WriteTW9910(0x68,0);
WriteTW9910(0x69,0);
WriteTW9910(0x6a,0);
WriteTW9910(0x6b,0x26);
WriteTW9910(0x6c,0x36);
WriteTW9910(0x6d,0xf0);
WriteTW9910(0x6e,0x28);
WriteTW9910(0x6f,0x24);
//WriteTW9910(0x06,0x80);*/
}
void I2CInitial(void)
{
I2SCLH=0x4B; //設置波特率25kbps
I2SCLL=0x4B; //占空比50%
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -