lcd12864c语言显示任意位置

lcd12864c语言显示任意位置
lcd12864c语言显示任意位置

#include

#define uint unsigned int

#define uchar unsigned char

#include

#define RS RD2

#define CS2 RD1

#define CS1 RD0

#define E RD4

#define RW RD3

#define BUSY RB7

uchar (*p)[32];

uchar tab3[]={

0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x 20,/*"a",0*/

0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x 00/*"b",1*/

};

uchar tab0[]={

0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x 00,

0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x 00,/*"电",0*/

0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x 00,

0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00/*"子",1*/

};

uchar tab1[]={

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x 00,/*"0",0*/

0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x 00,/*"1",1*/

0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x 00,/*"2",2*/

0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x 00,/*"3",3*/

0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x 00/*"4",4*/

};/*"4",3*/

uchar tab2[]={

0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x 00,/*"5",0*/

0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x 00,/*"6",1*/

0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x 00,/*"7",2*/

0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x 00,/*"8",3*/

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x 00/*"9",4*/

};

//写指令代码(左)

void l_w_code(char l_code)

{

//check_busy();

PORTD=0x12;

PORTB=l_code;

E=1;

E=0;

asm("nop");

}

//写显示数据(左)

void l_w_data(char l_data)

{

//check_busy();

PORTD=0x16;

PORTB=l_data;

E=1;

E=0;

asm("nop");

}

//写指令代码(右)

void r_w_code(char r_code) {

//check_busy();

PORTD=0x11;

PORTB=r_code;

E=1;

E=0;

//asm("nop");

}

//写显示数据(右)

void r_w_data(char r_data) {

//check_busy();

PORTD=0x15;

PORTB=r_data;

E=1;

E=0;

asm("nop");

}

void initializeLCD(void)

{

l_w_code(0x3f);

l_w_code(0xc0);

l_w_code(0xb8);

l_w_code(0x40);

r_w_code(0x3f);

r_w_code(0xc0);

r_w_code(0xb8);

r_w_code(0x80);

}

void c_display(uint q,uint w,uint e) {

uchar m,n;

uchar i,x,y=0x40;

uint k=0,j=1;

if(w>8)

{w=w-8;j=0;}

for(i=1;i

{y=y+0x08;}

switch(q)

{

case 1:x=0xb8;break;

case 2:x=0xba;break;

case 3:x=0xbc;break;

case 4:x=0xfe;break;

default:break;

}

switch(e)

{

case 0:k=0;break;

case 1:k=16;break;

case 2:k=32;break;

case 3:k=48;break;

case 4:k=64;break;

case 5:k=0;break;

case 6:k=16;break;

case 7:k=32;break;

case 8:k=48;break;

case 9:k=64;break;

default:k=0;break;

}

if(j)

{

for (m=0;m<2;m++)

{

for(n=0;n<8;n++)

{

l_w_code(x); //写入页地址

l_w_code(y);

if((e<10)&&(e>4))

{ l_w_data(tab2[k++]);}

else if(e<5)

{ l_w_data(tab1[k++]);}

else

{ l_w_data((*p)[k++]);}

y=y+0x01;

}

y=y-0x08;

x+=0x01;

}

}

else

{

for (m=0;m<2;m++)

{

for(n=0;n<8;n++)

{

r_w_code(x); //写入页地址

r_w_code(y);

if((e<10)&&(e>4))

{ r_w_data(tab2[k++]);}

else if(e<5)

{ r_w_data(tab1[k++]);}

else

{ r_w_data((*p)[k++]);}

y=y+0x01;

}

y=y-0x08;

x+=0x01;

}

}

}

void l_display(uint q,uint w)

{

uchar m,n;

uchar i,x,y=0x40;

uint k=0,j=1;

if(w>8)

{w=w-8;j=0;}

for(i=1;i

{y=y+0x08;}

switch(q)

{

case 1:x=0xb8;break;

case 2:x=0xba;break;

case 3:x=0xbc;break;

case 4:x=0xbe;break;

default:break;

}

if(j)

{

for (m=0;m<2;m++)

{

for(n=0;n<16;n++)

{

l_w_code(x); //写入页地址

l_w_code(y);

l_w_data((*p)[k++]);

y=y+0x01;

}

y=y-0x10;

x+=0x01;

}

}

else

{

for (m=0;m<2;m++)

{

for(n=0;n<16;n++)

{

r_w_code(x); //写入页地址

r_w_code(y);

r_w_data((*p)[k++]);

y=y+0x01;

}

y=y-0x10;

x+=0x01;

}

}

}

void delaycnt(unsigned int cnt)

{

while(--cnt);

}

void main(void)

{

TRISD=0X00;

TRISB=0X00;

initializeLCD();

while(1)

{

p=&tab0[0]; //显示电子

l_display(3,3);

p=&tab0[32];

l_display(3,5);

c_display(3,7,1); //显示1202

c_display(3,8,2);

c_display(3,9,0);

c_display(3,10,2);

p=&tab3[0]; //显示ab

c_display(2,11,10);

p=&tab3[16];

c_display(2,12,10);

}

}

/*

x=4,0

c_display(x,y,z);表示在第x行,第Y列,显示z(数字1-9).

如果要显示其他字符,z=10,每个字母16个字符,p=&tab3[0];表示显示第一个字母,p=&tab3[16];表示显示第二个字母

P=&tab0[0];l_display(x,y);这里y不能为8和16,表示在第X行,第Y列和Y+1列显示tab0[]的第一个汉子,每个汉子32个字符,显示tab0[]

里面的第二个就是从p=&tab2[32]开始

*/

相关主题
相关文档
最新文档