12864点阵型液晶显示控制设计 下载本文

单片机设计实训

0x3e,0x86,0x86,0x06,0xfe,0x04,0x00,0x00,/*图4*/ /*94*/ 0x00,0x00,0x00,0x7f,0x33,0x33,0xff,0xff,

0x00,0x00,0x00,0xc7,0x1c,0x00,0xc7,0xcc, 0x1b,0x1b,0x33,0xf3,0xc3,0x00,0x00,0x00,

0x30,0x01,0x07,0x1c,0xf8,0x00,0x00,0x00,/*形5*/ /*98*/ 0x00,0x00,0x01,0x01,0x01,0x19,0x1f,0x18, 0x00,0x00,0x80,0xf0,0xfc,0x80,0xfc,0x0c, 0x1f,0x08,0x12,0x76,0xc4,0x00,0x00,0x00,

0xf8,0x08,0x4c,0x67,0x23,0x01,0x00,0x00,/*点6*/ /*9c*/ 0x00,0x00,0x00,0xfd,0x67,0x68,0x79,0x6f, 0x00,0x00,0x60,0x60,0xff,0xe0,0xb0,0xfc, 0x6d,0x7b,0x67,0x60,0x60,0x40,0x00,0x00,

0xb0,0xfc,0xff,0x30,0x30,0x30,0x00,0x00,/*阵7*/ /*a0*/ 0x00,0x10,0x30,0x70,0xb0,0x10,0x10,0x10, 0x00,0x00,0x18,0x24,0x46,0x42,0x02,0x06, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xf0,

0x06,0x0c,0x00,0x08,0x10,0x60,0x22,0x7e,/*12 8*/ /*a4*/ 0x00,0x00,0x38,0x62,0x42,0x42,0x62,0x36, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63, 0x18,0x1c,0x26,0x46,0x42,0x42,0x43,0x3e,

0x32,0x34,0x18,0x08,0x1c,0x24,0x26,0x47,/*8x 9*/ /*a8*/ 0x00,0x00,0x06,0x08,0x10,0x20,0x20,0x60, 0x00,0x00,0x00,0x04,0x0c,0x14,0x14,0x24, 0x5e,0x62,0x42,0x43,0x43,0x42,0x62,0x3c,

0x24,0x44,0x44,0x7f,0x04,0x04,0x04,0x04,/*64 10*/ /*ac*/ 0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55, 0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55, 0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,

0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,/*....11*/ /*b0*/ 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,/*全黑12*/ /*b4*/ 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,/*全白13*/ /*b8*/ 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

14

单片机设计实训

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*上边14*/ /*bc*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,/*下边15*/ /*c0*/ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*左边16*/ /*c4*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,/*右边17*/ /*c8*/ 0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80, 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*左上18*/ /*cc*/ 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xff,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,/*右上19*/ /*d0*/ 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,/*左下20*/ /*d4*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,

0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xff /*右下21*/ };

void r_st(uchar w);

void wdata(bit cd_flag,uchar d); /*数据写操作*/ void dmod(uchar x0,uchar x1,uchar c); void smod(uchar x1,uchar c); void nmod(uchar c);

/* 使用寄存0 组 */

#pragma REGISTERBANK(0) void soft_10ms()

15

单片机设计实训

{

register int i;

for(i=0;i<711;i++); }

/* 初始化 */ void initcomm(void) {

IE=0;

P0=0xff; P1=0xff; P2=0xff; P3=0xff;

TMOD=0x11; TH0 = 0; TL0 = 0; TR0 = 1; ET0 = 1; EA = 1; }

/* 初始化 lcd240128 */ void initlcd(void) {

dmod(0x00,0x00,0x40); /*文本显示区域首地址*/

dmod(0x1e,0x00,0x41); /*文本显示宽度和一行显示字节数*/ dmod(0x00,0x08,0x42); /*图形显示区域首地址*/

dmod(0x1e,0x00,0x43); /*图形显示宽度,一行显示所占字节*/

dmod(0x03,0x00,0x22); /*cgram首地址 00011 100000000 000 = 1c00h*/ nmod(0xa7); /*光标形状设置*/

nmod(0x80); /*显示方式:逻辑“或”合成*/

nmod(0x9c); /*显示开关设置,开文本和图形显示*/ }

/* lcd 清0*/ void clear(void) {

dmod(0x00,0x00,0x24); /*显示存储器首地址*/ nmod(0xb0); /*自动写方式*/ for (i = 0;i<=0x2000;i++) {

r_st(3); /*等待自动写状态*/

16

单片机设计实训

wdata(0,0); }

nmod(0xb2); /*自动写结束*/ }

/**************************************************** 读状态字

cd_flag = 1 读命令通到。 = 0 读数据通到。

w = 0 指令读,写状态, 返回1 准备好 返回0 忙。 w = 1 数据读,写状态, 返回1 准备好 返回0 忙。 w = 2 数据自动读状态, 返回1 准备好 返回0 忙。 w = 3 数据自动写状态, 返回1 准备好 返回0 忙。 w = 5 控制运行检测可能性,返回1 准备好 返回0 忙。 w = 6 屏读/栲贝出错状态, 返回1 正确 返回0 出错。

w = 7 闪烁状态检测, 返回1 正常显示 返回0 关显示。 ******************************************************/ void r_st (uchar w) {

uchar data i = 0; uchar data c; cd = 1;

lcdbus = 0xff; ce = 0; while(--i) {

rd = 0; c = lcdbus; rd = 1; ce = 1;

if ((w==1)&&((c&3)==3)) return;

if((w==3)&&(c&8)) return; } }

void wdata(bit cd_flag,uchar d) /*数据写操作*/ {

cd = cd_flag; lcdbus = d; ce = 0;

17

单片机设计实训

wr = 0; wr = 1; ce = 1; cd = 0; }

/*双参数指令*/

void dmod(uchar x0,uchar x1,uchar c) {

r_st(1); wdata(0,x0); r_st(1); wdata(0,x1); r_st(1); wdata(1,c); }

/*单参数指令*/

void smod(uchar x1,uchar c) {

r_st(1); wdata(0,x1); r_st(1); wdata(1,c); }

/*无参数指令*/ void nmod(uchar c) {

r_st(1); wdata(1,c); }

/************************************************************* 建立CGRAM 函数(图形方式) *p 汉字库字符首地址

*************************************************************/ void cgram(uchar code *p) {

dmod(0x00,0x1c,0x24);

18