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

📄 msp430f1121_pcf8576.txt

📁 msp4301121和pcf8576应用程序
💻 TXT
字号:
#include  "msp430x11x1.h"

#define uint unsigned int
#define uchar unsigned char

//器件地址
uchar	PCF8576=0x70;

//内存数据定义
uchar	ByteCnt; 	//I2C 数据字节计数器
uchar	SlvAdr;		//被控器地址
uchar	SubAdr;		//被控器单元地址
uchar	XmtDat[5];	//发送数据缓冲区


//uchar	MODE1=0x45;
uchar	MODE2=0xCD;		//
uchar	Bank_sel=0x78;

uchar	flag;

uchar	Digit[10];

#define SDA	  BIT3      // P2.3 controls SDA line (pull-up used for logic 1)
#define SCL   BIT4      // P2.4 controls SCL line (pull-up used for logic 1)



/******************************************************************************
; 子程序
;名称:START
;描述:启动I2C 总线子程序--发送I2C 起始条件
;;*****************************************************************************/
void START(void)
{
	P2OUT |= SDA;		//SDA=1
	_NOP();
	P2OUT |= SCL;		//SCL=1
	_NOP();
	P2OUT &= ~SDA;		//SDA=0
	_NOP();
	P2OUT &= ~SCL;		//SCL=0
}

/*--------------------------------------------------------------------------
;名称:STOP
;描述:停止I2C 总线子程序--发送I2C 总线停止条件
;-------------------------------------------------------------------------*/
void STOP(void)
{
	P2OUT &= ~SDA;		//SDA=0
	_NOP();
	P2OUT |= SCL;
	_NOP();
	P2OUT |= SDA;
	_NOP();
	P2OUT &= ~SCL;
}

void cack(void)		/* 应答位检查 */
{
	P2OUT |= SDA;
	P2OUT |= SCL;

	P2DIR &= ~SDA;

	_NOP();	
	P2OUT &= ~SCL;
	
	P2DIR |= SDA;
	
}

void delay(uchar time)
{
uchar i;

do{
	for(i=100;i!=0;i--);
	
  } while(--time!=0);

}
	
/*----------------------------------------------------------------------
;名称:SendByte
;描述:字节数据传送子程序发送一个字节数据或地址给被控器PCF8576
;要发送的数据在ACC 中
;发送数据正常返回标志F0=0 F0=1 表示被控器无应答或损坏
;------------------------------------------------------------------------*/
void SendByte(uchar Data)
{
uchar i=8;
	
	do  
	  {
	  	if((Data&0x80)==0x80)
			P2OUT |= SDA;
	  	else
	  	   	P2OUT &= ~SDA;
	  	   	
	  	P2OUT |= SCL;
		_NOP ();
	  	P2OUT &= ~SCL;

	  	Data=Data<<1;
	  } while(--i!=0);

	cack();

}

/***********************************************************
;发送数据程序
;名称:SendData
;描述:发送ByteCnt 个字节给被控器PCF8576
;被控器地址在SlvAdr 中单元地址在SubAdr 中
;所发送数据的字节数ByteCnt 在中发送的数据在XmtDat 缓冲区中
;发送数据正常返回标志F0=0 F0=1 表示被控器无应答或损坏
;**********************************************************/
void Display_Data(void)
{
uchar i=0;
uchar size=ByteCnt;

	START();				//发送I2C 总线起始条件
	
	SendByte(SlvAdr);		//发送被控器总线地址
		
	SendByte(SubAdr);		//发送单元地址
	
//	SendByte(0x73);			//闪烁方式为正常,闪烁频率为0.5Hz 的命令字送缓冲区首址,
							//如果不需要闪烁应将数#70H 送入缓冲区首址
	SendByte(0x70);			//不闪烁
							
	
	do
	  {
	  	SendByte(XmtDat[i]);	//发送数据
	  	i++;
	  } while(--size!=0);
	  
	STOP();
	
	delay(100);	
}
	
void ClearLcd(void)
{
uchar size=ByteCnt;

	START();				//启动I2C 总线
	
	SendByte(SlvAdr);		//送器件地址
	
	SendByte(SubAdr);		//发送单元地址
	
	SendByte(0x70);
	
	do
	{
	  SendByte(0x00);	//发送数据
	} while(--size!=0);
	
	STOP();
	
	delay(200);
}
	
void PCF8576SET(void)
{
	START();
	
	SendByte(SlvAdr);		//送器件地址
	
	SendByte(MODE2);		//取方式命令字

	SendByte(Bank_sel);
	
	STOP();
}


void main(void)
{
uint out_data;
uint tmp_data;
uchar i;
uchar k;
uchar tmp[5];

P2DIR |= SDA;			//SDA
P2DIR |= SCL;			//SCL

P2OUT &= ~SDA;
P2OUT &= ~SCL;

WDTCTL = WDTPW+WDTHOLD;

Digit[0]=0x7E;	//0
Digit[1]=0x18;	//1
Digit[2]=0xB6;	//2
Digit[3]=0xBC;	//3
Digit[4]=0xD8;	//4
Digit[5]=0xEC;	//5
Digit[6]=0xEE;	//6
Digit[7]=0x38;	//7
Digit[8]=0xFE;	//8
Digit[9]=0xFC;	//9

SubAdr=0x80;
SlvAdr=PCF8576;
 ByteCnt=4;

PCF8576SET();
	
ClearLcd();

out_data=0;

while(1)
 {
	tmp_data=out_data;

	for(i=0;i<ByteCnt;i++)
  	{
  		k=tmp_data%10;
  		tmp_data=tmp_data/10;
  	
		XmtDat[i]=Digit[k];
		tmp[i]=k;
  	}

	XmtDat[2] |= 0x01;
	
	for(i=ByteCnt-1;i!=0;i--)
  	{
  		if( tmp[i] == 0 )	
  			XmtDat[i]=0x00;
  		else	
  			break;
  	}


	Display_Data();

	out_data++;

 }

}




⌨️ 快捷键说明

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