📄 td028_i2c.c
字号:
#include "include.h"
//接口定义
#define TD28_SCL_PORT PORTA
#define TD28_SCL_DDR DDRA
#define TD28_SCL 0
#define TD28_SDA_PORT PORTF
#define TD28_SDA_DDR DDRF
#define TD28_SDA_PIN PINF
#define TD28_SDA 7
#define TD28_REST_PORT PORTF
#define TD28_REST_DDR DDRF
#define TD28_REST 5
#define TD28_SCEN_PORT PORTF
#define TD28_SCEN_DDR DDRF
#define TD28_SCEN 6
#define TD28_SHDB_PORT PORTA
#define TD28_SHDB_DDR DDRA
#define TD28_SHDB 1
//操作定义
#define TD28_SCL_SET TD28_SCL_PORT=TD28_SCL_PORT|(1<<TD28_SCL)
#define TD28_SCL_CLS TD28_SCL_PORT=TD28_SCL_PORT&~(1<<TD28_SCL)
#define TD28_SDA_SET TD28_SDA_PORT=TD28_SDA_PORT|(1<<TD28_SDA)
#define TD28_SDA_CLS TD28_SDA_PORT=TD28_SDA_PORT&~(1<<TD28_SDA)
#define TD28_SCEN_SET TD28_SCEN_PORT=TD28_SCEN_PORT|(1<<TD28_SCEN)
#define TD28_SCEN_CLS TD28_SCEN_PORT=TD28_SCEN_PORT&~(1<<TD28_SCEN)
#define TD28_SDA_High TD28_SDA_PIN&(1<<TD28_SDA)
//函数定义
void TD28PORT_INIT(void);
void TD28_INIT(void);
void TD28_WRITE(unsigned char adr,unsigned char dat);
unsigned char TD28_READ(unsigned char adr);
//*****************************************************************
//函 数 名 : TD28_INIT
//建 立 时 间 : 20061230
//功 能 描 述 :
//备 注 : 没有返回值
//最后修改时间 : 2006-8-11
//*****************************************************************
void TD28_INIT(void)
{
unsigned int i,j;
//DDR
TD28_REST_DDR=TD28_REST_DDR|(1<<TD28_REST);
TD28_SCL_DDR=TD28_SCL_DDR|(1<<TD28_SCL);
TD28_SDA_DDR=TD28_SDA_DDR|(1<<TD28_SDA);
TD28_SCEN_DDR=TD28_SCEN_DDR|(1<<TD28_SCEN);
TD28_SHDB_DDR=TD28_SHDB_DDR|(1<<TD28_SHDB);
//PORT_VALUE
TD28_REST_PORT=TD28_REST_PORT|(1<<TD28_REST);
TD28_SCL_PORT=TD28_SCL_PORT|(1<<TD28_SCL);
TD28_SDA_PORT=TD28_SDA_PORT|(1<<TD28_SDA);
TD28_SCEN_PORT=TD28_SCEN_PORT|(1<<TD28_SCEN);
TD28_SHDB_PORT=TD28_SHDB_PORT|(1<<TD28_SHDB);
//RESET TH028
TD28_REST_PORT=TD28_REST_PORT&~(1<<TD28_REST);
for(i=0;i<10;i++)for(j=0;j<100;j++);
TD28_REST_PORT=TD28_REST_PORT|(1<<TD28_REST);
for(i=0;i<10;i++)for(j=0;j<100;j++);
//测试TD28的IIC通路
TD28_WRITE(0x02, 0x55);
while(TD28_READ(0x02)!=0x55)
{
TD28_REST_PORT=TD28_REST_PORT&~(1<<TD28_REST);
for(i=0;i<100;i++)for(j=0;j<100;j++);
TD28_REST_PORT=TD28_REST_PORT|(1<<TD28_REST);
for(i=0;i<100;i++)for(j=0;j<100;j++);
TD28_WRITE(0x02, 0x55);
}
/*
//配置TH028纬络国际推荐
TD28_WRITE(0x02, 0x3a);
TD28_WRITE(0x03, 0x0e);
TD28_WRITE(0x04, 0x0b);
TD28_WRITE(0x05, 0x2b);
TD28_WRITE(0x06, 0x18);
TD28_WRITE(0x07, 0x08);
TD28_WRITE(0x0a, 0x20);
TD28_WRITE(0x0b, 0x20);
TD28_WRITE(0x14, 0x40);
TD28_WRITE(0x15, 0x55);
TD28_WRITE(0x16, 0x55);
TD28_WRITE(0x17, 0x35);
TD28_WRITE(0x18, 0x88);
*/
/*pal
TD28_WRITE(0x02, 0x7a);
TD28_WRITE(0x03, 0x1e);
TD28_WRITE(0x04, 0x0b);
TD28_WRITE(0x05, 0x2b);
TD28_WRITE(0x06, 0x18);
TD28_WRITE(0x07, 0x08);
TD28_WRITE(0x09, 0x20);
TD28_WRITE(0x0a, 0x20);
TD28_WRITE(0x0b, 0x20);
*/
/*
//ntsc
TD28_WRITE(0x02, 0x7a);
TD28_WRITE(0x03, 0x19);
TD28_WRITE(0x04, 0x0b);
TD28_WRITE(0x05, 0x2b);
TD28_WRITE(0x06, 0x18);
TD28_WRITE(0x07, 0x08);
TD28_WRITE(0x09, 0x30);//contrast
TD28_WRITE(0x0a, 0x20);//r-contrast
TD28_WRITE(0x0b, 0x20);//b-contrast
TD28_WRITE(0x0c, 0x20);//offset brightness
TD28_WRITE(0x10, 0x3f);
TD28_WRITE(0x11, 0x3f);
TD28_WRITE(0x12, 0x00);
TD28_WRITE(0x13, 0x00);
TD28_WRITE(0x14, 0x40);
TD28_WRITE(0x15, 0x55);
TD28_WRITE(0x16, 0x55);
TD28_WRITE(0x17, 0x35+0x44); //22高温部分更加突出//00不明显
TD28_WRITE(0x18, 0xff); //44高温部分更加突出
*/
//200705281753
TD28_WRITE(0x02, 0x7a);
TD28_WRITE(0x03, 0x19);
TD28_WRITE(0x04, 0x0b);
TD28_WRITE(0x05, 0x2b);
TD28_WRITE(0x06, 0x18);
TD28_WRITE(0x07, 0x08);
TD28_WRITE(0x09, 0x33);//contrast
TD28_WRITE(0x0a, 0x20);//r-contrast
TD28_WRITE(0x0b, 0x20);//b-contrast
TD28_WRITE(0x0c, 0x20);//offset brightness
TD28_WRITE(0x10, 0x3f);
TD28_WRITE(0x11, 0x3f);
//TD28_WRITE(0x12, 0x00);
//TD28_WRITE(0x13, 0x00);
TD28_WRITE(0x14, 0x40);
TD28_WRITE(0x15, 0x55);
TD28_WRITE(0x16, 0x55);
TD28_WRITE(0x17, 0x75); //22高温部分更加突出//00不明显
TD28_WRITE(0x18, 0x08); //44高温部分更加突出
//***********200704031345******************************
/*
TD28_WRITE(0x14, 0x00);
TD28_WRITE(0x15, 0x00);
TD28_WRITE(0x16, 0x5f);
TD28_WRITE(0x17, 0xff);
TD28_WRITE(0x18, 0x0f);
*/
//*****************************************
}
//*****************************************************************
//函 数 名 : TD28_Write
//建 立 时 间 : 20061230
//功 能 描 述 :
//备 注 : 没有返回值
//最后修改时间 : 20061230
//*****************************************************************
void TD28_WRITE(unsigned char adr,unsigned char dat)
{
unsigned char i;
unsigned char wb;
TD28_SCEN_SET;
TD28_SCEN_CLS;
wb=adr;
wb<<=2;
//wb|=0x00;//暂时定义:0(WRITE)1(READ)
for(i=0;i<8;i++)
{
if( wb&0x80 ) TD28_SDA_SET;
else TD28_SDA_CLS;
wb=wb<<1;
NOP();
TD28_SCL_SET;
NOP();
TD28_SCL_CLS;
NOP();
}
wb=dat;
for(i=0;i<8;i++)
{
if( wb&0x80 ) TD28_SDA_SET;
else TD28_SDA_CLS;
wb=wb<<1;
NOP();
TD28_SCL_SET;
NOP();
TD28_SCL_CLS;
NOP();
}
TD28_SCEN_SET;
}
//*****************************************************************
//函 数 名 : TD28_READ
//建 立 时 间 : 20061230
//功 能 描 述 :
//备 注 : 没有返回值
//最后修改时间 : 20061230
//*****************************************************************
unsigned char TD28_READ(unsigned char adr)
{
register unsigned char i,mb,wb;
// unsigned char wb;
TD28_SCEN_SET;
TD28_SCEN_CLS;
wb=adr;
wb<<=2;
wb|=0x02;//暂时定义:0(WRITE)1(READ)
for(i=0;i<8;i++)
{
if( wb&0x80 ) TD28_SDA_SET;
else TD28_SDA_CLS;
wb=wb<<1;
NOP();
TD28_SCL_SET;
NOP();
TD28_SCL_CLS;
NOP();
}
mb=0;
TD28_SDA_SET;
TD28_SDA_DDR=TD28_SDA_DDR&~(1<<TD28_SDA);
NOP();
for(i=0;i<8;i++)
{
NOP();
mb=mb<<1;
TD28_SCL_SET;
NOP();
if( TD28_SDA_High ) mb|=(1<<0);
else mb&=~(1<<0);
TD28_SCL_CLS;
}
TD28_SDA_SET;
TD28_SDA_DDR=TD28_SDA_DDR|(1<<TD28_SDA);
return mb;
}
void TD28_TEST(void){
TD28_SCL_CLS;
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
TD28_SCL_SET;
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -