#include <reg51.h> #include <stdio.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define DATA P2 //數據端口 sbit Reset = P3^0; //復位 sbit RS = P3^7; //指令數據選擇 sbit E = P3^5; //指令數據控制 sbit RW = P3^6; //讀寫控制 sbit busy = P2^7; //忙標志 sbit CS1 = P3^2; //左屏幕選擇,低電平有效 sbit CS2 = P3^3; //右屏幕選擇 /////////////////////////////////////// LCD ///////////////////////////////////// const uchar code Hzk[] = { 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//*"E",0*/ 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//*"D",1*/ 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//*"G",2*/ 0x00,0x40,0x20,0x1E,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00, 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,//*"牛",3*/ 0x40,0x40,0x42,0xCC,0x00,0x82,0xBA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBA,0x82,0x00,0x00, 0x00,0x40,0x20,0x1F,0x20,0x5F,0x4A,0x4A,0x4A,0x4F,0x4A,0x4A,0x4A,0x5F,0x40,0x00//*"逼",4*/ }; const uchar code pic[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,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, 0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x00,0x00, 0x00,0x00,0x00,0x01,0xE0,0x07,0x00,0x00,0x00,0x00,0xC0,0x07,0xE1,0x1E,0x00,0x00, 0x00,0x00,0xE0,0x0F,0xE0,0x39,0x00,0x00,0x00,0xF0,0x3F,0x1C,0xC0,0x71,0x00,0x00, 0x00,0xFC,0xDF,0x19,0xF8,0x6F,0x00,0x00,0x00,0x1F,0xF0,0x33,0xFC,0xFF,0x00,0x00, 0x80,0x03,0x30,0x36,0xBF,0xFF,0x81,0x0F,0xC0,0x01,0x70,0xB6,0xE3,0xFF,0xFB,0x0F, 0xE0,0x00,0xE0,0xFE,0xC1,0xE3,0x7F,0x0C,0x60,0x00,0xF0,0xFF,0xC0,0x63,0x03,0x0C, 0x30,0x00,0xF8,0x7F,0xC0,0xC1,0x01,0xFC,0x30,0x00,0x6C,0xF8,0xF3,0xC1,0x00,0xF8, 0x30,0xF4,0xFF,0xF8,0xFF,0xF1,0x00,0x18,0x30,0xF8,0xFB,0x71,0xDE,0xFD,0x00,0x18, 0x30,0x98,0xED,0xF1,0xBF,0xDF,0x00,0xF8,0x30,0x8C,0xED,0xBD,0x37,0x83,0x01,0xF8, 0x70,0x8C,0xDD,0xFF,0x7E,0x80,0x01,0x18,0x60,0x0C,0xF8,0xFF,0xFF,0xC0,0x00,0xF8, 0x60,0x1C,0xF0,0xFE,0xFF,0x60,0x00,0xF8,0xE0,0x18,0x78,0xFE,0xFF,0xE0,0x00,0x18, 0xC0,0x18,0xFC,0x76,0x1F,0xC3,0x00,0x18,0xC0,0x8C,0xED,0xF1,0xFE,0x6F,0x00,0xF8, 0xC0,0x8C,0xAD,0xF1,0xF9,0xFF,0x00,0xF8,0xC0,0x99,0xBD,0x99,0xC1,0xF9,0x0F,0x0C, 0x80,0xF9,0xED,0x9C,0xF3,0x00,0x7F,0x0C,0x00,0xF3,0xFF,0x1F,0x7F,0x00,0xF8,0x0F, 0x00,0x87,0xFF,0x1B,0x6E,0x00,0x80,0x0F,0x00,0xFE,0xFF,0x18,0x66,0x08,0x00,0x00, 0x00,0xF8,0x3F,0x9C,0x63,0x00,0x00,0x00,0x00,0x00,0xF0,0xEF,0x31,0x00,0x00,0x10, 0x00,0x00,0xE0,0x67,0x1B,0x00,0x00,0x40,0x00,0x00,0x00,0xB0,0x0F,0x00,0x00,0x08, 0x00,0x00,0x00,0xF0,0x07,0x00,0x00,0x08,0x00,0x00,0x00,0xF0,0x06,0x00,0x00,0x08, 0x00,0x00,0x80,0x71,0x07,0x00,0x00,0x08,0x00,0x00,0x00,0xF8,0x03,0x00,0x00,0x38, 0x00,0x00,0x00,0xFC,0x01,0x00,0x00,0x10,0x20,0x00,0x00,0x7E,0x00,0x00,0x00,0x00, 0x00,0x00,0x40,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04, 0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00, 0x08,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x0A,0x00,0x30,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x06,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x80,0x00,0x00,0x00, 0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00 }; void CheckState() { uchar dat; RS = 0; RW = 1; do { DATA = 0x00; E = 1; _nop_(); dat = DATA; E = 0; dat = 0x80&dat; }while(!(dat==0x00)); } void SendCommand(uchar com) { CheckState(); RS = 0; RW = 0; DATA = com; E = 1; _nop_(); _nop_(); E = 0; } void SetLine(uchar page) { page = 0xb8|page; SendCommand(page); } void SetStartLine(uchar startLine) { startLine = 0xc0 | startLine; SendCommand(startLine); } void SetColumn(uchar column) { column &= 0x3f; column |= 0x40; SendCommand(column); } void SetOnOff(uchar onOff) { onOff |= 0x3e; SendCommand(onOff); } void WriteByte(uchar dat) { CheckState(); RS=1; RW = 0; DATA = dat; E = 1; _nop_(); _nop_(); E = 0; } void SelectScreen(uchar screen) { switch(screen) { case 0: //全屏 CS1 = 1; CS2 = 1; break; case 1: //左屏 CS1 = 1; CS2 = 0; break; case 2: //右屏 CS1 = 0; CS2 = 1; break; } } void ClearScreen(uchar screen) { uchar i,j; SelectScreen(screen); for(i=0; i<8; i++) { SetLine(i); SetColumn(0); for(j=0; j<64; j++) { WriteByte(0x00); } } } void delay(uint z) { uint i,j; for(i=0; i<z; i++) { for(j=0; j<110; j++) { ; } } } void InitLcd() { CheckState(); SelectScreen(0); SetOnOff(0); SelectScreen(0); SetOnOff(1); SelectScreen(0); ClearScreen(0); SetStartLine(0); } void Display(uchar ss, uchar page, uchar column, uchar number) { int i; SelectScreen(ss); column &= 0x3f; SetLine(page); SetColumn(column); for(i=0; i<16; i++) { WriteByte(Hzk[i+32*number]); } SetLine(page+1); SetColumn(column); for(i=0; i<16; i++) { WriteByte(Hzk[i+32*number+16]); } } void showMsg(uchar page) { uchar i; for(i=0; i<2.5; i++) { Display(1+i/4,page,i*16,i); } } void drawBmp() { int i,j,k; SelectScreen(1); SetLine(0); SetColumn(0); for(i=0; i<64; i++) { for(j=0; j<8; j++) { SetLine(j); SetColumn(i&0x3f); WriteByte(pic[i*8+j]); } } SelectScreen(2); SetLine(0); SetColumn(64); for(i=0; i<64; i++) { for(j=0; j<8; j++) { SetLine(j); SetColumn(i&0x3f); WriteByte(pic[512+i*8+j]); } } } //////////////////////////////////////// END LCD //////////////////////////////// void main(void) { int i,j; InitLcd(); //drawBmp(); showMsg(3); while(1); } |