12864

 //-------------------------------------------------
// Shenzhen TOPWAY Technology Co.,Ltd.
// LCD Module:    LM3033
// Display Size:      128x64 (256x32)
// Driver/Controller: ST7920
// Interface:         Serial mode
// by:                Kenny
// Date:     2005-09-23
// System;            AT89S52 (12MHz)
//-------------------------------------------------

#include <stdio.h>
#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char // 0~255
#define uint unsigned int   // 0~65535

sbit    PSB        = P3^4;
sbit _RES       = P3^5;
sbit    CS         = P3^1;
sbit    SID        = P3^7;
sbit    SCLK       = P3^6;


//-----------------------------------
// dispaly data (256x32)
//-----------------------------------
uchar code GraphicLogo[]={
/*--  TOPWAY  LOGO 256x32  --*/
0xC0,0x00,0x00,0x00,0x00,0x05,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x00,0x00,0x00,0x02,0xAA,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x55,0x54,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0A,0xAA,0xA1,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x55,0x55,0x07,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x2A,0xAA,0xAA,0x3F,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x55,0x55,0x55,0x50,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0A,0xAA,0xAA,0xAA,0xA3,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x15,0x55,0x4F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x4E,0x38,0xE3,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x02,0xAA,0x1F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x06,0xD1,0x45,0x14,0x40,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x05,0x54,0x7F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x05,0x41,0x44,0x10,0x40,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x0A,0xA9,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x42,0x44,0x20,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x05,0x53,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x41,0x44,0x10,0x40,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x0A,0xA7,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x51,0x45,0x14,0x40,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x15,0x4F,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0xF4,0x4E,0x38,0xE3,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x2A,0x9F,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x15,0x3F,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x2A,0x7F,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x54,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xA9,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x53,0xFF,0xFF,0xFF,0xFF,0x84,0x00,0x12,0x08,0x80,0x02,0x10,0x24,0x40,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xA7,0xFF,0xFF,0xFF,0xFF,0x82,0xFF,0x12,0x48,0x9F,0xC1,0x20,0x55,0x40,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x4F,0xFF,0xFF,0xFF,0xFF,0x80,0x81,0x12,0x48,0x84,0x0F,0xFE,0x95,0x40,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x02,0x9F,0xFF,0xFF,0xFF,0xFF,0x88,0x24,0x12,0x4B,0xE4,0x09,0x24,0x1F,0x70,
0x10,0xE3,0x82,0x7C,0xE7,0xCE,0x38,0xE1,0x0E,0x38,0x27,0xCE,0x7C,0xE3,0x8E,0x10,
0x00,0x01,0x3F,0xFF,0xFF,0xFF,0xFF,0x84,0x52,0x7E,0x48,0x88,0x05,0x28,0x20,0xA0,
0x31,0x14,0x46,0x41,0x10,0x51,0x45,0x13,0x11,0x44,0x64,0x11,0x05,0x14,0x51,0x30,
0x00,0x02,0x3F,0xFF,0xFF,0xFF,0xFF,0x80,0x10,0x12,0x48,0xA8,0x1F,0xFE,0x5F,0xA0,
0x10,0x10,0x4A,0x79,0x00,0x91,0x45,0x11,0x01,0x04,0xA7,0x90,0x09,0x14,0x51,0x10,
0x00,0x04,0x70,0x63,0x0D,0xDD,0xDD,0x82,0xFF,0x12,0x48,0xDF,0x80,0x00,0xC0,0xA0,
0x10,0x20,0x92,0x05,0xE1,0x0E,0x3D,0x11,0x02,0x09,0x20,0x5E,0x10,0xE3,0xD1,0x10,
0x00,0x02,0xFD,0xDD,0x75,0xDA,0xEB,0x84,0x10,0x12,0x4B,0xA8,0x83,0xF8,0x4E,0xA0,
0x10,0x40,0x5F,0x05,0x11,0x11,0x05,0x11,0x04,0x05,0xF0,0x51,0x11,0x10,0x51,0x10,
0x00,0x04,0xFD,0xDD,0x0D,0x50,0x77,0x8C,0x38,0x1E,0x48,0x88,0x82,0x08,0x4A,0x40,
0x10,0x84,0x42,0x45,0x11,0x11,0x45,0x11,0x08,0x44,0x24,0x51,0x11,0x14,0x51,0x10,
0x00,0x09,0xFD,0xE3,0x7E,0xB7,0x77,0x84,0x54,0x72,0x48,0x88,0x83,0xF8,0x4B,0x40,
0x39,0xF3,0x82,0x38,0xE1,0x0E,0x38,0xE3,0x9F,0x38,0x23,0x8E,0x10,0xE3,0x8E,0x38,
0x00,0x13,0xFF,0xFF,0xFF,0xFF,0xFF,0x85,0x93,0x24,0x08,0x8F,0x82,0x08,0x52,0xA0,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0x84,0x10,0x08,0x09,0x88,0x83,0xF8,0x61,0x10,
0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03};

 

uchar code TextLogo[]={
/*--  Text 256x32  --*/
"-TOPWAY  LM3033-""128x64  图形点阵"
"内置简体(GB)字库""单片机接口      "};

 

//-----------------------------------
// Delay Routine
//-----------------------------------
void delayms(uint m)        // 12MHz Xtal, close to ms value
{
 uint j;
 uint i;
 
 for(i=0; i<m; i++)
     for(j=0; j<109; j++)
         _nop_();
}

 

//-----------------------------------
// IO Routine
//-----------------------------------
void SdCmd(uchar Command)   //send command
{
    CS   = 0;   // init level
    SCLK = 0;
    SID  = 0;

    CS   = 1;   // enable data transfer
   
    SID=1;              SCLK=1; SCLK=0;
    SID=1;              SCLK=1; SCLK=0;
    SID=1;              SCLK=1; SCLK=0;
    SID=1;              SCLK=1; SCLK=0;
    SID=1;              SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0; // RS=0
    SID=0;              SCLK=1; SCLK=0;
    SID=Command&0x80;   SCLK=1; SCLK=0;
    SID=Command&0x40;   SCLK=1; SCLK=0;
    SID=Command&0x20;   SCLK=1; SCLK=0;
    SID=Command&0x10;   SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
    SID=Command&0x08;   SCLK=1; SCLK=0;
    SID=Command&0x04;   SCLK=1; SCLK=0;
    SID=Command&0x02;   SCLK=1; SCLK=0;
    SID=Command&0x01;   SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
   
    CS   = 0;   // disable data transfer
}

 

void SdData(uchar DData)    //send display data
{
    CS   = 0;   // init level
    SCLK = 0;
    SID  = 0;

    CS   = 1;   // enable data transfer
   
    SID=1;              SCLK=1; SCLK=0;
    SID=1;              SCLK=1; SCLK=0;
    SID=1;              SCLK=1; SCLK=0;
    SID=1;              SCLK=1; SCLK=0;
    SID=1;              SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
    SID=1;              SCLK=1; SCLK=0; // RS=1
    SID=0;              SCLK=1; SCLK=0;
    SID=DData&0x80;     SCLK=1; SCLK=0;
    SID=DData&0x40;     SCLK=1; SCLK=0;
    SID=DData&0x20;     SCLK=1; SCLK=0;
    SID=DData&0x10;     SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
    SID=DData&0x08;     SCLK=1; SCLK=0;
    SID=DData&0x04;     SCLK=1; SCLK=0;
    SID=DData&0x02;     SCLK=1; SCLK=0;
    SID=DData&0x01;     SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
    SID=0;              SCLK=1; SCLK=0;
   
    CS   = 0;   // disable data transfer
}

 

//-----------------------------------
// Write a Screen
//-----------------------------------
void WriteGraphicScreen(uchar *GDData)
// DisplayData should be 256x32/8 = 1024byte
// and graphic screen=on
{
 uchar TempData;
 uchar i, j;
 
    for(i=0;i<0x20;i++)
        {
     SdCmd(0x34);        // 8bit I/F, extend command
     SdCmd(0x80|i);      // Y address
     SdCmd(0x80);        // X address
     SdCmd(0x36);        // 8bit I/F, basic command, graphic on
       for(j=0;j<0x10;j++)
       {
       TempData=(*(GDData+(i*32)+(j*2)+0)); // send high-byte
       SdData(TempData);
       TempData=(*(GDData+(i*32)+(j*2)+1)); // send low-byte
       SdData(TempData);       
       }
        }
}

 

void WriteTextScreen(uchar *TxtData)
// DisplayData should be (8x4)x2 = 64byte
// and graphic screen=off
{
 uchar TempData;
 uchar j;
 
    SdCmd(0x34);        // 8bit I/F, basic command
    SdCmd(0x30);        // 8bit I/F, basic command, graphic off

    SdCmd(0x80);        // first line
    for(j=0;j<0x0F;j++)
     {
     TempData=(*(TxtData+0+(j*2)+0)); // send high-byte
     SdData(TempData);
     TempData=(*(TxtData+0+(j*2)+1)); // send low-byte
     SdData(TempData);       
     }

    SdCmd(0x90);        // second line
    for(j=0;j<0x0F;j++)
     {
     TempData=(*(TxtData+32+(j*2)+0)); // send high-byte
     SdData(TempData);
     TempData=(*(TxtData+32+(j*2)+1)); // send low-byte
     SdData(TempData);       
     }
}

 

//-----------------------------------
// Init LCD module
//-----------------------------------
void initLCDM(void)
{
    SCLK    = 0;
    SID     = 0;
    CS      = 0;
    PSB     = 0;    // serial mode
 _RES    = 1;    // reset pin
 _RES    = 0;
 delayms(1);
 _RES    = 1;
 delayms(1);

 SdCmd(0x30);    // 8bit I/F, basic command, graphic off
 SdCmd(0x06);    // cursor right shift
 SdCmd(0x0C);    // display on
}

 

//-----------------------------------
// Main Program
//-----------------------------------
void main()
{
 SP=0x60;
 EA = 0;                 // disable interrupts

    initLCDM();

 while(1)
 {
 SdCmd(0x30);          // 8bit I/F, basic command, graphic off
 SdCmd(0x01);          // clr text screen
 delayms(10);
 
    WriteGraphicScreen(GraphicLogo);
    delayms(250); delayms(250); delayms(250); delayms(250);

    WriteTextScreen(TextLogo);
    delayms(250); delayms(250); delayms(250); delayms(250);
    }
}
//end of program

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值