?? liquid.c
字號:
/******************************************************************************/
//功能:完成掖晶顯示
/******************************************************************************/
#include <msp430x14x.h>
#define uchar unsigned char
#define SLV_ADR 70 //從機地址
#define SUB_ADR 80 //從機單元地址
#define MODE_CLEAR 0xD0 //清屏指令
#define MODE_Display 58 //顯示控制字
#define MODE_Flash 0x70 //閃爍控制字
unsigned char display[20];
#define SDA_1 P5OUT |= BIT0 //SDA = 1
#define SDA_0 P5OUT &=~ BIT0 //SDA = 0
#define SCL_1 P4OUT |= BIT7 //SCL = 1
#define SCL_0 P4OUT &=~ BIT7 //SCL = 0
#define DIR_IN P5DIR &=~ BIT0; SDA_1 //I/O口為輸入
#define DIR_OUT P5DIR |= BIT0 //I/0口為輸出
#define SDA_IN ((P5IN >> 3) & 0x01) //Read SDA
unsigned int a[50];
/********************************************************************
*
* 名稱: Delay
* 說明:
* 功能: 根據入口參數延長時間
* 調用:無
* 輸入: n 寫入的數據
* 返回值: 無
***********************************************************************/
static void Delay(unsigned int n)
{
unsigned int i;
for (i=0; i<n; i++) {;}
}
/**********************************************************************
*
* 名稱: Init
* 說明:
* 功能: 設置I2C通訊初始狀態
* 調用: Delay();
* 輸入: 無
* 返回值: 無
***********************************************************************/
void Init(void)
{
SCL_1;
Delay(5);
SDA_1;
Delay(5);
}
/**********************************************************************
*
* 名稱: Start
* 說明:
* 功能: 啟動I2C通訊
* 調用: Delay();
* 輸入: 無
* 返回值: 無
***********************************************************************/
void Start(void)
{
SDA_1;
Delay(5);
SCL_1;
Delay(5);
SDA_0;
Delay(5);
SCL_0;
Delay(5);
}
/**********************************************************************
*
* 名稱: Stop
* 說明:
* 功能: 停止I2C通訊
* 調用: Delay();
* 輸入: 無
* 返回值: 無
***********************************************************************/
void Stop(void)
{
SDA_0;
Delay(5);
SCL_1;
Delay(5);
SDA_1;
Delay(5);
}
/**********************************************************************
*
* 名稱: WriteByte
* 說明:
* 功能: 寫入一個字節的數據
* 調用: Delay();
* 輸入: WriteData
* 返回值: 無
***********************************************************************/
void WriteByte(unsigned char WriteData)
{
unsigned char i;
for (i=0; i<8; i++)
{
SCL_0;
Delay(5);
if (((WriteData >> 7) & 0x01) == 0x01)
{
SDA_1;
}
else
{
SDA_0;
}
Delay(5);
SCL_1;
WriteData = WriteData << 1;
Delay(5);
}
SCL_0;
SDA_1;
Delay(5);
Delay(5);
}
/**********************************************************************
*
* 名稱: ReadByte
* 說明:
* 功能: 讀取一個字節的數據
* 調用: Delay();
* 輸入: ReadByte
* 返回值: 返回一個unsigned char數據
***********************************************************************/
unsigned char ReadByte(void)
{
unsigned char i;
unsigned char TempBit = 0;
unsigned char TempData = 0;
SCL_0;
Delay(5);
SDA_1;
for (i=0; i<8; i++)
{
Delay(5);
SCL_1;
Delay(5);
DIR_IN;
if (SDA_IN == 0x01 /*sda==1*/)
{
TempBit = 1;
}
else
{
TempBit = 0;
}
DIR_OUT;
TempData = (TempData << 1) | TempBit;
SCL_0;
}
Delay(5);
return(TempData);
}
/**********************************************************************
*
* 名稱: ReadByte
* 說明:
* 功能: 讀取一個字節的數據
* 調用: Delay();
* 輸入: ReadByte
* 返回值: 返回一個unsigned char數據
***********************************************************************/
void ReceiveAck(void)
{
unsigned char i = 0;
SCL_1;
Delay(5);
DIR_IN;
while ((SDA_IN == 0x01 /*sda==1*/) && (i < 255)/*調試方便,可以不要*/)
{
i++;
}
DIR_OUT;
SCL_0;
Delay(5);
//while(1);
}
/**********************************************************************
*
* 名稱: ReadByte
* 說明:
* 功能: 讀取一個字節的數據
* 調用: Delay();
* 輸入: ReadByte
* 返回值: 返回一個unsigned char數據
***********************************************************************/
void Acknowledge(void)
{
SCL_0;
Delay(5);
DIR_OUT;
SDA_0;
SCL_1;
Delay(5);
SCL_0;
}
/*
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 liquid_main(unsigned char *DataBuff)
void main(void)
{
unsigned char i,display;
WDTCTL = WDTPW +WDTHOLD; // Stop Watchdog Timer
DCOCTL = DCO0 + DCO1 + DCO2; // Max DCO
P5DIR = 0xff;
P4DIR = 0xff;
Start();
WriteByte(SLV_ADR);
ReceiveAck();
WriteByte(SUB_ADR);
ReceiveAck();
/*
//WriteByte(MODE_CLEAR);
WriteByte(MODE_Display);
ReceiveAck();
WriteByte(MODE_Flash);
ReceiveAck();
*/
for(i=0;i<20;i++)
{
//display = *DataBuff;
WriteByte(0xff);
ReceiveAck();
WriteByte(0xff);
ReceiveAck();
//DataBuff++;
}
Stop();
while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -