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

📄 msp430f1121 lcd pcf8576.txt

📁 MSP430F1121 LCD 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
;------------------------------------------------------------------------*/
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();

}

/***********************************************************
;发送数据程序
;名称:Display_Data
;描述:发送ByteCnt 个字节给被控器PCF8576
;被控器地址在SlvAdr 中单元地址在SubAdr 中
;所发送数据的字节数ByteCnt 在中发送的数据在XmtDat 缓冲区中
;**********************************************************/
void Display_Data(void)
{
uchar i=0;
uchar size=ByteCnt;

    START();                //发送I2C 总线起始条件
    
    SendByte(SlvAdr);        //发送被控器总线地址
        
    SendByte(SubAdr);        //发送单元地址
    
//    SendByte(0x73);            //闪烁方式为正常,闪烁频率
为0.5Hz 的命令字送缓冲区首址,其它命令最好单独设
    SendByte(0x70);            //闪烁方式为正常,闪烁频率
为0.5Hz 的命令字送缓冲区首址,其它命令最好单独设
                            //定
如程序1 如果不需要闪烁应将数#70H 送入缓冲区首址
    
    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 + -