第 23 章点阵图形液晶模块及 c51 驱动

35
第 23 第第第第第第第第第第 C51 第第 23.1 128X64 第第第第第第第第第第 23.2 128X64 第第第第第 23.3 128X64 第第第第第第第第第第第

Upload: vina

Post on 15-Jan-2016

132 views

Category:

Documents


0 download

DESCRIPTION

第 23 章点阵图形液晶模块及 C51 驱动. 23.1 、 128X64 图形液晶特性及引脚功 23.2 、 128X64 控制 器指令 23.3 、 128X64 点阵图形液晶的应用举例. 128X64 点阵图形液晶模块的特性. 128X64 点阵图形液晶模块的特性 ( 1 ) +5V 电压,明暗对比度可调整 ( 2 )背光分为两种:冷光背光和 LED 背光 ( 3 )行驱动: COM1~COM64 为行地址,由芯片 HD61203 做行驱动 ( 4 )列驱动: Y1~Y128 为为列地址,由 2 颗芯片 HD61202 做列驱动 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 23 章点阵图形液晶模块及 C51 驱动

第 23 章点阵图形液晶模块及 C51 驱动

23.1 、 128X64 图形液晶特性及引脚功

23.2 、 128X64 控制器指令

23.3 、 128X64 点阵图形液晶的应用举例

Page 2: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的特性

128X64128X64 点阵图形液晶模块的特性点阵图形液晶模块的特性 (( 11 )) +5V+5V 电压,明暗对比度可调整电压,明暗对比度可调整 (( 22 )背光分为两种:冷光背光和)背光分为两种:冷光背光和 LEDLED 背光背光 (( 33 )行驱动:)行驱动: COM1~COM64COM1~COM64 为行地址,由为行地址,由

芯片芯片 HD61203HD61203 做行驱动做行驱动 (( 44 )列驱动:)列驱动: Y1~Y128Y1~Y128 为为列地址,由为为列地址,由 22 颗颗

芯片芯片 HD61202HD61202 做列驱动做列驱动 (( 55 )左半屏)左半屏 // 右半屏控制由右半屏控制由 CS1/CS2CS1/CS2 片选定。片选定。

CS1=1CS1=1 ,, CS2=0CS2=0 时选择左半屏: 时选择左半屏: CS1=0CS1=0 ,, CCS2=1S2=1 时选择右半屏时选择右半屏

Page 3: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的引脚及其功能

Page 4: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的控制器指令

Page 5: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的控制器指令

Page 6: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的控制器指令

Page 7: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的控制器指令

Page 8: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 例例 11 ;利用;利用 128X64128X64 点阵图形液晶显示汉字,第点阵图形液晶显示汉字,第 11 行显行显

示“朝辞白帝彩云间”,第示“朝辞白帝彩云间”,第 22 行显示“千里江陵一日行显示“千里江陵一日还”,第还”,第 33 行显示“两岸猿声啼不住”,第行显示“两岸猿声啼不住”,第 44 行显示行显示“轻舟已过万重山”其中“轻舟已过万重山”其中 33 、、 44 行反白显示,源程序如行反白显示,源程序如下:下: #include <REG51.H>#include <REG51.H>

#define uchar unsigned char#define uchar unsigned char #define uint unsigned int#define uint unsigned int sbit CS1=P2^4;sbit CS1=P2^4; sbit CS2=P2^3;sbit CS2=P2^3; sbit RS=P2^7;sbit RS=P2^7; sbit RW=P2^6;sbit RW=P2^6; sbit EN=P2^5;sbit EN=P2^5; sbit RST=P2^2;sbit RST=P2^2; #define DataPort P0#define DataPort P0

Page 9: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 void delay(unsigned long v);void delay(unsigned long v); void wcode(uchar c,uchar csl,uchar csr);void wcode(uchar c,uchar csl,uchar csr); void wdata(uchar c,uchar csl,uchar csr);void wdata(uchar c,uchar csl,uchar csr); void set_startline(uchar i);void set_startline(uchar i); void set_xy(uchar x,uchar y);void set_xy(uchar x,uchar y); void dison_off(uchar o);void dison_off(uchar o); void reset();void reset(); void lcd_init(void);void lcd_init(void); void lw(uchar x, uchar y, uchar dd);void lw(uchar x, uchar y, uchar dd); void display_hz(uchar x, uchar y, uchar n, uchar fb);void display_hz(uchar x, uchar y, uchar n, uchar fb); uchar code hz[];uchar code hz[]; /*******************************************************//*******************************************************/ void main(void)void main(void) {{ uchar loop;uchar loop; lcd_init();lcd_init(); delay(1000);delay(1000); while(1)while(1) {{ /************/************ 显示第一行(显示第一行( 88 个字)个字) ***********/***********/ for(loop=0;loop<8;loop++)for(loop=0;loop<8;loop++) {display_hz(2*loop,0,loop,0);{display_hz(2*loop,0,loop,0); display_hz(2*loop,0,loop,0);display_hz(2*loop,0,loop,0); display_hz(2*loop,0,loop,0);display_hz(2*loop,0,loop,0); display_hz(2*loop,0,loop,0);display_hz(2*loop,0,loop,0); display_hz(2*loop,0,loop,0);display_hz(2*loop,0,loop,0); display_hz(2*loop,0,loop,0);display_hz(2*loop,0,loop,0); display_hz(2*loop,0,loop,0);display_hz(2*loop,0,loop,0); display_hz(2*loop,0,loop,0);}display_hz(2*loop,0,loop,0);}

Page 10: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 /*************/************* 显示第二行(显示第二行( 88 个字)个字) **********/**********/ for(loop=0;loop<8;loop++)for(loop=0;loop<8;loop++) {display_hz(2*loop,2,loop+8,0);{display_hz(2*loop,2,loop+8,0); display_hz(2*loop,2,loop+8,0);display_hz(2*loop,2,loop+8,0); display_hz(2*loop,2,loop+8,0);display_hz(2*loop,2,loop+8,0); display_hz(2*loop,2,loop+8,0);display_hz(2*loop,2,loop+8,0); display_hz(2*loop,2,loop+8,0);display_hz(2*loop,2,loop+8,0); display_hz(2*loop,2,loop+8,0);display_hz(2*loop,2,loop+8,0); display_hz(2*loop,2,loop+8,0);display_hz(2*loop,2,loop+8,0); display_hz(2*loop,2,loop+8,0);}display_hz(2*loop,2,loop+8,0);} /**************/************** 显示第三行(显示第三行( 88 个字)个字) *************/*************/ for(loop=0;loop<8;loop++)for(loop=0;loop<8;loop++) {display_hz(2*loop,4,loop+16,1);{display_hz(2*loop,4,loop+16,1); display_hz(2*loop,4,loop+16,1);display_hz(2*loop,4,loop+16,1); display_hz(2*loop,4,loop+16,1);display_hz(2*loop,4,loop+16,1); display_hz(2*loop,4,loop+16,1);display_hz(2*loop,4,loop+16,1); display_hz(2*loop,4,loop+16,1);display_hz(2*loop,4,loop+16,1); display_hz(2*loop,4,loop+16,1);display_hz(2*loop,4,loop+16,1); display_hz(2*loop,4,loop+16,1);display_hz(2*loop,4,loop+16,1); display_hz(2*loop,4,loop+16,1);}display_hz(2*loop,4,loop+16,1);}

Page 11: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 /*************/************* 显示第四行(显示第四行( 88 个字)个字) *************/*************/ for(loop=0;loop<8;loop++)for(loop=0;loop<8;loop++) {display_hz(2*loop,6,loop+24,1);{display_hz(2*loop,6,loop+24,1); display_hz(2*loop,6,loop+24,1);display_hz(2*loop,6,loop+24,1); display_hz(2*loop,6,loop+24,1);display_hz(2*loop,6,loop+24,1); display_hz(2*loop,6,loop+24,1);display_hz(2*loop,6,loop+24,1); display_hz(2*loop,6,loop+24,1);display_hz(2*loop,6,loop+24,1); display_hz(2*loop,6,loop+24,1);display_hz(2*loop,6,loop+24,1); display_hz(2*loop,6,loop+24,1);display_hz(2*loop,6,loop+24,1); display_hz(2*loop,6,loop+24,1);}display_hz(2*loop,6,loop+24,1);} /*************************//*************************/ delay(10000);delay(10000); }} }} /*---------------------------------------------------------*//*---------------------------------------------------------*/ void delay(unsigned long v) void delay(unsigned long v) { { while(v!=0)v--; while(v!=0)v--; }}

Page 12: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 void lcd_busy(void) void lcd_busy(void) { { RS=0;RW=1;DataPort=0xff; RS=0;RW=1;DataPort=0xff; while(1){while(1){ EN=1;EN=1; if(DataPort<0x80) break; if(DataPort<0x80) break; EN=0;EN=0; } } EN=0; EN=0; } } /*-----------------------------------------------------------*//*-----------------------------------------------------------*/ void wcode(uchar c,uchar csl,uchar csr) void wcode(uchar c,uchar csl,uchar csr) {{ CS1=csl; CS1=csl; CS2=csr;CS2=csr; lcd_busy();lcd_busy(); RS=0;RS=0; RW=0;RW=0; DataPort=c;DataPort=c; EN=1;EN=1; EN=0;EN=0; }}

Page 13: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 void wdata(uchar c,uchar csl,uchar csr) void wdata(uchar c,uchar csl,uchar csr) {{ CS1=csl; CS1=csl; CS2=csr;CS2=csr; lcd_busy();lcd_busy(); RS=1;RS=1; RW=0;RW=0; DataPort=c; DataPort=c; EN=1;EN=1; EN=0;EN=0; }} /*------------------------------------------------------*//*------------------------------------------------------*/ void lw(uchar x, uchar y, uchar dd) void lw(uchar x, uchar y, uchar dd) {{ if(x>=64) if(x>=64) {set_xy(x-64,y);{set_xy(x-64,y); wdata(dd,0,1);}wdata(dd,0,1);} else else {set_xy(x,y);{set_xy(x,y); wdata(dd,1,0);}wdata(dd,1,0);} }} /*---------------------------------------------------*//*---------------------------------------------------*/ void set_startline(uchar i) void set_startline(uchar i) {{ i=0xc0+i;i=0xc0+i; wcode(i,1,1);wcode(i,1,1); }}

Page 14: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 void set_xy(uchar x,uchar y) void set_xy(uchar x,uchar y) {{ x=x+0x40; x=x+0x40; y=y+0xb8; y=y+0xb8; wcode(x,1,1); wcode(x,1,1); wcode(y,1,1); wcode(y,1,1); } } /*-------------------------------------------------------------*//*-------------------------------------------------------------*/ void dison_off(uchar o) void dison_off(uchar o) { { o=o+0x3e; o=o+0x3e; wcode(o,1,1); wcode(o,1,1); } } /*----------------------------------------------------------------------*//*----------------------------------------------------------------------*/ void reset() void reset() { { RST=0; RST=0; delay(20);delay(20); RST=1;RST=1; delay(20);delay(20); }}

Page 15: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 void lcd_init(void) void lcd_init(void) {uchar x,y; {uchar x,y; reset();reset(); set_startline(0);set_startline(0); dison_off(0);dison_off(0); for(y=0;y<8;y++)for(y=0;y<8;y++) {{ for(x=0;x<128;x++)lw(x,y,0);for(x=0;x<128;x++)lw(x,y,0); }} dison_off(1);dison_off(1); }} /*----------------------------------------------------------------------------*//*----------------------------------------------------------------------------*/ void display_hz(uchar xx, uchar yy, uchar n, uchar fb) void display_hz(uchar xx, uchar yy, uchar n, uchar fb) {{ uchar i,dx; uchar i,dx; for(i=0;i<16;i++)for(i=0;i<16;i++) {dx=hz[2*i+n*32];{dx=hz[2*i+n*32]; if(fb)dx=255-dx;if(fb)dx=255-dx; lw(xx*8+i,yy,dx);lw(xx*8+i,yy,dx); dx=hz[(2*i+1)+n*32];dx=hz[(2*i+1)+n*32]; if(fb)dx=255-dx;if(fb)dx=255-dx; lw(xx*8+i,yy+1,dx);lw(xx*8+i,yy+1,dx); }} }}

Page 16: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 uchar code hz[]=uchar code hz[]= {0x00,0x04,0x00,0x04,0x00,0x04,0xFE,0x04,0x92,0x04,0x92,0x04,0x92,0x04,0x92,0xFF,{0x00,0x04,0x00,0x04,0x00,0x04,0xFE,0x04,0x92,0x04,0x92,0x04,0x92,0x04,0x92,0xFF, 0x92,0x04,0x92,0x04,0x92,0x04,0x92,0x04,0xFE,0x04,0x00,0x04,0x00,0x04,0x00,0x00,/*"0x92,0x04,0x92,0x04,0x92,0x04,0x92,0x04,0xFE,0x04,0x00,0x04,0x00,0x04,0x00,0x00,/*" 早早 ",0*/",0*/

0x24,0x00,0x24,0x7E,0x24,0x22,0xFC,0x23,0x22,0x22,0x22,0x7E,0xA0,0x00,0x84,0x04,0x24,0x00,0x24,0x7E,0x24,0x22,0xFC,0x23,0x22,0x22,0x22,0x7E,0xA0,0x00,0x84,0x04, 0x94,0x04,0xA5,0x04,0x86,0xFF,0x84,0x04,0xA4,0x04,0x94,0x04,0x84,0x04,0x00,0x00,/*"0x94,0x04,0xA5,0x04,0x86,0xFF,0x84,0x04,0xA4,0x04,0x94,0x04,0x84,0x04,0x00,0x00,/*" 辞辞 ",1*/",1*/

0x00,0x00,0x00,0x00,0xF8,0x7F,0x08,0x21,0x08,0x21,0x0C,0x21,0x0B,0x21,0x08,0x21,0x00,0x00,0x00,0x00,0xF8,0x7F,0x08,0x21,0x08,0x21,0x0C,0x21,0x0B,0x21,0x08,0x21, 0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,/*"0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,/*" 白白 ",2*/",2*/

0x80,0x00,0x64,0x00,0x24,0x00,0x24,0x3F,0x2C,0x01,0x34,0x01,0x25,0x01,0xE6,0xFF,0x80,0x00,0x64,0x00,0x24,0x00,0x24,0x3F,0x2C,0x01,0x34,0x01,0x25,0x01,0xE6,0xFF, 0x24,0x01,0x24,0x11,0x34,0x21,0x2C,0x1F,0xA4,0x00,0x64,0x00,0x24,0x00,0x00,0x00,/*"0x24,0x01,0x24,0x11,0x34,0x21,0x2C,0x1F,0xA4,0x00,0x64,0x00,0x24,0x00,0x00,0x00,/*" 帝帝 ",3*/",3*/

0x82,0x20,0x8A,0x10,0xB2,0x08,0x86,0x06,0xDB,0xFF,0xA1,0x02,0x91,0x04,0x8D,0x58,0x82,0x20,0x8A,0x10,0xB2,0x08,0x86,0x06,0xDB,0xFF,0xA1,0x02,0x91,0x04,0x8D,0x58, 0x88,0x48,0x20,0x20,0x10,0x22,0x08,0x11,0x86,0x08,0x64,0x07,0x40,0x02,0x00,0x00,/*"0x88,0x48,0x20,0x20,0x10,0x22,0x08,0x11,0x86,0x08,0x64,0x07,0x40,0x02,0x00,0x00,/*" 彩彩 ",4*/",4*/

0x40,0x00,0x40,0x20,0x44,0x70,0x44,0x38,0x44,0x2C,0x44,0x27,0xC4,0x23,0xC4,0x31,0x40,0x00,0x40,0x20,0x44,0x70,0x44,0x38,0x44,0x2C,0x44,0x27,0xC4,0x23,0xC4,0x31, 0x44,0x10,0x44,0x12,0x46,0x14,0x46,0x18,0x64,0x70,0x60,0x20,0x40,0x00,0x00,0x00,/*"0x44,0x10,0x44,0x12,0x46,0x14,0x46,0x18,0x64,0x70,0x60,0x20,0x40,0x00,0x00,0x00,/*" 云云 ",5*/",5*/

0x00,0x00,0xF8,0xFF,0x01,0x00,0x06,0x00,0x00,0x00,0xF0,0x07,0x92,0x04,0x92,0x04,0x00,0x00,0xF8,0xFF,0x01,0x00,0x06,0x00,0x00,0x00,0xF0,0x07,0x92,0x04,0x92,0x04, 0x92,0x04,0x92,0x04,0xF2,0x07,0x02,0x40,0x02,0x80,0xFE,0x7F,0x00,0x00,0x00,0x00,/*"0x92,0x04,0x92,0x04,0xF2,0x07,0x02,0x40,0x02,0x80,0xFE,0x7F,0x00,0x00,0x00,0x00,/*" 间间 ",6*/",6*/

0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x38,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ,, ",7*/",7*/

0x40,0x00,0x40,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0xFC,0x7F,0x40,0x00,0x40,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0xFC,0x7F, 0x42,0x00,0x42,0x00,0x42,0x00,0x43,0x00,0x42,0x00,0x60,0x00,0x40,0x00,0x00,0x00,/*"0x42,0x00,0x42,0x00,0x42,0x00,0x43,0x00,0x42,0x00,0x60,0x00,0x40,0x00,0x00,0x00,/*" 千千 ",8*/",8*/

Page 17: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 0x00,0x40,0x00,0x40,0xFF,0x44,0x91,0x44,0x91,0x44,0x91,0x44,0x91,0x44,0xFF,0x7F,0x00,0x40,0x00,0x40,0xFF,0x44,0x91,0x44,0x91,0x44,0x91,0x44,0x91,0x44,0xFF,0x7F, 0x91,0x44,0x91,0x44,0x91,0x44,0x91,0x44,0xFF,0x44,0x00,0x40,0x00,0x40,0x00,0x00,/*"0x91,0x44,0x91,0x44,0x91,0x44,0x91,0x44,0xFF,0x44,0x00,0x40,0x00,0x40,0x00,0x00,/*" 里里 ",9*/",9*/

0x10,0x04,0x60,0x04,0x01,0x7E,0xC6,0x01,0x30,0x20,0x00,0x20,0x04,0x20,0x04,0x20,0x10,0x04,0x60,0x04,0x01,0x7E,0xC6,0x01,0x30,0x20,0x00,0x20,0x04,0x20,0x04,0x20, 0x04,0x20,0xFC,0x3F,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x00,0x20,0x00,0x00,/*"0x04,0x20,0xFC,0x3F,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x00,0x20,0x00,0x00,/*" 江江 ",10*/",10*/

0x00,0x00,0xFE,0xFF,0x22,0x02,0x5A,0x04,0x86,0x43,0x10,0x48,0x94,0x24,0x74,0x22,0x00,0x00,0xFE,0xFF,0x22,0x02,0x5A,0x04,0x86,0x43,0x10,0x48,0x94,0x24,0x74,0x22, 0x94,0x15,0x1F,0x09,0x34,0x15,0x54,0x23,0x94,0x60,0x94,0xC0,0x10,0x40,0x00,0x00,/*"0x94,0x15,0x1F,0x09,0x34,0x15,0x54,0x23,0x94,0x60,0x94,0xC0,0x10,0x40,0x00,0x00,/*" 陵陵 ",11*/",11*/

0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00, 0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xC0,0x00,0x80,0x00,0x00,0x00,/*"0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xC0,0x00,0x80,0x00,0x00,0x00,/*" 一一 ",12*/",12*/

0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10, 0x42,0x10,0x42,0x10,0x42,0x10,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"0x42,0x10,0x42,0x10,0x42,0x10,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" 日日 ",13*/",13*/

0x40,0x40,0x41,0x20,0xCE,0x1F,0x04,0x20,0x00,0x42,0x02,0x41,0x82,0x40,0x42,0x40,0x40,0x40,0x41,0x20,0xCE,0x1F,0x04,0x20,0x00,0x42,0x02,0x41,0x82,0x40,0x42,0x40, 0xF2,0x5F,0x0E,0x40,0x42,0x40,0x82,0x40,0x02,0x47,0x02,0x42,0x00,0x40,0x00,0x00,/*"0xF2,0x5F,0x0E,0x40,0x42,0x40,0x82,0x40,0x02,0x47,0x02,0x42,0x00,0x40,0x00,0x00,/*" 还还 ",14*/",14*/

0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x38,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ,, ",15*/",15*/

0x02,0x00,0xF2,0x7F,0x12,0x08,0x12,0x04,0x12,0x03,0xFE,0x00,0x92,0x10,0x12,0x09,0x02,0x00,0xF2,0x7F,0x12,0x08,0x12,0x04,0x12,0x03,0xFE,0x00,0x92,0x10,0x12,0x09, 0x12,0x06,0xFE,0x01,0x12,0x01,0x12,0x26,0x12,0x40,0xFB,0x3F,0x12,0x00,0x00,0x00,/*"0x12,0x06,0xFE,0x01,0x12,0x01,0x12,0x26,0x12,0x40,0xFB,0x3F,0x12,0x00,0x00,0x00,/*" 两两 ",16*/",16*/

Page 18: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 0x00,0x40,0x00,0x20,0xE0,0x1F,0x2E,0x04,0xA8,0x04,0xA8,0x04,0xA8,0x04,0xA8,0x04,0x00,0x40,0x00,0x20,0xE0,0x1F,0x2E,0x04,0xA8,0x04,0xA8,0x04,0xA8,0x04,0xA8,0x04, 0xAF,0xFF,0xA8,0x04,0xA8,0x04,0xA8,0x04,0xA8,0x04,0xAE,0x04,0x20,0x04,0x00,0x00,/*"0xAF,0xFF,0xA8,0x04,0xA8,0x04,0xA8,0x04,0xA8,0x04,0xAE,0x04,0x20,0x04,0x00,0x00,/*" 岸岸 ",17*/",17*/

0x20,0x04,0x12,0x42,0x0C,0x81,0x9C,0x40,0xE3,0x3F,0x10,0x10,0x14,0x08,0xD4,0xFD,0x20,0x04,0x12,0x42,0x0C,0x81,0x9C,0x40,0xE3,0x3F,0x10,0x10,0x14,0x08,0xD4,0xFD, 0x54,0x43,0x5F,0x27,0x54,0x09,0x54,0x11,0xD4,0x69,0x14,0xC4,0x10,0x44,0x00,0x00,/*"0x54,0x43,0x5F,0x27,0x54,0x09,0x54,0x11,0xD4,0x69,0x14,0xC4,0x10,0x44,0x00,0x00,/*" 猿猿 ",18*/",18*/

0x02,0x40,0x12,0x30,0xD2,0x0F,0x52,0x02,0x52,0x02,0x52,0x02,0x52,0x02,0xDF,0x03,0x02,0x40,0x12,0x30,0xD2,0x0F,0x52,0x02,0x52,0x02,0x52,0x02,0x52,0x02,0xDF,0x03, 0x52,0x02,0x52,0x02,0x52,0x02,0x52,0x02,0xD2,0x07,0x12,0x00,0x02,0x00,0x00,0x00,/*"0x52,0x02,0x52,0x02,0x52,0x02,0x52,0x02,0xD2,0x07,0x12,0x00,0x02,0x00,0x00,0x00,/*" 声声 ",19*/",19*/

0xFC,0x0F,0x04,0x02,0x04,0x02,0xFC,0x07,0x80,0x00,0x64,0x00,0x24,0x3F,0x2C,0x01,0xFC,0x0F,0x04,0x02,0x04,0x02,0xFC,0x07,0x80,0x00,0x64,0x00,0x24,0x3F,0x2C,0x01, 0x35,0x01,0xE6,0xFF,0x24,0x11,0x34,0x21,0xAC,0x1F,0x66,0x00,0x24,0x00,0x00,0x00,/*"0x35,0x01,0xE6,0xFF,0x24,0x11,0x34,0x21,0xAC,0x1F,0x66,0x00,0x24,0x00,0x00,0x00,/*" 啼啼 ",20*/",20*/

0x00,0x00,0x02,0x08,0x02,0x04,0x02,0x02,0x02,0x01,0x82,0x00,0x42,0x00,0xFE,0x7F,0x00,0x00,0x02,0x08,0x02,0x04,0x02,0x02,0x02,0x01,0x82,0x00,0x42,0x00,0xFE,0x7F, 0x06,0x00,0x42,0x00,0xC2,0x00,0x82,0x01,0x02,0x07,0x03,0x02,0x02,0x00,0x00,0x00,/*"0x06,0x00,0x42,0x00,0xC2,0x00,0x82,0x01,0x02,0x07,0x03,0x02,0x02,0x00,0x00,0x00,/*" 不不 ",21*/",21*/

0x40,0x00,0x20,0x00,0xF0,0x7F,0x0C,0x00,0x03,0x20,0x08,0x21,0x08,0x21,0x09,0x21,0x40,0x00,0x20,0x00,0xF0,0x7F,0x0C,0x00,0x03,0x20,0x08,0x21,0x08,0x21,0x09,0x21, 0x0A,0x21,0xFC,0x3F,0x08,0x21,0x08,0x21,0x8C,0x21,0x08,0x31,0x00,0x20,0x00,0x00,/*"0x0A,0x21,0xFC,0x3F,0x08,0x21,0x08,0x21,0x8C,0x21,0x08,0x31,0x00,0x20,0x00,0x00,/*" 住住 ",22*/",22*/

0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x38,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ,, ",23*/",23*/

0xC4,0x08,0xB4,0x08,0x8F,0x08,0xF4,0xFF,0x84,0x04,0x84,0x44,0x04,0x41,0x82,0x41,0xC4,0x08,0xB4,0x08,0x8F,0x08,0xF4,0xFF,0x84,0x04,0x84,0x44,0x04,0x41,0x82,0x41, 0x42,0x41,0x22,0x41,0x12,0x7F,0x2A,0x41,0x46,0x41,0xC2,0x41,0x00,0x41,0x00,0x00,/*"0x42,0x41,0x22,0x41,0x12,0x7F,0x2A,0x41,0x46,0x41,0xC2,0x41,0x00,0x41,0x00,0x00,/*" 轻轻 ",24*/",24*/

0x80,0x00,0x80,0x80,0x80,0x40,0x80,0x30,0xFC,0x0F,0x84,0x00,0x86,0x02,0x95,0x04,0x80,0x00,0x80,0x80,0x80,0x40,0x80,0x30,0xFC,0x0F,0x84,0x00,0x86,0x02,0x95,0x04, 0xA4,0x0C,0x84,0x40,0x84,0x80,0xFC,0x7F,0x80,0x00,0x80,0x00,0x80,0x00,0x00,0x00,/*"0xA4,0x0C,0x84,0x40,0x84,0x80,0xFC,0x7F,0x80,0x00,0x80,0x00,0x80,0x00,0x00,0x00,/*" 舟舟 ",25*/",25*/

0x00,0x00,0x00,0x00,0xE2,0x3F,0x42,0x20,0x42,0x20,0x42,0x20,0x42,0x20,0x42,0x20,0x00,0x00,0x00,0x00,0xE2,0x3F,0x42,0x20,0x42,0x20,0x42,0x20,0x42,0x20,0x42,0x20, 0x42,0x20,0x42,0x20,0x42,0x20,0x7E,0x20,0x00,0x20,0x00,0x3C,0x00,0x10,0x00,0x00,/*"0x42,0x20,0x42,0x20,0x42,0x20,0x7E,0x20,0x00,0x20,0x00,0x3C,0x00,0x10,0x00,0x00,/*" 已已 ",26*/",26*/

Page 19: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 0x80,0x40,0x81,0x20,0x8E,0x1F,0x04,0x20,0x00,0x20,0x10,0x40,0x50,0x40,0x90,0x43,0x80,0x40,0x81,0x20,0x8E,0x1F,0x04,0x20,0x00,0x20,0x10,0x40,0x50,0x40,0x90,0x43, 0x10,0x41,0x10,0x48,0x10,0x50,0xFF,0x4F,0x10,0x40,0x10,0x40,0x10,0x40,0x00,0x00,/*"0x10,0x41,0x10,0x48,0x10,0x50,0xFF,0x4F,0x10,0x40,0x10,0x40,0x10,0x40,0x00,0x00,/*" 过过 ",",

27*/27*/

0x00,0x00,0x02,0x40,0x02,0x20,0x02,0x10,0x02,0x0C,0x82,0x03,0x7E,0x00,0x22,0x00,0x00,0x00,0x02,0x40,0x02,0x20,0x02,0x10,0x02,0x0C,0x82,0x03,0x7E,0x00,0x22,0x00, 0x22,0x20,0x22,0x60,0x22,0x20,0xF2,0x1F,0x22,0x00,0x02,0x00,0x02,0x00,0x00,0x00,/*"0x22,0x20,0x22,0x60,0x22,0x20,0xF2,0x1F,0x22,0x00,0x02,0x00,0x02,0x00,0x00,0x00,/*" 万万 ",",

28*/28*/

0x08,0x40,0x08,0x40,0x0A,0x48,0xEA,0x4B,0xAA,0x4A,0xAA,0x4A,0xAA,0x4A,0xFF,0x7F,0x08,0x40,0x08,0x40,0x0A,0x48,0xEA,0x4B,0xAA,0x4A,0xAA,0x4A,0xAA,0x4A,0xFF,0x7F, 0xA9,0x4A,0xA9,0x4A,0xA9,0x4A,0xE9,0x4B,0x08,0x48,0x08,0x40,0x08,0x40,0x00,0x00,/0xA9,0x4A,0xA9,0x4A,0xA9,0x4A,0xE9,0x4B,0x08,0x48,0x08,0x40,0x08,0x40,0x00,0x00,/

*"*" 重重 ",29*/",29*/

0x00,0x00,0x00,0x20,0xE0,0x7F,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0xFF,0x3F,0x00,0x00,0x00,0x20,0xE0,0x7F,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0xFF,0x3F, 0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0xE0,0x7F,0x00,0x00,0x00,0x00,/*"0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0xE0,0x7F,0x00,0x00,0x00,0x00,/*" 山山 ",",

30*/30*/

0x00,0x00,0x00,0x18,0x00,0x24,0x00,0x24,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x24,0x00,0x24,0x00,0x18,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/*" 。。 ",",

31*/31*/

Page 20: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 例例 22 :在:在 128X64128X64 点阵图形上显示图像,这幅图像为小舢舨,源程序如下:点阵图形上显示图像,这幅图像为小舢舨,源程序如下: #include <REG51.H>#include <REG51.H> #include<math.h>#include<math.h> #define uchar unsigned char#define uchar unsigned char #define uint unsigned int#define uint unsigned int sbit CS1=P2^4;sbit CS1=P2^4; sbit CS2=P2^3;sbit CS2=P2^3; sbit RS=P2^7;sbit RS=P2^7; sbit RW=P2^6;sbit RW=P2^6; sbit EN=P2^5;sbit EN=P2^5; sbit RST=P2^2;sbit RST=P2^2; #define DataPort P0#define DataPort P0 /**********/********** 常用操作命令和参数定义常用操作命令和参数定义 ***********/***********/ #define DISPON 0x3f #define DISPON 0x3f //// 显示屏开显示屏开 #define DISPOFF 0x3e#define DISPOFF 0x3e //// 显示屏关显示屏关 #define DISPFIRST 0xc0#define DISPFIRST 0xc0 //// 起始行显示定义起始行显示定义

Page 21: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 #define SETX 0x40#define SETX 0x40 //X//X 定位(页)定位(页) #define SETY 0xb8#define SETY 0xb8 //Y//Y 定位(列)定位(列) #define Lcdbusy 0x80#define Lcdbusy 0x80 //LCM//LCM 忙判断定义忙判断定义 /***********************************************//***********************************************/ #define MODL 0x00#define MODL 0x00 //// 左区左区 #define MODM 0x40 #define MODM 0x40 //// 左区与中区分界左区与中区分界 //#define MODR 0x80 //#define MODR 0x80 //// 中区与右区分界中区与右区分界 #define LCMLIMIT 0x80#define LCMLIMIT 0x80 //// 中区的边界中区的边界 //#define LCMLIMIT 0xc0//#define LCMLIMIT 0xc0 //// 右区的边界(这里不用)右区的边界(这里不用) /*************************************************//*************************************************/ uchar col,row,cbyte; uchar col,row,cbyte; //// 列、行、数据的变量定义 列、行、数据的变量定义

bit xy;bit xy; //// 画线标志,画线标志, "1""1" 水平水平

线,线, "0""0" 垂直线。垂直线。 /**************************************************//**************************************************/ void Lcminit(void);void Lcminit(void); //// 液晶模块初始化子函数液晶模块初始化子函数 void Delay(unsigned long MS);void Delay(unsigned long MS); //// 延时子函数延时子函数 void lcdbusyL(void);void lcdbusyL(void); //// 左区判忙子函数左区判忙子函数 void lcdbusyM(void);void lcdbusyM(void); //// 中区判忙子函数中区判忙子函数 //void lcdbusyR(void);//void lcdbusyR(void); //// 右区判忙子函数(这里不用)右区判忙子函数(这里不用) void Wrdata(uchar X); //void Wrdata(uchar X); // 写数据至写数据至 LCM LCM void Lcmcls(void); void Lcmcls(void); //LCM//LCM 清屏清屏 void Lcmclsxx(void); //LCMvoid Lcmclsxx(void); //LCM 全屏置黑 全屏置黑 void wtcom(void); //void wtcom(void); // 公用判忙等待子函数公用判忙等待子函数

Page 22: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 void Locatexy(void); void Locatexy(void); // // 光标定义 光标定义 void WrcmdL(uchar X);void WrcmdL(uchar X); //// 写命令至左区写命令至左区 void WrcmdM(uchar X);void WrcmdM(uchar X); //// 写命令至中区写命令至中区 //void WrcmdR(uchar X);//void WrcmdR(uchar X); //// 写命令至右区(这里不写命令至右区(这里不

用)用) void Rddata(void); void Rddata(void); //// 读读 LCMLCM 状态子函数状态子函数 void Linehv(uchar length); void Linehv(uchar length); //// 水平、垂直画线子函数水平、垂直画线子函数 void point(void); void point(void); //// 画点子函数画点子函数 void Linexy(uchar endx, uchar endy); void Linexy(uchar endx, uchar endy); //// 画斜线子函数画斜线子函数 /************************/************************ 复位子函数复位子函数 *************************/*************************/ void reset()void reset() //// 复位子函数复位子函数 {{ //// 复位子函复位子函

数开始数开始 RST=0;RST=0; //// 复位端置复位端置 00 Delay(20);Delay(20); //// 延时延时 20ms20ms RST=1;RST=1; //// 复位端置复位端置 11 Delay(20);Delay(20); //// 延时延时 20ms20ms }} //// 复位子函复位子函

数结束数结束 /*********************/********************* 主函数主函数 **********************/**********************/

Page 23: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 void main(void)void main(void) {{ //// 主函数开始主函数开始 col=0;col=0; //// 定位定位 00 列、列、 00 页页 row=0;row=0; Delay(10);Delay(10); //// 延时一会延时一会 Lcminit();Lcminit(); //// 液晶模块初始化液晶模块初始化 Delay(1000);Delay(1000); //// 延时一会延时一会 /***********/*********** 以下使用画直线与斜线的方法,画出一条小舢舨以下使用画直线与斜线的方法,画出一条小舢舨 *********/*********/ /****************/**************** 先画出船上建筑先画出船上建筑 **************/**************/ col=0;col=0; //// 定位定位 xx 方位方位 00 、、 yy 方位方位

3232 row=32;row=32; xy=1;xy=1; //// 水平线水平线 Linehv(127);Linehv(127); //// 画线,长度画线,长度 127127 /*----------------------------------------------*//*----------------------------------------------*/ col=33;col=33; //// 定位定位 xx 方位方位 3333 、、 yy 方方

位位 4848 row=48;row=48; xy=1;xy=1; //// 水平线水平线 Linehv(30);Linehv(30); //// 画线,长度画线,长度 3030 col=36;col=36; //// 定位定位 xx 方位方位 3636 、、 yy 方方

位位 3232 row=32;row=32; xy=0;xy=0; //// 垂直线垂直线 Linehv(16);Linehv(16); //// 画线,长度画线,长度 1616

Page 24: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 col=10;col=10; //// 定位定位 xx 方位方位 1010 、、 yy 方位方位 3232 row=32;row=32; xy=0;xy=0; //// 垂直线垂直线 Linehv(27);Linehv(27); //// 画线,长度画线,长度 2727 /************/************ 以下画出船底的弧形以下画出船底的弧形 ***********/***********/ col=0;col=0; //// 定位定位 xx 方位方位 00 、、 yy 方位方位 3232 row=32;row=32; Linexy(10,16);Linexy(10,16); //// 画斜线,终点为画斜线,终点为 xx 方位方位 1010 、、 yy 方位方位 1616 col=10;col=10; //// 定位定位 xx 方位方位 1010 、、 yy 方位方位 1616 row=16;row=16; Linexy(30,8);Linexy(30,8); //// 画斜线,终点为画斜线,终点为 xx 方位方位 3030 、、 yy 方位方位 88 col=30;col=30; //// 定位定位 xx 方位方位 3030 、、 yy 方位方位 88 row=8;row=8; Linexy(64,5);Linexy(64,5); //// 画斜线,终点为画斜线,终点为 xx 方位方位 6464 、、 yy 方位方位 55 /*-----------------------------------------------------------------*//*-----------------------------------------------------------------*/ col=65;col=65; //// 定位定位 xx 方位方位 6565 、、 yy 方位方位 55 row=5;row=5; Linexy(97,8);Linexy(97,8); //// 画斜线,终点为画斜线,终点为 xx 方位方位 9797 、、 yy 方位方位 88 col=97;col=97; //// 定位定位 xx 方位方位 9797 、、 yy 方位方位 88 row=8;row=8; Linexy(117,16);Linexy(117,16); //// 画斜线,终点为画斜线,终点为 xx 方位方位 117117 、、 yy 方位方位 1616 col=117;col=117; //// 定位定位 xx 方位方位 117117 、、 yy 方位方位 1616 row=16;row=16; Linexy(127,32);Linexy(127,32); //// 画斜线,终点为画斜线,终点为 xx 方位方位 127127 、、 yy 方位方位 3232 /*----------------------------------/*---------------------------------- 画舢舨结束画舢舨结束 ------------------------------------*/------------------------------------*/

Page 25: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 while(1);while(1); //// 死循环死循环

}} //// 主函数结主函数结束束

/*************************/************************* 画斜线子函数画斜线子函数 ************************/************************/ void Linexy(uchar endx, uchar endy) void Linexy(uchar endx, uchar endy) {{ register uchar t;register uchar t; char xerr=0,yerr=0,delta_x,delta_y,distance;char xerr=0,yerr=0,delta_x,delta_y,distance; uchar incx,incy;uchar incx,incy; delta_x=endx-col;delta_x=endx-col; delta_y=endy-row; delta_y=endy-row; if(delta_x>0)incx=1;if(delta_x>0)incx=1; else if(delta_x==0)incx=0;else if(delta_x==0)incx=0; else incx=-1;else incx=-1; if(delta_y>0)incy=1;if(delta_y>0)incy=1; else if(delta_y==0)incy=0;else if(delta_y==0)incy=0; else incy=-1;else incy=-1; delta_x=cabs(delta_x);delta_x=cabs(delta_x); delta_y=cabs(delta_y);delta_y=cabs(delta_y); if(delta_x>delta_y) distance=delta_x; if(delta_x>delta_y) distance=delta_x; else distance=delta_y;else distance=delta_y;

Page 26: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 /*-----------/*----------- 开始画线开始画线 -------------*/-------------*/ for(t=0;t<=distance+1;t++){for(t=0;t<=distance+1;t++){ point();point(); xerr+=delta_x;xerr+=delta_x; yerr+=delta_y;yerr+=delta_y; if(xerr>distance){if(xerr>distance){ xerr-=distance;xerr-=distance; col+=incx;col+=incx; }} if(yerr>distance){if(yerr>distance){ yerr-=distance;yerr-=distance; row+=incy;row+=incy; }} }} }} /*********************/********************* 画水平、垂直线子函数画水平、垂直线子函数 ***********************/***********************/ void Linehv(uchar length) /*void Linehv(uchar length) /* 函数名为函数名为 LinehvLinehv 的画水平、垂直线子函数,定义的画水平、垂直线子函数,定义 length length 为线段长度的无符号字符型变量。为线段长度的无符号字符型变量。 */*/ {{ //// 画水平、垂直线子函数画水平、垂直线子函数

开始开始 uchar xs,ys; //uchar xs,ys; // 定义定义 xsxs 、、 ys ys 为无符号字符型变量。为无符号字符型变量。

if(xy){ys=col;if(xy){ys=col;

Page 27: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 //// 若若 xyxy 为为 11 ,则为水平划线,则为水平划线 for(xs=0;xs<length;xs++){for(xs=0;xs<length;xs++){ col=ys+xs;col=ys+xs; point();}point();} }} else {xs=row;else {xs=row; //// 否则为垂直划线否则为垂直划线 for(ys=0;ys<length;ys++)for(ys=0;ys<length;ys++) {{ row=xs+ys;row=xs+ys; point();}point();} }} }} //// 画水平、垂直线画水平、垂直线

子函数结束子函数结束 /**********************/********************** 画点子函数画点子函数 ***************************/***************************/ void point(void)void point(void) //// 画点子函数画点子函数 {{ //// 画点子函数开始画点子函数开始 uchar x1,y1,x,y;uchar x1,y1,x,y; //// 定义定义 x1x1 、、 y1y1 、、 xx 、、 y y 为无符号字符型变量为无符号字符型变量 x1=col;x1=col; //x//x 方向座标方向座标 colcol 赋予赋予 x1x1 (暂(暂

存)存) y1=row;y1=row; //y//y 方向座标方向座标 rowrow 赋予赋予 y1y1 (暂(暂

存)存) row=y1>>3;row=y1>>3; //y1//y1 右移右移 33 位后赋予位后赋予 rowrow ,获得,获得 yy 方向的页地方向的页地

址址 Rddata();Rddata(); //// 读取列(读取列( xx )地址、页()地址、页( yy ))

地址处的数据地址处的数据 y=y1&0x07;y=y1&0x07; //// 计算出该页(计算出该页( 11 字节)内的字节)内的 yy 轴点位置地址轴点位置地址 x=0x01;x=0x01; x=x<<y;x=x<<y; //// 移入所画点移入所画点 Wrdata(cbyte|x);Wrdata(cbyte|x);

Page 28: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 //// 画上屏幕画上屏幕 col=x1;col=x1; //// 恢复恢复 xx 、、 yy 座标座标 row=y1;row=y1; }} //// 画点子函数结画点子函数结

束束 /***************/*************** 全屏幕清屏子函数全屏幕清屏子函数 **********************/**********************/ void Lcmcls(void)void Lcmcls(void) //// 函数名为函数名为 LcmclsLcmcls 的全屏幕清屏子函数的全屏幕清屏子函数 {{ //// 函数开始函数开始 for(row=0;row<8;row++)for(row=0;row<8;row++) {for(col=0;col<LCMLIMIT;col++){for(col=0;col<LCMLIMIT;col++) Wrdata(0);}Wrdata(0);} //// 将数据将数据 00 写到屏幕写到屏幕 }} //// 函数结束函数结束

/**********************/********************** 全屏幕置黑子函数全屏幕置黑子函数 **********************/**********************/ void Lcmclsxx(void)void Lcmclsxx(void) //// 函数名为函数名为 LcmclsxxLcmclsxx 的全屏幕置黑子函数的全屏幕置黑子函数 {{ //// 函数开始函数开始 for(row=0;row<8;row++)for(row=0;row<8;row++) for(col=0;col<LCMLIMIT;col++)for(col=0;col<LCMLIMIT;col++) Wrdata(255);Wrdata(255); //// 将将 88 位数据全位数据全 11 (( 255255 )写到屏幕)写到屏幕 }} //// 函数结束函数结束 /*************/************* 读取液晶读取液晶 xx 列、列、 yy 页座标处的数据至全局变量页座标处的数据至全局变量 cbytecbyte 中中 ************/ ************/ void Rddata(void) void Rddata(void) //// 函数名为函数名为 RddataRddata 的子函数 的子函数 {{ //// 函数开始函数开始 Locatexy();Locatexy(); //// 座标定位座标定位 DataPort=0xff;DataPort=0xff; //LCM//LCM 口置全口置全 11 RS=1;RS=1; //// 选择数据寄存器选择数据寄存器 RW=1;RW=1;

Page 29: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 EN=1;EN=1; //// 使能使能 cbyte=DataPort;cbyte=DataPort; //// 虚读一次虚读一次 EN=0;EN=0; //// 禁能禁能 Locatexy();Locatexy(); //// 座标定位座标定位 DataPort=0xff;DataPort=0xff; //LCM//LCM 口置全口置全 11 RS=1;RS=1; //// 选择数据寄存器选择数据寄存器 RW=1;RW=1; //// 选择读选择读 EN=1;EN=1; //// 使能使能 cbyte=DataPort;cbyte=DataPort; //// 读取数据(真读)读取数据(真读) EN=0;EN=0; //// 禁能禁能 }} //// 函数结束函数结束 /**************/************** 将数据将数据 XX 写入液晶写入液晶 xx 列、列、 yy 页座标处页座标处 ***********/***********/ void Wrdata(uchar X) //void Wrdata(uchar X) // 函数名为函数名为 Wrdata Wrdata 的子函数,定义的子函数,定义 XX 为无符号字符型变量 为无符号字符型变量

{{ //// 函数开始函数开始 Locatexy();Locatexy(); //// 座标定位座标定位 RS=1;RS=1; //// 选择数据寄存器选择数据寄存器 RW=0;RW=0; //// 选择写选择写 DataPort=X;DataPort=X; //// 将数据将数据 XX 写入写入 LCMLCM 口口 EN=1;EN=1; //// 使能使能 EN=0;EN=0; //// 禁能禁能 }} //// 函数结束函数结束

Page 30: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 /******************/****************** 写命令至左区写命令至左区 ********************/********************/ void WrcmdL(uchar X)void WrcmdL(uchar X) //// 函数名为函数名为 WrcmdL WrcmdL 的子函数,定义的子函数,定义 XX 为无符号字符型变量为无符号字符型变量 {{ //// 函数开始函数开始 lcdbusyL();lcdbusyL(); //// 调用左区判忙子函数调用左区判忙子函数 RS=0;RS=0; //// 选择指令寄存器选择指令寄存器 RW=0;RW=0; //// 选择写选择写 DataPort=X;DataPort=X; //// 数据输出至数据口数据输出至数据口 EN=1;EN=0;EN=1;EN=0; //// 使能,禁能使能,禁能 }} //// 函数结束函数结束

/********************/******************** 写命令至中区写命令至中区 ************************/************************/ void WrcmdM(uchar X)void WrcmdM(uchar X)//// 函数名为函数名为 WrcmdMWrcmdM 的子函数,定义的子函数,定义 XX 为无符号字符型变量为无符号字符型变量 {{ //// 函数开始函数开始 lcdbusyM();lcdbusyM(); //// 调用中区判忙子函数调用中区判忙子函数 RS=0;RS=0; //// 选择指令寄存器选择指令寄存器 RW=0;RW=0; //// 选择写选择写 DataPort=X;DataPort=X; //// 数据输出至数据口数据输出至数据口 EN=1;EN=0;EN=1;EN=0; //// 使能,禁能使能,禁能 }} //// 函数结束函数结束 /**************/************** 写命令至右区写命令至右区 ******************************** void WrcmdR(uchar X) //void WrcmdR(uchar X) // 函数名为函数名为 WrcmdRWrcmdR 的子函数,定义的子函数,定义 XX 为无符号字符型变量为无符号字符型变量 {{ //// 函数开始函数开始 lcdbusyR();lcdbusyR(); //// 调用右区判忙子函数调用右区判忙子函数 RS=0;RS=0; //// 选择指令寄存器选择指令寄存器 RW=0;RW=0; //// 选择写选择写 DataPort=X;DataPort=X;

Page 31: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 //// 数据输出至数据口数据输出至数据口 EN=1;EN=0;EN=1;EN=0; //// 使能,禁能使能,禁能 }} //// 函数结束函数结束 ********************************************** 左区判忙子函数左区判忙子函数 ***********************/***********************/ void lcdbusyL(void)void lcdbusyL(void) //// 函数名为函数名为 lcdbusyL lcdbusyL 的左区判忙子函数的左区判忙子函数 {{ //// 函数开始函数开始 CS1=1;CS2=0;CS1=1;CS2=0; //// 选中左区选中左区 wtcom();wtcom(); //// 调用判忙等待子函数调用判忙等待子函数 }} //// 函数结束函数结束

void lcdbusyM(void)void lcdbusyM(void) //// 函数名为函数名为 lcdbusyMlcdbusyM 的中区判忙子函数的中区判忙子函数 {{ //// 函数开始函数开始 CS1=0;CS2=1;CS1=0;CS2=1; //// 选中中区选中中区 wtcom();wtcom(); //// 调用判忙等待子函数调用判忙等待子函数 }} //// 函数结束函数结束

/*void lcdbusyR(void)/*void lcdbusyR(void) //// 函数名为函数名为 lcdbusyRlcdbusyR 的右区判忙子函数(这里不用)的右区判忙子函数(这里不用) {{ //// 函数开始函数开始 CS1=?;CS2=?;CS1=?;CS2=?; //// 根据所用根据所用 LCMLCM 器件决定取值器件决定取值 wtcom();wtcom(); //// 调用判忙等待子函数调用判忙等待子函数 }*/}*/

Page 32: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 void wtcom(void)void wtcom(void) //// 函数名为函数名为 wtcom wtcom 的公用判的公用判

忙等待子函数忙等待子函数 {{ //// 函数开始函数开始 RS=0;RS=0; //// 选择指令寄存器选择指令寄存器 RW=1;RW=1; //// 选择读选择读 DataPort=0xff;DataPort=0xff; //// 数据数据 0xff0xff 输出至数据输出至数据

口口 EN=1;EN=1; //// 使能使能 while(DataPort&Lcdbusy);//while(DataPort&Lcdbusy);// 若若 LCMLCM 忙则等待忙则等待 EN=0;EN=0; //// 禁能禁能 }} //// 函数结束函数结束 /************/************ 根据设定的根据设定的 colcol 、、 rowrow 座标数据,定位座标数据,定位 LCMLCM 下一个下一个

操作单元操作单元 ************/************/ void Locatexy(void)void Locatexy(void) //// 函数名为函数名为 Locatexy Locatexy 的子函数的子函数 {{ //// 函数开始函数开始 uchar x,y;uchar x,y; //// 定义定义 x,yx,y 为无符号字为无符号字

符型变量符型变量

Page 33: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 switch(col&0xc0)switch(col&0xc0) //// 限定限定 xx 列最大值为列最大值为 192192 {{ case 0:{lcdbusyL();break;}case 0:{lcdbusyL();break;} //// 判左区忙判左区忙 case 0x40:{lcdbusyM();break;}case 0x40:{lcdbusyM();break;} //// 判中区忙判中区忙 //case 0x80:{lcdbusyR();break;}//case 0x80:{lcdbusyR();break;} //// 判右区忙(这里不用)判右区忙(这里不用) }}

x=col&0x3f|SETX;x=col&0x3f|SETX; //// 获得获得 xx 列(列( 0~630~63 )地址)地址 y=row&0x07|SETY;y=row&0x07|SETY; //// 获得获得 yy 页(页( 0~70~7 )地址)地址

wtcom();wtcom(); //// 调用判忙等待子函数调用判忙等待子函数 RS=0;RS=0; //// 选择指令寄存器选择指令寄存器 RW=0;RW=0; //// 选择写选择写 DataPort=y;DataPort=y; //y//y 页地址传送至页地址传送至 LCMLCM 口口 EN=1;EN=0;EN=1;EN=0; //// 使能,禁能使能,禁能 wtcom();wtcom(); //// 调用判忙等待子函数调用判忙等待子函数 RS=0;RS=0; //// 选择指令寄存器选择指令寄存器 RW=0;RW=0; //// 选择写选择写 DataPort=x;DataPort=x; //x//x 列地址传送至列地址传送至 LCMLCM 口口 EN=1;EN=0;EN=1;EN=0; //// 使能,禁能使能,禁能 }} //// 函数结束函数结束

Page 34: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例 void Lcminit(void)void Lcminit(void) //// 函数名为函数名为 LcminitLcminit 的液晶屏初始化子函数的液晶屏初始化子函数 {{ //// 函数开始函数开始 reset();reset(); //// 调用复位子函数调用复位子函数 cbyte=DISPFIRST;cbyte=DISPFIRST; //// 定义起始行为定义起始行为 00 行行 WrcmdL(cbyte);WrcmdL(cbyte); //// 写命令至左区写命令至左区 WrcmdM(cbyte);WrcmdM(cbyte); //// 写命令至中区写命令至中区 //WrcmdR(cbyte);//WrcmdR(cbyte); //// 写命令至右区(这里不用)写命令至右区(这里不用) cbyte=DISPOFF;cbyte=DISPOFF; //// 关闭显示屏关闭显示屏 WrcmdL(cbyte);WrcmdL(cbyte); //// 写命令至左区写命令至左区 WrcmdM(cbyte);WrcmdM(cbyte); //// 写命令至中区写命令至中区 //WrcmdR(cbyte);//WrcmdR(cbyte); //// 写命令至右区(这里不用)写命令至右区(这里不用) cbyte=DISPON;cbyte=DISPON; //// 打开显示屏打开显示屏 WrcmdL(cbyte);WrcmdL(cbyte); //// 写命令至左区写命令至左区 WrcmdM(cbyte);WrcmdM(cbyte); //// 写命令至中区写命令至中区 //WrcmdR(cbyte);//WrcmdR(cbyte); //// 写命令至右区(这里不用)写命令至右区(这里不用) Lcmcls();Lcmcls(); //// 清屏清屏 Delay(10000);Delay(10000); //// 延时一会延时一会 Lcmclsxx();Lcmclsxx(); //// 全屏置黑全屏置黑 Delay(10000);Delay(10000); //// 延时一会延时一会 Lcmcls();Lcmcls(); //// 清屏清屏 Delay(30000);Delay(30000); //// 延时一会延时一会 col=0;col=0; //// 定位定位 xx 方向为方向为 00 列列 row=0;row=0; //// 定位定位 yy 方向为方向为 00 页页 Locatexy();Locatexy(); //// 定位定位 00 列、列、 00 页为页为 LCMLCM 下一个操作单元下一个操作单元 }}

Page 35: 第 23 章点阵图形液晶模块及 C51 驱动

128X64点阵图形液晶模块的应用举例

void Delay(unsigned long MS)void Delay(unsigned long MS) {{ while(MS!=0)MS--;while(MS!=0)MS--; }}