ra8803.c

来自「带中文字库的液晶驱动芯片RA8803驱动程序。一般用于大尺寸液晶模块,例程是32」· C语言 代码 · 共 137 行

C
137
字号
#include "msp430x14x.h"
#include "Lcd.h"

//////////////////////////////////////////////////////////////////////
void SendCommandToLcm(BYTE command)
{
    RS_0;
    LCM_BUS=command;
    CS_0;
    WR_0;
    WR_0;
    WR_1;
    CS_1;
}

void SendDataToLcm(BYTE data)
{
    RS_1;
    LCM_BUS=data;
    CS_0;
    WR_0;
    WR_0;
    WR_1;
    CS_1;
}

BYTE ReadDataFromLcm(void)
{
    BYTE data;

    RS_1;
    CS_0;
    READ_LCM;
    RD_0;
    RD_0;
    data=LCM_Read_BUS;
    RD_1;
    CS_1;
    WRITE_LCM;
    return data;
}

//////////////////////////////////////////////////////////////////////
void InitializeLcm(void)
{
    BYTE data;

    P1OUT&=0xbf;						//Reset LCM
    for(data=0;data<10;data++)
    {
        Delay(50000);
    }
    P1OUT|=0x40;
    for(data=0;data<10;data++)
    {
        Delay(10000);
    }

    SendCommandToLcm(0x00);SendCommandToLcm(0xCD);Delay(500); // Whole Chip LCD Controller Reg(Char Mode)
    SendCommandToLcm(0x10);SendCommandToLcm(0x29);Delay(500); // Whole Chip Cursor Control Reg(disable cursor)
    SendCommandToLcm(0x11);SendCommandToLcm(0xF0);Delay(500); // Distance of Words or Lines Reg(cursor=16,gap=0)
    SendCommandToLcm(0x90);SendCommandToLcm(0x04);Delay(500); // Shift Clock Control Reg(320x240, 61Hz)
    SendCommandToLcm(0xF0);SendCommandToLcm(0xA0);Delay(500); // Font Control Reg
    SendCommandToLcm(0xF1);SendCommandToLcm(0x0F);Delay(500); // Font size Reg
    SendCommandToLcm(0x20);SendCommandToLcm(0x27);Delay(500); // Active Window Right  Reg
    SendCommandToLcm(0x30);SendCommandToLcm(0xEF);Delay(500); // Active Window Bottom Reg(240 duty)
    SendCommandToLcm(0x40);SendCommandToLcm(0x00);Delay(500); // Active Window Left   Reg
    SendCommandToLcm(0x50);SendCommandToLcm(0x00);Delay(500); // Active Window Top    Reg
    SendCommandToLcm(0x21);SendCommandToLcm(0x27);Delay(500); // Display Window Right  Reg
    SendCommandToLcm(0x31);SendCommandToLcm(0xEF);Delay(500); // Display Window Bottom Reg(240 duty)
    SendCommandToLcm(0x41);SendCommandToLcm(0x00);Delay(500); // Display Window Left   Reg
    SendCommandToLcm(0x51);SendCommandToLcm(0x00);Delay(500); // Display Window Top    Reg
    SendCommandToLcm(0x80);SendCommandToLcm(0x20);Delay(500); // 
    SendCommandToLcm(0x81);SendCommandToLcm(0x40);Delay(500); // by default	
    data=Mmi.Constrast;
    if(data>9)data=5;
    SendCommandToLcm(0xD0);SendCommandToLcm(2*data);Delay(500); // enable the contrast control, set to 32	

    ClearGraphicScreen();
}

void WriteTextScreen(BYTE *string,BYTE xadd,BYTE yadd,BYTE attribute)
{
    BYTE i=0,data;

    SendCommandToLcm(0x60);SendCommandToLcm(xadd);  // set cursor X
    SendCommandToLcm(0x70);SendCommandToLcm(yadd);  // set cursor Y
    SendCommandToLcm(0x00);SendCommandToLcm(0xCD);  // normal power mode, txt mode
                                                    // display on, normal display
    if(attribute==1)
    {
        SendCommandToLcm(0x10);
        SendCommandToLcm(0x09);
    }

    data=*string;
    do
    {
        SendDataToLcm(data);
        data=*(string+(++i));
        Delay(30);
    }while(data!=0);

    SendCommandToLcm(0x10);
    SendCommandToLcm(0x29);
}

void ClearTextScreen(void)
{
}

void ClearGraphicScreen(void)
{
    UWORD i;

    SendCommandToLcm(0x60);SendCommandToLcm(0x00);  // set cursor X location to 0
    SendCommandToLcm(0x70);SendCommandToLcm(0x00);  // set cursor Y location to 0
    SendCommandToLcm(0x00);SendCommandToLcm(0xC5);  // normal power mode, Graphical mode
                                                                // display on, normal display
    for(i=0;i<9600;i++)SendDataToLcm(0x00);
}

void DisplayArrow(BYTE xadd,BYTE yadd)
{
    BYTE i;

    SendCommandToLcm(0x00);SendCommandToLcm(0xC5);          // normal power mode, Graphical mode
                                                            // display on, normal display
    for(i=0;i<16;i++)
    {
        SendCommandToLcm(0x60);SendCommandToLcm(xadd);      // set cursor X location
        SendCommandToLcm(0x70);SendCommandToLcm(yadd+i);    // set cursor Y location
        SendDataToLcm(GraphicArrow[2*i]);
        SendDataToLcm(GraphicArrow[2*i+1]);
    }
}

⌨️ 快捷键说明

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