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

📄 i2cled.c

📁 2812 IIC接口 LED显示 源码 DSP2812 的程序源码系列
💻 C
字号:
//I2C LED   
#include "DSP28_Device.h"

const   Uint16  LedCode[]= { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x98, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e };

#define  I2CLEDWRITEADDR   0x72
void delay(unsigned int);
void ldelay(unsigned int);
void IOINIT()
{
	GpioDataRegs.GPBDAT.bit.GPIOB8=1;
	GpioDataRegs.GPBDAT.bit.GPIOB9=1;
	GpioDataRegs.GPBDAT.bit.GPIOB15=1;
}
//////////////////////////////////////////
void START()
{
   	GpioDataRegs.GPBDAT.bit.GPIOB15=1;//ENABLE
	GpioDataRegs.GPBDAT.bit.GPIOB8=1;//SCL
	GpioDataRegs.GPBDAT.bit.GPIOB9=1;//SDA
	
	delay(200);
	GpioDataRegs.GPBDAT.bit.GPIOB9=0;//SDA	
	delay(200);
	GpioDataRegs.GPBDAT.bit.GPIOB8=0;//SCL	
	delay(200);
}
//////////////////////////////////////////////////
void STOP()
{
	GpioDataRegs.GPBDAT.bit.GPIOB15=1;//ENABLE	
	GpioDataRegs.GPBDAT.bit.GPIOB9=0;//SDA

	delay(200);

	GpioDataRegs.GPBDAT.bit.GPIOB8=1;//SCL	
	delay(200);
	GpioDataRegs.GPBDAT.bit.GPIOB9=1;//SDA	
	delay(200);

}
///////////////////////////////////////
void TRANSMIT(unsigned int input)
{
	 unsigned int temp;
	 
	 GpioDataRegs.GPBDAT.bit.GPIOB8=0;//SCL	
	 delay(200);


     for(temp=8;temp!=0;temp--) 
	 {
		if ((input&0x80)) 
		{	        
		    GpioDataRegs.GPBDAT.bit.GPIOB15=1;//ENABLE
			GpioDataRegs.GPBDAT.bit.GPIOB9=1;//SDA

	    }
	
	    else 
	    {	       
	        GpioDataRegs.GPBDAT.bit.GPIOB15=1;//ENABLE
			GpioDataRegs.GPBDAT.bit.GPIOB9=0;//SDA

	    }
        delay(200);
        
        GpioDataRegs.GPBDAT.bit.GPIOB8=1;//SCL	
	    delay(200);
        GpioDataRegs.GPBDAT.bit.GPIOB8=0;//SCL	
	    delay(200);	
	    input=input<<1;
	}    
}
///////////////////////////////////////////
unsigned int SLAVE_ACK()  //0=OK,1=fail
{
     unsigned int k;

	    GpioDataRegs.GPBDAT.bit.GPIOB15=1;//ENABLE 
	    GpioDataRegs.GPBDAT.bit.GPIOB9=0;//SDA 
	    delay(200);	    
	    GpioDataRegs.GPBDAT.bit.GPIOB15=0;//DISABLE 
        GpioDataRegs.GPBDAT.bit.GPIOB8=1;//SCL	
	    delay(2000);
	    	   	 
	    if (GpioDataRegs.GPBDAT.bit.GPIOB14==1) k=1; else  k=0; 
	    GpioDataRegs.GPBDAT.bit.GPIOB15=1;//ENABLE 
		GpioDataRegs.GPBDAT.bit.GPIOB9=0;//SDA
		delay(200);		    	      
        GpioDataRegs.GPBDAT.bit.GPIOB8=0;//SCL
        delay(200);	
        return (k);
}
////////////////////////////////////////////////////
unsigned int BYTE_WR(unsigned int BYTE_ADDR,unsigned int T_DATA) //0=OK,1=fail
{

     unsigned int k;
     START();
     TRANSMIT(BYTE_ADDR);
     k=SLAVE_ACK();

     if (k==0)      TRANSMIT(T_DATA);
     if (k==0)      k=SLAVE_ACK();
     if (k==0)   STOP();
     
     return (k);

}
////////////////////////////////////
void main(void)
{   
    unsigned int i;
 	
	InitSysCtrl();			//初始化系统

	DINT;				//关中断 
	IER = 0x0000;
	IFR = 0x0000;

	InitPieCtrl();			//初始化PIE控制寄存器
	InitPieVectTable();		//初始化PIE参数表 
	InitPeripherals();		//初始化外设寄存器 
	InitGpio();				//初始化IO口

	EINT;				//Enable INTM
	ERTM;				//Enable DBGM
   

	IOINIT();
	while(1)
	for (i=0;i<16;i++)
	{
    	BYTE_WR(I2CLEDWRITEADDR,LedCode[i]);
    	ldelay(200);
    }
	
} 	

	
void ldelay(unsigned int k)
{
	while(k>0)
	{
		k--;
		delay(20000);
	}
}	

void delay(unsigned int t)
{
	while(t>0)
		t--;
}



	

⌨️ 快捷键说明

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