?? mg12232.c
字號(hào):
#include <msp430x14x.h>
#include "mg12232.h"
char WordTable[] = {
0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,
0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,
0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,
0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00
};
void main(void)
{
// 關(guān)閉看門(mén)狗
WDTCTL = WDTPW + WDTHOLD;
// 關(guān)閉中斷
_DINT();
// 初始化
Init_CLK();
Init_Port();
//初始化MG-12232
LcdDisplayInit(0);
LcdDisplayInit(1);
//顯示的起始行為第0行,起始列為第0列,
//起始頁(yè)為第0頁(yè),顯示區(qū)為E1區(qū),內(nèi)容為"電"
LcdDisplayWord(0,0xC0,0xB8,0,WordTable);
return;
}
void Init_CLK(void)
{
unsigned int i;
BCSCTL1 = 0X00; //將寄存器的內(nèi)容清零
//XT2震蕩器開(kāi)啟
//LFTX1工作在低頻模式
//ACLK的分頻因子為1
do
{
// 清除OSCFault標(biāo)志
IFG1 &= ~OFIFG;
for (i = 0x20; i > 0; i--);
}
while ((IFG1 & OFIFG) == OFIFG);// 如果OSCFault =1
//將寄存器的內(nèi)容清零
BCSCTL2 = 0X00;
//MCLK的時(shí)鐘源為T(mén)X2CLK,分頻因子為1
BCSCTL2 += SELM1;
//SMCLK的時(shí)鐘源為T(mén)X2CLK,分頻因子為1
BCSCTL2 += SELS;
return;
}
void Init_Port(void)
{
// P5.0 P5.1 P5.2 P5.3為輸出
P5DIR |= BIT0;
P5DIR |= BIT1;
P5DIR |= BIT2;
P5DIR |= BIT3;
return;
}
void E1_High(void)
{
//P5.2管腳輸出為高電平
P5OUT |= BIT2;
_NOP();
_NOP();
return;
}
void E1_Low(void)
{
//P5.2管腳輸出為低電平
P5OUT &= ~(BIT2);
_NOP();
_NOP();
return;
}
void E2_High(void)
{
//P5.3管腳輸出為高電平
P5OUT |= BIT3;
_NOP();
_NOP();
return;
}
void E2_Low(void)
{
//P5.3管腳輸出為低電平
P5OUT &= ~(BIT3);
_NOP();
_NOP();
return;
}
void A0_High(void)
{
//P5.0管腳輸出為高電平
P5OUT |= BIT0;
_NOP();
_NOP();
return;
}
void A0_Low(void)
{
//P5.0管腳輸出為低電平
P5OUT &= ~(BIT0);
_NOP();
_NOP();
return;
}
void R_W_High(void)
{
//P5.1管腳輸出為高電平
P5OUT |= BIT1;
_NOP();
_NOP();
return;
}
void R_W_Low(void)
{
//P5.1管腳輸出為低電平
P5OUT &= ~(BIT1);
_NOP();
_NOP();
return;
}
//等待空閑狀態(tài)
void WaitIdle(int nZone)
{
char nTemp;
//設(shè)置P4口為輸入方向
P4DIR = 0;
for(;;)
{
if(nZone == 0)
{
//E1區(qū)
E1_High();
E2_Low();
}
else
{
//E2區(qū)
E2_High();
E1_Low();
}
R_W_High();
A0_Low();
//取出D7
nTemp = (P4IN & BIT7);
nTemp >>= 7;
//空閑就跳出循環(huán)
if(nTemp == 0) break;
}
}
void SendCommand(int nZone,char nVal)
{
//等待閑
WaitIdle(nZone);
//設(shè)置P4口為輸出方向
P4DIR = 0xff;
if(nZone == 0)
{
//E1區(qū)
E1_High();
E2_Low();
}
else
{
//E2區(qū)
E2_High();
E1_Low();
}
R_W_Low();
A0_Low();
P4OUT = nVal;
//寫(xiě)入指令
if(nZone == 0)
{
//E1區(qū)
E1_Low();
}
else
{
//E2區(qū)
E2_Low();
}
R_W_High();
return;
}
void WriteData(int nZone,char nVal, char nAddr)
{
//設(shè)置列地址
SendCommand(nZone,nAddr);
//等待空閑
WaitIdle(nZone);
//設(shè)置P4口為輸出方向
P4DIR = 0xff;
if(nZone == 0)
{
//E1區(qū)
E1_High();
E2_Low();
}
else
{
//E2區(qū)
E2_High();
E1_Low();
}
R_W_Low();
A0_High();
P4OUT = nVal;
//寫(xiě)入指令
if(nZone == 0)
{
//E1區(qū)
E1_Low();
}
else
{
//E2區(qū)
E2_Low();
}
R_W_High();
return;
}
void DisplayOn(int nZone)
{
char nTemp;
for(;;)
{
//發(fā)送顯示開(kāi)命令
SendCommand(nZone,0xAF);
WaitIdle(nZone);
//讀狀態(tài)
//設(shè)置為輸入方向
P4DIR = 0x00;
if(nZone == 0)
{
//E1區(qū)
E1_High();
E2_Low();
}
else
{
//E2區(qū)
E2_High();
E1_Low();
}
R_W_High();
A0_Low();
//取出D5
nTemp = (P4IN & BIT5);
nTemp >>= 5;
//如果打開(kāi)就跳出循環(huán)
if(nTemp == 0) break;
}
return;
}
void DisplayOff(int nZone)
{
char nTemp;
for(;;)
{
//發(fā)送顯示開(kāi)命令
SendCommand(nZone,0xAE);
WaitIdle(nZone);
//讀狀態(tài)
//設(shè)置為輸入方向
P4DIR = 0x00;
if(nZone == 0)
{
//E1區(qū)
E1_High();
E2_Low();
}
else
{
//E2區(qū)
E2_High();
E1_Low();
}
R_W_High();
A0_Low();
//取出D5
nTemp = (P4IN & BIT5);
nTemp >>= 5;
//如果打開(kāi)就跳出循環(huán)
if(nTemp == 1) break;
}
return;
}
void ClearScreen(int nZone)
{
int i,j;
char nPageNum;
//設(shè)置頁(yè)地址代碼
nPageNum = 0xB8;
for(i = 0;i < 4;i++)
{
SendCommand(nZone,0x00);
for(j = 0;j < 80;j++)
{
//等待閑
WaitIdle(nZone);
//寫(xiě)入0x00以清屏
WriteData(nZone,0x00,j);
}
//頁(yè)地址增加
nPageNum += 1;
}
return;
}
void LcdDisplayInit(int nZone)
{
char nCommand;
//關(guān)顯示
DisplayOff(nZone);
//靜態(tài)顯示驅(qū)動(dòng)
nCommand = 0xA4;
SendCommand(nZone,nCommand);
//占空比設(shè)置
nCommand = 0xA9;
SendCommand(nZone,nCommand);
//復(fù)位
nCommand = 0xE2;
SendCommand(nZone,nCommand);
//ADC選擇
nCommand = 0xA0;
SendCommand(nZone,nCommand);
//清屏
ClearScreen(nZone);
//開(kāi)顯示
WaitIdle(nZone);
DisplayOn(nZone);
return;
}
void LcdDisplayWord(int nZone,char nRow,char nPageNo,char nColAddr,char nTable[])
{
int i;
char nTemp;
//設(shè)置行地址
SendCommand(nZone,nRow);
//設(shè)置頁(yè)地址
SendCommand(nZone,nPageNo);
//顯示前8行
for(i = 0;i < 16;i++)
{
nTemp = nTable[i];
WriteData(nZone,nTemp,i);
}
nPageNo += 1;
//設(shè)置頁(yè)地址
SendCommand(nZone,nPageNo);
//顯示后8行
for(i = 0;i < 16;i++)
{
nTemp = nTable[i + 16];
WriteData(nZone,nTemp,i);
}
return;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -