//------------------------------------------------- // Shenzhen TOPWAY Technology Co.,Ltd. // LCD Module: LM12832KCW // Display Size: 128 x 32 // Driver/Controller: ST75263S // by: likeke // Date: 2020-07-21 // System; AT89S52 (12MHz) // REV:new // note:V0.0 // by: wangxikuan // Date: 2020-08-17 // note: V0.2 更新温补参数 //------------------------------------------------- #include #include #include #define uchar unsigned char // 0~255 #define uint unsigned int // 0~65535 //----------------------------------- // ????? 4-SPI mode sbit _CS = P3^4; sbit RS = P3^6; sbit SID = P1^7; sbit SCLK = P1^6; sbit _RST = P3^5; uchar bdata transdata; // this variable could be bits' variable sbit transbit = transdata^7; sbit _KeySel = P3^0; // key scanning active sbit _KeyAuto = P1^0; // key pressed sbit _KeyDarker = P1^1; // key pressed sbit _KeyLighter = P1^2; // key pressed sbit _KeyStep = P1^3; // key pressed bit HideFlag = 1; bit AutoRun; // 1 for auto run, 0 for manual run uint ContrastLevel; // for contrast setting level uchar bdata GrayLevel4; //该变量可为位操作之变量 uchar code logo[]={ /*-- 调入了一幅图像:C:\Documents and Settings\admin\桌面\lm12896A-logo.bmp --*/ /*-- ??x??=128x64 --*/ 0x1F,0x01,0x41,0x01,0x41,0x01,0x40,0x00,0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20, 0x40,0x20,0x50,0xA0,0x50,0xA0,0x50,0xA8,0x50,0xA8,0x50,0xA8,0x54,0xA8,0x54,0xA8, 0x54,0xAA,0x54,0x2A,0x94,0x8A,0xD5,0xCA,0xE5,0xE2,0xF5,0xF2,0xF1,0xFA,0xF9,0xFC, 0xFD,0xFC,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x08,0x08,0xF8,0x08,0x08, 0x00,0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0xF8,0x88,0x88,0x88,0x70,0x18,0xE0, 0x00,0x80,0x70,0x08,0x70,0x80,0x00,0xE0,0x18,0x00,0x80,0x70,0x08,0x70,0x80,0x00, 0x00,0x08,0x30,0x40,0x80,0x40,0x30,0x08,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00, 0x00,0x20,0xF8,0x20,0x00,0xC0,0x20,0x20,0x40,0xF8,0x00,0x01,0x01,0x01,0x01,0x1F, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x40,0xA0,0x54,0xAA,0x55,0xAA,0x55,0x2A,0x95,0xCA,0xE5,0xF2,0xF9,0xFC, 0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x07,0x00,0x00, 0x00,0x01,0x02,0x04,0x04,0x04,0x02,0x01,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x01, 0x06,0x01,0x00,0x00,0x00,0x01,0x06,0x01,0x00,0x06,0x01,0x01,0x01,0x01,0x01,0x06, 0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x04,0x04,0x04, 0x04,0x00,0x07,0x04,0x00,0x03,0x04,0x04,0x02,0x07,0x00,0x00,0x04,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xA0, 0x54,0x2A,0x95,0xCA,0xE5,0xF2,0xF9,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFE,0xFE,0x00,0x00,0x00, 0x00,0x00,0x00,0xFE,0xFE,0x1E,0xF8,0x00,0xF8,0x1E,0xFE,0xFE,0x00,0x00,0x18,0x0C, 0xFE,0xFE,0x00,0x00,0x04,0x06,0xC2,0xE2,0x7E,0x1C,0x00,0xDC,0xFE,0x22,0x22,0xFE, 0xDC,0x00,0x04,0x06,0x22,0x22,0xFE,0xDC,0x00,0x04,0x06,0xC2,0xE2,0x7E,0x1C,0x00, 0x00,0xFE,0xFE,0x60,0x38,0xFC,0xC6,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xF8,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x0A,0x65,0x70, 0x7C,0x7E,0x7F,0x7F,0x7D,0x7D,0x61,0x7D,0x7D,0x7F,0x73,0x6D,0x6D,0x6D,0x73,0x7F, 0x61,0x75,0x75,0x75,0x7B,0x7F,0x71,0x6F,0x77,0x6F,0x71,0x7F,0x67,0x73,0x75,0x73, 0x67,0x7F,0x7D,0x7B,0x67,0x7B,0x7D,0x7F,0x7F,0x00,0x00,0x07,0x07,0x04,0x04,0x04, 0x04,0x00,0x00,0x07,0x07,0x00,0x03,0x07,0x03,0x00,0x07,0x07,0x00,0x00,0x00,0x00, 0x07,0x07,0x00,0x00,0x06,0x07,0x05,0x04,0x04,0x04,0x00,0x03,0x07,0x04,0x04,0x07, 0x03,0x00,0x02,0x06,0x04,0x04,0x07,0x03,0x00,0x06,0x07,0x05,0x04,0x04,0x04,0x00, 0x00,0x07,0x07,0x00,0x00,0x01,0x07,0x06,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xF8, }; //----------------------------------- // Delay Routine //----------------------------------- void delayms(uint m) // 12MHz Xtal, close to ms value { uint j; uint i; for(i=0; i0x00) // 限制下限值 { ContrastLevel--; // 对比度参数减1 SdCmd(0xd7); } } //----清屏子程序----------------- void ClearRAM() { uchar i,j; SdCmd(0x30); //Extension Command 1 SdCmd(0xf0); // Display Mode SdData(0x10); // 10H=Monochrome Mode,11H=4Gray SdCmd(0x15);SdData(0x00);SdData(0x9f); // 设置列地址 SdCmd(0x75);SdData(0x00);SdData(0x13); // 设置页地址 SdCmd(0x5c); for(i=0;i<20;i++) { for(j=0;j<160;j++) { SdData(0x00); } } } //----------------------------------- // 初始化子程序Init LCD module //----------------------------------- void initLCDM(void) { RST=1; delayms(2); RST=0; delayms(2); RST=1; delayms(800); ContrastLevel=0x30; SdCmd(0x30); // Extension Command 1 SdCmd(0x6e); //Enable Master SdCmd(0x31); // Extension Command 2 SdCmd(0xd7); // Disable Auto Read SdData(0x9f); SdCmd(0xe0); // Enable OTP Read SdData(0x00); delayms(20); SdCmd(0xe3); // OTP Up-Load delayms(40); SdCmd(0xe1); // OTP Control Out delayms(40); //------功能设置---------------------------------------------- SdCmd(0x30); //Extension Command 1 SdCmd(0x94); // Sleep out, SdCmd(0xae); // Display off delayms(50); SdCmd(0x20); // Power control SdData(0x0b); // D0=regulator ; D1=follower ; D3=booster, on:1 off:0 SdCmd(0x81); // EV control SdData(0x07); // VPR[5-0] // VOP=12.5V SdData(0x1e); // VOP=13.0V SdData(0x2b); SdData(0x02); // VPR[8-6] vop=(10-3.6)/0.04=160=1010 0000 SdCmd(0x31); // Extension Command 2 SdCmd(0x32); // EXT=10 SdData(0x00); SdData(0x01); // Frequency on booster capacitors 6khz SdData(0x05); //1/9 Bias 0X05 SdCmd(0x51); // Booster Level x8 SdData(0XFA); SdCmd(0x30); // Extension Command 1 SdCmd(0x0c); //Data Format Select 08:LSB on bottom(Default) 0C:LSB on top SdCmd(0xca); // Display Control SdData(0x00); // 1/2 division 0X04 SdData(0x1f); // 1/32duty SdData(0x00); // SET N-line inversion. Number of line cycles-1=LF4+LF3+LF2+LF1+LF0. 18-line SdCmd(0xbc); // PARAMETER scan direction ----------- SdData(0x00); // Data scan direction SdCmd(0XA6); // Normal display SdCmd(0x31); // Extension Command 2 SdCmd(0x40); // Internal Power Supply SdCmd(0xf2); // set frequency of frame rate SdData(10); // -20 SdData(40); // 10 SdData(80); // 60 SdCmd(0xf0); // set frequency of frame rate SdData(0X03); //the Frame Rate in temp. -30~TA SdData(0X0b); //the Frame Rate in temp. TA~TB SdData(0X15); //the Frame Rate in temp. TB~TC SdData(0X1a); //the Frame Rate in temp. TC~90 SdCmd(0x31); // Extension Command 2 SdCmd(0xf4);//set temperature gradient compensation coefficient SdData(0X0F);//MT1,MT0 SdData(0X00);//MT3,MT2 SdData(0X00);//MT5,MT4 SdData(0X00);//MT7,MT6 SdData(0X00);//MT9,MT8 SdData(0X10);//MT11,MT10 SdData(0Xf0);//MT13,MT12 SdData(0X00);//MT15,MT14 SdCmd(0x30); // EXT=0 // SdCmd(0x76);//Set Icon 0x76:Disable 0x77:Enable SdCmd(0xaf);//Display on } //-----图画写入子程序--------------------------------- void ShowBMP(uchar *pstr) { uchar i,j; SdCmd(0x30); //Extension Command 1 SdCmd(0x15);SdData(0x00);SdData(0x7f); // 设置列地址 SdCmd(0x75);SdData(0x00);SdData(0x03); // 设置页地址 SdCmd(0x5c); // 写数据 for(i=0;i<4;i++) { for(j=0;j<128;j++) { SdData(*pstr++); // 写图形数据 } } } //----------------------------------- // Main Program //----------------------------------- void main() { SP=0x60; EA = 0; // disable interrupts _CS =1; RS =1; SCLK =1; SID =1; _RST =1; // hardware reset LCD module _KeySel = 1; // init all signal AutoRun = 0; _RST =1; // hardware reset LCD module initLCDM(); ShowBMP(logo); while(1); } //end of program