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

📄 uarti2c.c

📁 display port接受芯片ANX9813的驱动代码。MCU使用LPC936FDH,内部包含AN9813寄存器设置
💻 C
📖 第 1 页 / 共 2 页
字号:
//discription:
////0x2a+0x52+'ID' + 'SUB'+'NUMBER'+0X0D
//* + W + ID + SUB + NUMBER + DATA1 +..DATAN +0X0D

//return  R command:0x41 0x44 +  reg value send ok
//retrun  W command:0x41 0x44  send ok
//else status:
//return  0x41 0X4F:not R or W
//return  0x41 0x41 or 0x41 0x42: R/W command length wrong
//return  0x41 0x43: can't find '*'






#include <reg932.H>
#include <intrins.h>

typedef unsigned char uchar;
typedef unsigned int uint;



bit sendRQ;
uchar data CommandBufPoint;
uchar idata CommandBuf[20];
uchar currentrecv;
uchar  local;
char text[]="error";
uchar VideoSite;
uchar	data	BoarID;
/*uchar idata pixel[54]={0xFF,0xFF,0xFF,0xFA,0xBE,0xEA,0xF8,0xB8,0xA2,0xF8,0xB8,0xA2,0xE8,0xA8,
 0x00,0x80,0x08,0xA2,0x88,0x82,0xE2,0x88,0x8A,0xA2,0x88,0x80,0x00,0x88,0x8A,0x82,0x80,0x0B,0x80,
 0xE8,0xAE,0x20,0xF8,0x8A,0x22,0xA8,0x08,0xA2,0x80,
  0x82,0xE2,0x8A,0x8B,0xE2,0xEF,0xEF,0xEA,0xFF,0xFF,0xFF
                       };

/* 定义页宽度屏蔽字(16字节时为0x0F,64字节时为0x3F) */
#define  PAGE_SIZE  0x3F

/* 定义FLASH控制命令字 */
#define  LOAD       0x00      	/* 加载数据 	*/
#define  PROG       0x48        /* 编程		    */
#define  ERS_PROG   0x68        /* 擦除编程 	*/
#define  ERS_S      0x71        /* 擦除扇区 	*/
#define  ERS_P      0x70        /* 擦除页   	*/


uchar rompos;
uchar romnum;
uchar attr;
uchar postH;
uchar postL;
uchar savenum;  
uchar code *CommandCache;//配置参数写指针


/******************************************************
* MAX7456 register addr (read mode)
*******************************************************/
#define VM0   0x80     //video mode 0
#define CMM   0x88     //character memory mode   
#define CAH   0x89	   //character address high
#define CAL   0x8a	   //character address low
#define CDO   0xc0	   //character data out
#define CDI   0x8b	   //character data in
#define DMAH  0x85	   //display memory address high
#define DMAL  0x86	   //display memory address low
#define DMDI  0x87     //display memory code in
#define STAT  0xA0	   
#define DMM   0x84	   //display memory mode
#define HOS   0x82	   //horizontal offset
#define VOS   0x83	   //vertical offset
#define DMDO  0xb0	   
#define OSDM  0x8C	   


//============================start==========================================
    

/********************************
	   定义MCU各管脚
**********************************/
sbit	BP_DIR = P0^7;
sbit    act =P0^6;
sbit  i2c_sda = P1^3;
sbit  i2c_scl = P1^2;
//sbit	MAX7456_MOSI = P0^6;
//sbit	SCK = P2^5;


/*********************************************************************
* 函数名称:WATCHDOG_init
* 功能描述:初始化MCU的看门狗
* 输入参数:无
*********************************************************************/
void WATCHDOG_init()
{	
	WDL=0XFF;
    EA  = 0;
    WDCON = 0XE5;
    WFEED1 = 0xA5;
    WFEED2 = 0x5A;
    EA = 1;
}

/*********************************************************************
* 函数名称:watchdog
* 功能描述:喂狗操作程序
* 输入参数:无
*********************************************************************/
void watchdog()
{
    EA = 0;
    WFEED1 = 0xA5;
    WFEED2 = 0x5A;
    EA = 1;
}
/********************************************************
* 函数名称:Delay_ms
* 功能描述:延时20U秒
*********************************************************/
 void delay (void)  
 {
  unsigned long i;	  
  for (i = 0; i <500; i++)  
  {                              /* waste timea and */
     	                  /* do notthing */
  }
  watchdog(); 
}

/*************************************************************************************
* 函数名称:IO_init
* 功能描述:初始化MCU的I/O口,对I/O进行配置其工作模式
* 输入参数:无
*************************************************************************************/
void IO_init(void)
{			    
    P0M1 = 0x00;        // (00001110)push pull except RX
    P0M2 = 0x00;        // (11000000)

   	P1M1 = 0x00;        //(00101100)push pull except RX
		P1M2 = 0x00;

    P2M1 = 0x00;    	// (01011000)push pull   0x58  0x20
    P2M2 = 0x00;        // (00100000)  0xff  05.10.17//00		 /pull_p23

    P3M1 = 0x03;    	  // (00000011)push pull  06.06.17
    P3M2 = 0x00;        // (00000000)06.06.17

    EA = 1;
	 	ES = 1;			// enable UART interrupt
    EWDRT = 0;
}   


/***********************************************************************************
* 函数名称:UART_init
* 功能描述:初始化MCU的串口,配置波特率以及串口工作方式
* 输入参数:无
*************************************************************************************/
void UART_init()
{
    SCON=0x50;				  // select BRG as UART Baud Rate Gen
    SSTAT=0x00;               // separate Rx / Tx interrupts
	BRGCON=0x00; 
    BRGR0=0x70;				  // setup BRG for 19200 baud @ 7.373(7372800)MHz internal RC oscillator
    BRGR1=0x01;
    BRGCON = 0x03;     	      // enable BRG
}

/*********************************************************************
* 函数名称:DATA_init
* 功能描述:I/O口初始值、部分变量初始值设置
* 输入参数:无
* 输出参数:无
* 返 回 值:无
* 编写时间:2007-11-20
* 修改时间:无
* 备    注:
*********************************************************************/
void DATA_init()
{
	P0 = 0x3f;
    P1 = 0xff;
    P2 = 0xff;
    P3 = 0xff;
	}


//*****************************
//* 函数名称:send
//* 功能描述:通过串口发送数据
//* 输入参数:uchar dat
//******************************
void sendtoPC(char* dat,uchar j)
{
	uchar i=0;
	for(i=0;i<j;i++)
	{
		TI=0;
		SBUF=(*dat);				// start sending one byte
		while (!TI);				// wait until sent
		TI=0;
		dat++;
	}  
}
/*****************************************************************************************************************************
* 函数名称:readaddress
* 功能描述:读取设备自身的地址ID
* 输入参数:无
*******************************************************************************************************************************/
void readaddress(void)
{
    BoarID = 0;
    P2 = P2 | 0xbf;//(10111111)
    P0 = P0 | 0x41;//(01000001)
    P1 = P1 | 0xd0;//(11010000)
	    
	if(P2 & 0x80)BoarID = BoarID | 0x01;    //P2.7 = address0    地址ID第0位
	if(P2 & 0x01)BoarID = BoarID | 0x80;    //P2.0 = address1    地址ID第7位
	if(P2 & 0x02)BoarID = BoarID | 0x40;    //P2.1 = address2    地址ID第6位
    if(P0 & 0x01)BoarID = BoarID | 0x20;    //P0.0 = address3    地址ID第5位
	if(P1 & 0x80)BoarID = BoarID | 0x10;    //P1.7 = address4    地址ID第4位
	if(P1 & 0x40)BoarID = BoarID | 0x08;    //P1.6 = address5    地址ID第3位
	if(P1 & 0x10)BoarID = BoarID | 0x04;    //P1.4 = address6    地址ID第2位
	if(P2 & 0x04)BoarID = BoarID | 0x02;    //P2.2 = address7    地址ID第1位
  
   BoarID = ~BoarID;   
   BoarID =BoarID & 0x00FF;//0x03ff;
}
   













//-------------I2c----------------------------
uchar ack;
void  DelayIIC(uchar  dly)
{  uchar  i;
   for(i=0; i<dly; i++) 
   {
   		_nop_();
   }
      
}

void Start_I2c()
{
  i2c_sda = 1;   /*发送起始条件的数据信号*/
  DelayIIC(3);
  i2c_scl = 1;
  DelayIIC(3);    /*起始条件建立时间大于4.7us,延时*/  
  i2c_sda = 0;   /*发送起始信号*/
  DelayIIC(3);    /* 起始条件锁定时间大于4μs*/      
  i2c_scl = 0;   /*钳住I2C总线,准备发送或接收数据 */
  DelayIIC(3); 
}
void Stop_I2c()
{
   i2c_sda=0; /*发送结束条件的数据信号*/
  DelayIIC(3);
 
  i2c_scl = 1;  /*结束条件建立时间大于4μs*/
  DelayIIC(3);
 
  i2c_sda = 1;  /*发送I2C总线结束信号*/
  DelayIIC(3);
}
void Ack_I2c(uchar a)
{
 
  if(a==0)i2c_sda = 0;     /*在此发出应答或非应答信号 */
        else i2c_sda = 1;
  DelayIIC(3);
    
  i2c_scl = 1;;
    DelayIIC(3);
  i2c_scl = 0;                /*清时钟线,钳住I2C总线以便继续接收*/
    DelayIIC(3);    
}
void  I2CSendByte(uchar c)
{
 uchar BitCnt;
 unsigned int i;
 uchar temp[2];
 ack = 1;
 
 temp[0] = 'N';
 temp[1] = 'A';

  i2c_scl = 0;
  i2c_sda = 0;//<1
 
 for(BitCnt=0;BitCnt<8;BitCnt++)  /*要传送的数据长度为8位*/
    {
     if((c << BitCnt) & 0x80)
         i2c_sda = 1;   /*判断发送位*/
     else   
         i2c_sda = 0;   
       DelayIIC(3);             
     i2c_scl = 1;               /*置时钟线为高,通知被控器开始接收数据位*/
     
    DelayIIC(3);        
     i2c_scl = 0; 
    DelayIIC(3);
    }
    DelayIIC(3);
   
   // IO0DIR = IO0DIR|SCL;
    i2c_sda = 1;
     DelayIIC(3);
    i2c_scl = 1;;//<1
     DelayIIC(3);
    i=0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -