⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 td028_i2c.c

📁 MCU为:ATMGEA128
💻 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 + -