//---------------------------------------------------------------------- /*EASTRISING TECHNOLOGY CO,.LTD.*/ // Module : ERM12232-1 Series // Lanuage : C51 Code // Create : JAVEN // Date : 2009-06-18 // Drive IC : SBN1661G_M02 does not have an on-chip oscillator and needs external clock source. operating frequency is 2KHz. // INTERFACE : 6800_8bit or 8080 8bit // MCU : AT89C52 12M Crystal oscillator // VDD : 5V VLCD: 4.5V //---------------------------------------------------------------------- #include #include #define uint unsigned int #define uchar unsigned char #define TIMING 6800 #define A0 P2_0 //Selection of command or data. 1 :data 0 : command #define CS1 P2_1 //CS pin. left #define CS2 P2_2 //CS pin. right #define CL P2_3 // external clock input #define E_RD P2_4 // Enable signal (E) for the 68-type microcontroller, or READ (RD) signal for the 80-type microcontroller. #define RW_WR P2_5 //Read/Write (R/W) signal for the 68-type microcontroller, or WRITE(WR) signal for the 80-type microcontroller. #define RST P2_6 // RESET PIN; #define DATA_BUS P1 //Data bus sbit int0=P3^2; //external interrup input bit log=0; //display stop mark void Display_One_Chinese(unsigned char page, unsigned char col, unsigned char Character_coding, unsigned char ft[]); void Display_Picture(unsigned char pic[]); void show_chinese(void); void Display_dot(unsigned char value,unsigned char value1); void Initial(void); void Set_Column_Address_R(unsigned char address); void Set_Column_Address_L(unsigned char address); void Set_Page_Address(unsigned char add); void Write_Instruction_R(unsigned char cmd); void Write_Instruction_L(unsigned char cmd); void Write_Data_R(unsigned char dat); void Write_Data_L(unsigned char dat); void Busy_R(); void Busy_L(); void Delay2(uint n); void Delay1(uint x); void Delay(uint MS); unsigned char code ft[]= { /*-- 文字: 深 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x10,0x61,0x06,0xE0,0x00,0x26,0x22,0x1A,0x02,0xC2,0x0A,0x12,0x32,0x06,0x02,0x00, 0x04,0xFC,0x03,0x20,0x20,0x11,0x11,0x09,0x05,0xFF,0x05,0x09,0x19,0x31,0x10,0x00, /*-- 文字: 圳 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x10,0x10,0x10,0xFE,0x10,0x10,0xFE,0x00,0x00,0xFC,0x00,0x00,0x00,0xFE,0x00,0x00, 0x08,0x08,0x04,0x47,0x24,0x18,0x07,0x00,0x00,0x1F,0x00,0x00,0x00,0x7F,0x00,0x00, /*-- 文字: 旭 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x10,0x10,0x10,0xFF,0x10,0xF0,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00, 0x40,0x30,0x0E,0x01,0x00,0x3F,0x40,0x40,0x47,0x44,0x44,0x44,0x44,0x47,0x70,0x00, /*-- 文字: 日 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00, /*-- 文字: 东 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x04,0x04,0xC4,0xB4,0x8C,0x87,0x84,0xF4,0x84,0x84,0x84,0x84,0x04,0x00,0x00, 0x00,0x00,0x20,0x18,0x0E,0x04,0x20,0x40,0xFF,0x00,0x02,0x04,0x18,0x30,0x00,0x00, /*-- 文字: 方 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x08,0x08,0x08,0x08,0x08,0x08,0xF9,0x4A,0x4C,0x48,0x48,0xC8,0x08,0x08,0x08,0x00, 0x40,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x20,0x40,0x40,0x3F,0x00,0x00,0x00,0x00, /*-- 文字: 科 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x10,0x12,0x92,0x72,0xFE,0x51,0x91,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00, 0x04,0x02,0x01,0x00,0xFF,0x00,0x04,0x04,0x04,0x02,0x02,0x02,0xFF,0x01,0x01,0x00, /*-- 文字: 技 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x08,0x08,0x88,0xFF,0x48,0x28,0x00,0xC8,0x48,0x48,0x7F,0x48,0xC8,0x48,0x08,0x00, 0x01,0x41,0x80,0x7F,0x00,0x40,0x40,0x20,0x13,0x0C,0x0C,0x12,0x21,0x60,0x20,0x00, /*-- 文字: 成 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0xF8,0x48,0x48,0x48,0xC8,0x08,0xFF,0x08,0x09,0x0A,0xC8,0x88,0x08,0x00, 0x40,0x30,0x0F,0x00,0x08,0x50,0x4F,0x20,0x10,0x0B,0x0C,0x12,0x21,0x40,0xF0,0x00, /*-- 文字: 立 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x10,0x10,0x90,0x10,0x10,0x11,0x16,0x10,0x10,0xF0,0x50,0x10,0x10,0x00,0x00, 0x40,0x40,0x40,0x40,0x43,0x4E,0x40,0x60,0x58,0x47,0x40,0x40,0x40,0x60,0x40,0x00, /*-- 文字: 于 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x40,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x40,0x00, 0x00,0x00,0x00,0x00,0x20,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: 一 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: 九 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x10,0x10,0x10,0x10,0x90,0x7F,0x10,0x10,0x10,0xF8,0x10,0x00,0x00,0x00,0x00, 0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x78,0x20,0x00, /*-- 文字: 九 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x10,0x10,0x10,0x10,0x90,0x7F,0x10,0x10,0x10,0xF8,0x10,0x00,0x00,0x00,0x00, 0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x78,0x20,0x00, /*-- 文字: 七 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0xFE,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x38,0x00,0x00, /*-- 文字: 年 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00, 0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00, /*-- 文字: 期 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00, 0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00, /*-- 文字: 待 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x20,0x10,0x08,0xC7,0x3A,0x50,0x44,0x44,0x44,0x7F,0x44,0xC4,0x44,0x44,0x40,0x00, 0x00,0x02,0x01,0xFF,0x00,0x02,0x02,0x1A,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x00, /*-- 文字: 着 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x44,0x54,0x54,0x55,0x56,0xD4,0x7C,0x54,0x54,0x56,0x55,0x54,0x44,0x44,0x00, 0x08,0x08,0x04,0x04,0x02,0xFF,0x55,0x55,0x55,0x55,0x55,0x55,0xFF,0x00,0x00,0x00, /*-- 文字: 您 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x80,0x40,0x30,0xFC,0x03,0x90,0x68,0x06,0x04,0xF4,0x04,0x24,0x44,0x8C,0x04,0x00, 0x00,0x20,0x38,0x03,0x38,0x40,0x40,0x49,0x52,0x41,0x40,0x70,0x00,0x09,0x30,0x00, /*-- 文字: 来 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x80,0x84,0x84,0x94,0xA4,0xC4,0xFF,0x84,0xC4,0xB4,0x94,0x84,0x84,0x80,0x00, 0x20,0x20,0x10,0x10,0x08,0x04,0x02,0xFF,0x01,0x02,0x04,0x08,0x18,0x30,0x10,0x00, /*-- 文字: 电 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00, 0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00, /*-- 文字: 来 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x80,0x84,0x84,0x94,0xA4,0xC4,0xFF,0x84,0xC4,0xB4,0x94,0x84,0x84,0x80,0x00, 0x20,0x20,0x10,0x10,0x08,0x04,0x02,0xFF,0x01,0x02,0x04,0x08,0x18,0x30,0x10,0x00, /*-- 文字: 函 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0xE0,0x02,0x12,0xE2,0x42,0x02,0xF2,0x12,0x8A,0x66,0x47,0x02,0xE0,0x00,0x00, 0x00,0x7F,0x20,0x24,0x24,0x2A,0x31,0x2F,0x21,0x22,0x24,0x2C,0x20,0x7F,0x00,0x00, /*-- 文字: 我 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x20,0x20,0x22,0x22,0xFE,0x21,0x21,0x20,0x20,0xFF,0x20,0x22,0xAC,0x20,0x20,0x00, 0x04,0x04,0x42,0x82,0x7F,0x01,0x01,0x10,0x10,0x08,0x07,0x1A,0x21,0x40,0xF0,0x00, /*-- 文字: 们 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x80,0x40,0xF0,0x1C,0x03,0xF0,0x01,0x0E,0x04,0x00,0x04,0x04,0x04,0xFC,0x00,0x00, 0x00,0x00,0x7F,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x20,0x40,0x3F,0x00,0x00, /*-- 文字: 真 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x04,0x04,0x04,0xF4,0x54,0x5C,0x57,0x54,0x54,0x54,0xF4,0x04,0x06,0x04,0x00, 0x10,0x90,0x90,0x50,0x5F,0x35,0x15,0x15,0x15,0x35,0x55,0x5F,0x90,0x90,0x10,0x00, /*-- 文字: 诚 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x20,0x21,0xE6,0x02,0x08,0xF8,0x88,0x88,0x88,0x08,0xFF,0x08,0x0A,0xCC,0x88,0x00, 0x00,0x00,0x3F,0x90,0x68,0x1F,0x20,0x40,0x3F,0x20,0x10,0x0F,0x14,0x23,0x78,0x00, /*-- 文字: 为 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x10,0x10,0x12,0x14,0x1C,0x10,0xF0,0x9F,0x10,0x10,0x10,0x10,0xF8,0x10,0x00, 0x00,0x00,0x40,0x20,0x10,0x08,0x06,0x01,0x00,0x11,0x26,0x40,0x20,0x1F,0x00,0x00, /*-- 文字: 您 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x80,0x40,0x30,0xFC,0x03,0x90,0x68,0x06,0x04,0xF4,0x04,0x24,0x44,0x8C,0x04,0x00, 0x00,0x20,0x38,0x03,0x38,0x40,0x40,0x49,0x52,0x41,0x40,0x70,0x00,0x09,0x30,0x00, /*-- 文字: 服 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0xFF,0x91,0x91,0xFF,0x00,0x00,0xFF,0xC1,0x41,0x49,0x51,0xCF,0x00,0x00, 0x40,0x30,0x0F,0x20,0x40,0x3F,0x00,0x00,0x7F,0x21,0x16,0x08,0x36,0x61,0x20,0x00, /*-- 文字: 务 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x20,0x10,0x10,0x88,0x84,0x4F,0x52,0xA2,0x22,0x52,0x4A,0x86,0x80,0x80,0x80,0x00, 0x80,0x81,0x41,0x42,0x22,0x12,0x0E,0x03,0x02,0x42,0x82,0x7E,0x00,0x01,0x00,0x00 }; unsigned char code pic1[]= {/*-- 调入了一幅图像:E:\显示用图片\ERM12232GS-1.bmp --*/ /*-- 宽度x高度=122x32 --*/ 0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x93,0x93, 0x93,0x93,0xC9,0xA9,0xA9,0xF9,0x01,0x91,0xA9,0xA9,0x49,0x09,0xFD,0x89,0x01,0x01, 0xFF,0x13,0x13,0x33,0xCD,0x01,0xFB,0x01,0x91,0xA9,0xA9,0x49,0x01,0xFB,0x01,0xF9, 0x09,0x09,0xF1,0x01,0x71,0x89,0x89,0xF9,0x01,0x01,0x01,0x01,0x03,0x03,0xFF,0x03, 0x03,0x71,0xA9,0xA9,0xB1,0x01,0x71,0x89,0x89,0x51,0x01,0xFF,0x09,0x09,0xF1,0x01, 0xF9,0x09,0x09,0xF1,0x01,0x71,0x89,0x89,0x71,0x01,0xFF,0x01,0x71,0x89,0x89,0x71, 0x01,0x71,0x89,0x89,0xF9,0x01,0x09,0x71,0x81,0x71,0x09,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x20,0xFC,0xE0,0x00,0xF0,0x50,0x50,0xF8,0x00,0x00,0x00,0x00,0xF8,0x48,0x48, 0x48,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0xD0,0xB0,0x98,0xF4,0x90,0x90,0x91,0x02, 0x02,0x01,0x10,0x10,0x10,0xF0,0x58,0x50,0xD0,0x50,0x10,0x10,0x00,0x28,0xF8,0xA8, 0xA4,0x00,0x90,0x00,0xFC,0x00,0x00,0x00,0xA0,0xFC,0xA0,0x50,0xA0,0xA0,0x7C,0xA0, 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x01,0x00, 0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0, 0xC0,0x40,0x40,0x40,0x00,0xC0,0xC0,0x40,0x40,0xC0,0x88,0x06,0xC1,0xC7,0xC8,0x09, 0x0A,0x0A,0xCB,0xCC,0xC0,0x00,0x00,0x8F,0xC4,0xC4,0x04,0x04,0x84,0xCF,0x40,0xC0, 0x80,0x04,0x82,0xC1,0x41,0xCF,0x80,0x01,0x82,0xC4,0x40,0xC0,0x88,0x04,0x83,0xC0, 0x40,0xC8,0x8F,0x00,0x00,0x00,0x02,0x01,0x07,0x80,0xC0,0xC2,0x02,0x01,0x0F,0x01, 0x00,0x80,0xC0,0x4F,0x48,0xC8,0x89,0x06,0x06,0x09,0x08,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x80, 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xBF,0xBF,0xA2,0xA2,0xA2,0x80,0xBF, 0xBF,0x84,0x8C,0x9F,0xB3,0xA0,0xBF,0xBF,0x83,0x9F,0xB8,0x9F,0x83,0xBF,0xBF,0x80, 0x83,0x81,0xBF,0xBF,0x80,0x80,0xB0,0xB8,0xAC,0xA7,0xA3,0x80,0xB0,0xB8,0xAC,0xA7, 0xA3,0x80,0x90,0xB0,0xA2,0xBF,0x9D,0x80,0xB0,0xB8,0xAC,0xA7,0xA3,0x80,0x88,0x88, 0x88,0x80,0x83,0x81,0xBF,0xBF,0x80,0x80,0x80,0x80,0x80,0x93,0xB3,0xA6,0xA6,0xBC, 0x9C,0x80,0x9E,0xBF,0xA5,0xA5,0xB7,0x96,0x80,0xBF,0xBF,0x81,0x81,0x80,0xBF,0xBF, 0x80,0x9E,0xBF,0xA5,0xA5,0xB7,0x96,0x80,0x96,0xB7,0xAD,0xAD,0xBB,0x9A,0x80,0x80, 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF, }; unsigned char code pic2[]= {/*-- 调入了一幅图像:E:\显示用图片\122321.bmp --*/ /*-- 宽度x高度=122x32 --*/ 0x07,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0xFE,0x10,0xF0,0x00, 0xFC,0x24,0x24,0x24,0xFC,0x00,0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0x22, 0xFE,0x00,0x00,0x04,0x44,0x64,0x54,0x4C,0xF6,0x44,0xC4,0x44,0x44,0x04,0x00,0x08, 0x08,0x08,0x08,0xF8,0x2A,0x2C,0x28,0xE8,0x0C,0x08,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0xE0,0x78,0x7E,0xFE,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xE0,0xF0,0xF8,0xFC,0xFC,0xFE,0xFE,0x7C,0x7C,0x30,0xF8,0x28,0x00, 0x04,0x06,0x06,0x02,0x04,0x04,0x04,0x04,0x04,0x04,0x4C,0xDC,0x60,0x80,0x80,0x00, 0xC0,0xC0,0xE0,0xE0,0xC0,0x80,0x00,0x01,0x01,0x07,0x00,0x00,0x00,0x00,0x00,0xC0, 0xC0,0x40,0x40,0x40,0x00,0x0C,0x03,0x00,0x0F,0x08,0x0B,0x09,0x09,0x09,0x0B,0x0C, 0x00,0x00,0x80,0xCF,0x04,0x04,0xC4,0xC4,0x44,0x44,0xCF,0x80,0x00,0x44,0x44,0x02, 0x01,0x08,0x0F,0x00,0x00,0x01,0x02,0x44,0x40,0x08,0x08,0x04,0x03,0x00,0x08,0x08, 0x08,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x3C,0x3E,0x3F,0x38, 0x33,0x30,0x38,0x3F,0x3E,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC7,0x3F, 0x0F,0x0F,0x1F,0x3F,0x7F,0xFF,0xFD,0xF9,0xFB,0xFB,0x62,0x24,0x0C,0x0C,0x3C,0x7C, 0xFC,0xFC,0xFE,0xFA,0xFA,0xF7,0xF4,0x4C,0x38,0x03,0x0F,0x7F,0xFF,0x7F,0x7F,0x3F, 0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x22,0x22,0x22,0x00,0x1A, 0x3D,0x25,0x3F,0x3E,0x00,0x16,0x37,0x2D,0x2D,0x3B,0x1A,0x01,0x1F,0x3F,0x21,0x00, 0x3F,0x3F,0x04,0x0C,0x1F,0x33,0x20,0x3F,0x3F,0x00,0x16,0x37,0x2D,0x2D,0x3B,0x1A, 0x00,0x3F,0x3F,0x00,0x3F,0x3F,0x01,0x01,0x3F,0x3E,0x00,0x5E,0xBF,0xA1,0xA1,0xFF, 0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x91, 0xFE,0xA4,0x24,0x24,0xC4,0x3C,0x18,0x06,0xF1,0xF8,0xFC,0xFE,0x0F,0x27,0x27,0x37, 0x6F,0x3E,0x18,0x00,0x00,0x00,0x00,0x60,0x58,0x4C,0xCC,0x9C,0xFC,0xFC,0xFC,0xF8, 0xF0,0xE0,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x80, 0x80,0xFF,0xFF,0x00,0x78,0xFC,0x84,0xCC,0x48,0x00,0x78,0xFC,0x84,0x84,0xFF,0xFF, 0x00,0x20,0x20,0x20,0x00,0x78,0xFC,0x84,0xCC,0x48,0x00,0xFF,0xFF,0x04,0x04,0xFC, 0xF8,0x00,0xFD,0xFD,0x00,0xFC,0xFC,0x04,0x04,0xFC,0xF8,0x00,0x68,0xF4,0x94,0xFC, 0xF8,0x00,0xC0,0xC0,0x00,0x78,0xFC,0x84,0xCC,0x48,0x00,0x78,0xFC,0x84,0x84,0xFC, 0x78,0x00,0xFC,0xFC,0x04,0x04,0xFC,0xFC,0x04,0x04,0xFC,0xFC,0x01,0x01,0x0F,0xFC, 0xB0,0x60,0xC1,0x83,0x07,0x07,0x07,0x06,0x82,0x87,0x46,0x44,0x00,0x40,0x00,0x00, 0x00,0x00,0x02,0x06,0x0E,0x0E,0x1F,0x1F,0x1F,0x1F,0x0F,0x07,0x00,0x80,0xC0,0x70, 0x1F,0x00,0x00,0x00,0x00,0x80,0x80,0xE0, }; /////////////////////////External interrupt void Step(void) interrupt 0 using 0 { Delay1(3000); if(int0==0) log=!log; while(!int0)Delay1(3000); return; } void Delay1(uint n) {while(n--); } void Delay2(uint x) { while(x) { x--; for(;log==1;); } } void Delay(uint MS) { unsigned char j; while(MS--) { for(j=0;j<5;j++) Delay2(10); } } ////////////////////////Timer interrupt Produce 2 KHZ clock signal void clock_timer(void) interrupt 1 using 1 // { TH0=0xff; //(65536-250)/256; Timer high byte 1s=1000000us 1000000/4000=250 250us H 250us L A cycle for 500 us TL0=0x06; //(65536-250)%256; Timer low byte CL=~CL; return; } #if (TIMING==6800) //6800 interface //check left half screen busy void Busy_L() { unsigned char flag=0xff; A0=0;CS1=0;E_RD=0;RW_WR=1; while ((flag&0x80)==0x80) { E_RD=1; _nop_(); flag=DATA_BUS; E_RD=0; } CS1=1; } #else //8080 interface //check left half screen busy void Busy_L() { unsigned char flag=0xff; A0=0;CS1=0;E_RD=1;RW_WR=1; while ((flag&0x80)==0x80) { E_RD=0; _nop_(); flag=DATA_BUS; E_RD=1; } CS1=1; } #endif #if (TIMING==6800) //6800 interface //check right half screen busy void Busy_R() { unsigned char flag=0xff; A0=0;CS2=0;E_RD=0;RW_WR=1; while ((flag&0x80)==0x80) { E_RD=1; _nop_(); flag=DATA_BUS; E_RD=0; } CS2=1; } #else //8080 interface //check right half screen busy void Busy_R() { unsigned char flag=0xff; A0=0;CS2=0;E_RD=1;RW_WR=1; while ((flag&0x80)==0x80) { E_RD=0; _nop_(); flag=DATA_BUS; E_RD=1; } CS2=1; } #endif #if (TIMING==6800) //6800 interface //write data to left half screen void Write_Data_L(unsigned char dat) { Busy_L(); A0=1; CS1=0; RW_WR=0; DATA_BUS=dat; E_RD=1; _nop_(); E_RD=0; RW_WR=1; CS1=1; return; } #else //8080 interface //write data to left half screen void Write_Data_L(unsigned char dat) { Busy_L(); A0=1; CS1=0; E_RD=1; RW_WR=0; DATA_BUS=dat; _nop_(); RW_WR=1; CS1=1; return; } #endif #if (TIMING==6800) //6800 interface //write data to right half screen void Write_Data_R(unsigned char dat) { Busy_R(); A0=1; CS2=0; RW_WR=0; DATA_BUS=dat; E_RD=1; _nop_(); E_RD=0; RW_WR=1; CS2=1; return; } #else //8080 interface //write data to right half screen void Write_Data_R(unsigned char dat) { Busy_L(); A0=1; CS2=0; E_RD=1; RW_WR=0; DATA_BUS=dat; _nop_(); RW_WR=1; CS2=1; return; } #endif #if (TIMING==6800) //6800 interface //write command to left half screen void Write_Instruction_L(unsigned char cmd) { Busy_L(); A0=0; CS1=0; RW_WR=0; DATA_BUS=cmd; E_RD=1; _nop_(); E_RD=0; RW_WR=1; CS1=1; return; } #else //8080 interface //write command to left half screen void Write_Instruction_L(unsigned char cmd) { Busy_L(); A0=0; CS1=0; E_RD=1; RW_WR=0; DATA_BUS=cmd; _nop_(); RW_WR=1; CS1=1; return; } #endif #if (TIMING==6800) //6800 interface //write command to right half screen void Write_Instruction_R(unsigned char cmd) { // Busy_R(); A0=0; CS2=0; RW_WR=0; DATA_BUS=cmd; E_RD=1; _nop_(); E_RD=0; RW_WR=1; CS2=1; return; } #else //8080 interface //write command to right half screen void Write_Instruction_R(unsigned char cmd) { Busy_R(); A0=0; CS2=0; E_RD=1; RW_WR=0; DATA_BUS=cmd; _nop_(); RW_WR=1; CS2=1; return; } #endif // Set page address 0~4 void Set_Page_Address(unsigned char add) { add=0xb8|add; Write_Instruction_L(add); Write_Instruction_R(add); return; } //Set left half screen column address void Set_Column_Address_L(unsigned char address) { Write_Instruction_L(address&0x7F); } //Set right half screen column address void Set_Column_Address_R(unsigned char address) { Write_Instruction_R(address&0x7F); } // Initial LCM void Initial(void) { //RESET/////////////// RST=0; Delay(2); RST=1; Delay(10); ////////////////////// /* RST rising edge edge 6800 interface /* /////////////////////////////////////////////// The hardware RESET is edge-sensitive. It is not level-sensitive. That is, either a falling edge or a rising edge on this pin can reset the chip. The voltage level after the reset pulse selects the type of interface timing. If the voltage level after the reset pulse stays at HIGH, interface timing for the 68-type microcontroller is selected. If the voltage level after the reset pulse stays at LOW, then interface timing for the 80-type microcontroller is selected. Therefore, a positive RESET pulse selects the 80-type microcontroller for interface and a negative RESET pulse selects the 68-type microcontroller for interface. *///////////////////////////////////////////////// Write_Instruction_L(0xE2); //Software RESET left half screen Write_Instruction_R(0xE2); //Software RESET right half screen Write_Instruction_L(0xA4); //Static Drive OFF Write_Instruction_R(0xA4); //Static Drive OFF Write_Instruction_L(0xA9); //Select Duty Register 1/32 Write_Instruction_R(0xA9); //Select Duty Register 1/32 Write_Instruction_L(0xA0); //Memory/Segment Mapping Register Normal Mapping Write_Instruction_R(0xA0); //Memory/Segment Mapping Register Normal Mapping Write_Instruction_L(0xC0); //Start line Write_Instruction_R(0xC0); //Start line Write_Instruction_L(0xAF); //Turn on display Write_Instruction_R(0xAF); //Turn on display } void Display_dot(unsigned char value,unsigned char value1) { unsigned char i,j; for(i=0;i<0x04;i++) { Set_Page_Address(i); Set_Column_Address_L(0x00); Set_Column_Address_R(0x00); for(j=0;j<32;j++) { Write_Data_L(value); Write_Data_L(value1); Write_Data_R(value1); Write_Data_R(value); } } return; } //Show some Chinese characters void show_chinese(void) { Display_One_Chinese(0,0,0,ft); Display_One_Chinese(0,16,1,ft); Display_One_Chinese(0,32,2,ft); Display_One_Chinese(0,48,3,ft); Display_One_Chinese(0,64,4,ft); Display_One_Chinese(0,80,5,ft); Display_One_Chinese(0,96,6,ft); Display_One_Chinese(0,112,7,ft); Display_One_Chinese(2,0+6,8,ft); Display_One_Chinese(2,16+6,9,ft); Display_One_Chinese(2,32+6,10,ft); Display_One_Chinese(2,48+6,11,ft); Display_One_Chinese(2,64+6,12,ft); Display_One_Chinese(2,80+6,13,ft); Display_One_Chinese(2,96+6,14,ft); Display_One_Chinese(2,112+6,15,ft); } //display one 16*16 dot character void Display_One_Chinese(unsigned char page, unsigned char col, unsigned char Character_coding, unsigned char ft[]) { unsigned char i,columnaddress=col; Set_Page_Address(page); if(col<61) { for(i=0;i<16;i++) { if(columnaddress<61) {Set_Column_Address_L(columnaddress); Write_Data_L(ft[Character_coding*32+i]); } else {Set_Column_Address_R(columnaddress-61); Write_Data_R(ft[Character_coding*32+i]); } columnaddress+=1; } columnaddress=col; Set_Page_Address(page+1); for(i=16;i<32;i++) { if(columnaddress<61) {Set_Column_Address_L(columnaddress); Write_Data_L(ft[Character_coding*32+i]); } else {Set_Column_Address_R(columnaddress-61); Write_Data_R(ft[Character_coding*32+i]); } columnaddress+=1; } } else { for(i=0;i<16;i++) { if(columnaddress<122) {Set_Column_Address_R(columnaddress-61); Write_Data_R(ft[Character_coding*32+i]); } else {if(page<=1) {Set_Page_Address(page+2); Set_Column_Address_L(columnaddress-122); Write_Data_L(ft[Character_coding*32+i]); } } columnaddress+=1; } columnaddress=col; Set_Page_Address(page+1); for(i=16;i<32;i++) { if(columnaddress<122) {Set_Column_Address_R(columnaddress-61); Write_Data_R(ft[Character_coding*32+i]); } else {if(page<=1){Set_Page_Address(page+3); Set_Column_Address_L(columnaddress-122); Write_Data_L(ft[Character_coding*32+i]); } } columnaddress+=1; } } } //display Picture void Display_Picture(unsigned char pic[]) { unsigned char i,j,num=0; for(i=0;i<0x04;i++) { Set_Page_Address(i); Set_Column_Address_L(0x00); Set_Column_Address_R(0x00); for(j=0;j<61;j++) //display left half screen { Write_Data_L(pic[i*122+j]); } for(j=61;j<122;j++) //display right half screen { Write_Data_R(pic[i*122+j]); } } return; } void main(void) { TMOD=0x01; //16 bit Timer TH0=0xff; //(65536-250)/256; Timer high byte 1s=1000000us 1000000/4000=250 TL0=0xE4; //(65536-250)%256; Timer low byte IE=0x83; // Turn on timer interrupt and external interrupt IP=0x02; //Timer interrupt priority response PT0=1; IT0=1; //External interrupt trigger TR0=1; //Turn on Timer P1=0xff; P2=0xff; P3=0xff; Initial(); Delay(50); while(1) { Display_dot(0xff,0xff); Delay(1000); Display_dot(0x00,0x00); //clear display Display_dot(0xAA,0x55); Delay(1000); Display_dot(0x55,0xAA); Delay(1000); Display_dot(0x55,0x55); Delay(1000); Display_dot(0xAA,0xAA); Delay(1000); Display_dot(0xFF,0x00); Delay(1000); Display_dot(0x00,0xFF); Delay(1000); Display_Picture(pic1); Delay(1000); Display_Picture(pic2); Delay(1000); show_chinese(); Delay(1000); } }