.unsigned char const chardot_5x8[][5] = {
{0x00,0x00,0x00,0x00,0x00},/* CHAR_20 */
{0x00,0x00,0x5F,0x00,0x00},/*! CHAR_21 */
{0x00,0x07,0x00,0x07,0x00},/*" CHAR_22 */
{0x14,0x7F,0x14,0x7F,0x14},/*# CHAR_23 */
{0x24,0x2E,0x7B,0x2A,0x12},/*$ CHAR_24 */
{0x23,0x13,0x08,0x64,0x62},/*% CHAR_25 */
{0x36,0x49,0x56,0x20,0x50},/*& CHAR_26 */
{0x00,0x04,0x03,0x01,0x00},/*' CHAR_27 */
{0x00,0x1C,0x22,0x41,0x00},/*( CHAR_28 */
{0x00,0x41,0x22,0x1C,0x00},/*) CHAR_29 */
{0x22,0x14,0x7F,0x14,0x22},/** CHAR_2A */
{0x08,0x08,0x7F,0x08,0x08},/*+ CHAR_2B */
{0x40,0x30,0x10,0x00,0x00},/*, CHAR_2C */
{0x08,0x08,0x08,0x08,0x08},/*- CHAR_2D */
{0x00,0x60,0x60,0x00,0x00},/*. CHAR_2E */
{0x20,0x10,0x08,0x04,0x02},/*/ CHAR_2F */
{0x3E,0x51,0x49,0x45,0x3E},/*0 CHAR_30 */
{0x00,0x42,0x7F,0x40,0x00},/*1 CHAR_31 */
{0x62,0x51,0x49,0x49,0x46},/*2 CHAR_32 */
{0x21,0x41,0x49,0x4D,0x33},/*3 CHAR_33 */
{0x18,0x14,0x12,0x7F,0x10},/*4 CHAR_34 */
{0x27,0x45,0x45,0x45,0x39},/*5 CHAR_35 */
{0x3C,0x4A,0x49,0x49,0x31},/*6 CHAR_36 */
{0x01,0x71,0x09,0x05,0x03},/*7 CHAR_37 */
{0x36,0x49,0x49,0x49,0x36},/*8 CHAR_38 */
{0x46,0x49,0x49,0x29,0x1E},/*9 CHAR_39 */
{0x00,0x36,0x36,0x00,0x00},/*: CHAR_3A */
{0x40,0x36,0x36,0x00,0x00},/*; CHAR_3B */
{0x08,0x14,0x22,0x41,0x00},/*< CHAR_3C */
{0x14,0x14,0x14,0x14,0x14},/*= CHAR_3D */
{0x00,0x41,0x22,0x14,0x08},/*> CHAR_3E */
{0x02,0x01,0x59,0x05,0x02},/*? CHAR_3F */
{0x3E,0x41,0x5D,0x55,0x5E},/*@ CHAR_40 */
{0x7C,0x12,0x11,0x12,0x7C},/*A CHAR_41 */
{0x7F,0x49,0x49,0x49,0x36},/*B CHAR_42 */
{0x3E,0x41,0x41,0x41,0x22},/*C CHAR_43 */
{0x7F,0x41,0x41,0x41,0x3E},/*D CHAR_44 */
{0x7F,0x49,0x49,0x49,0x41},/*E CHAR_45 */
{0x7F,0x09,0x09,0x09,0x01},/*F CHAR_46 */
{0x3E,0x41,0x51,0x51,0x72},/*G CHAR_47 */
{0x7F,0x08,0x08,0x08,0x7F},/*H CHAR_48 */
{0x00,0x41,0x7F,0x41,0x00},/*I CHAR_49 */
{0x20,0x40,0x41,0x3F,0x01},/*J CHAR_4A */
{0x7F,0x08,0x14,0x22,0x41},/*K CHAR_4B */
{0x7F,0x40,0x40,0x40,0x40},/*L CHAR_4C */
{0x7F,0x02,0x0C,0x02,0x7F},/*M CHAR_4D */
{0x7F,0x04,0x08,0x10,0x7F},/*N CHAR_4E */
{0x3E,0x41,0x41,0x41,0x3E},/*O CHAR_4F */
{0x7F,0x09,0x09,0x09,0x06},/*P CHAR_50 */
{0x3E,0x41,0x51,0x21,0x5E},/*Q CHAR_51 */
{0x7F,0x09,0x19,0x29,0x46},/*R CHAR_52 */
{0x26,0x49,0x49,0x49,0x32},/*S CHAR_53 */
{0x01,0x01,0x7F,0x01,0x01},/*T CHAR_54 */
{0x3F,0x40,0x40,0x40,0x3F},/*U CHAR_55 */
{0x1F,0x20,0x40,0x20,0x1F},/*V CHAR_56 */
{0x7F,0x20,0x18,0x20,0x7F},/*W CHAR_57 */
{0x63,0x14,0x08,0x14,0x63},/*X CHAR_58 */
{0x03,0x04,0x78,0x04,0x03},/*Y CHAR_59 */
{0x61,0x51,0x49,0x45,0x43},/*Z CHAR_5A */
{0x7F,0x7F,0x41,0x41,0x00},/*[ CHAR_5B */
{0x02,0x04,0x08,0x10,0x20},/*\ CHAR_5C */
{0x00,0x41,0x41,0x7F,0x7F},/*] CHAR_5D */
{0x04,0x02,0x7F,0x02,0x04},/*^ CHAR_5E */
{0x08,0x1C,0x2A,0x08,0x08},/*_ CHAR_5F */
{0x00,0x00,0x01,0x02,0x04},/*` CHAR_60 */
{0x24,0x54,0x54,0x38,0x40},/*a CHAR_61 */
{0x7F,0x28,0x44,0x44,0x38},/*b CHAR_62 */
{0x38,0x44,0x44,0x44,0x08},/*c CHAR_63 */
{0x38,0x44,0x44,0x28,0x7F},/*d CHAR_64 */
{0x38,0x54,0x54,0x54,0x08},/*e CHAR_65 */
{0x08,0x7E,0x09,0x09,0x02},/*f CHAR_66 */
{0x98,0xA4,0xA4,0xA4,0x78},/*g CHAR_67 */
{0x7F,0x08,0x04,0x04,0x78},/*h CHAR_68 */
{0x00,0x00,0x79,0x00,0x00},/*i CHAR_69 */
{0x00,0x80,0x88,0x79,0x00},/*j CHAR_6A */
{0x7F,0x10,0x28,0x44,0x40},/*k CHAR_6B */
{0x00,0x41,0x7F,0x40,0x00},/*l CHAR_6C */
{0x78,0x04,0x78,0x04,0x78},/*m CHAR_6D */
{0x04,0x78,0x04,0x04,0x78},/*n CHAR_6E */
{0x38,0x44,0x44,0x44,0x38},/*o CHAR_6F */
{0xFC,0x24,0x24,0x24,0x18},/*p CHAR_70 */
{0x18,0x24,0x24,0x24,0xFC},/*q CHAR_71 */
{0x04,0x78,0x04,0x04,0x08},/*r CHAR_72 */
{0x48,0x54,0x54,0x54,0x24},/*s CHAR_73 */
{0x04,0x3F,0x44,0x44,0x24},/*t CHAR_74 */
{0x3C,0x40,0x40,0x3C,0x40},/*u CHAR_75 */
{0x1C,0x20,0x40,0x20,0x1C},/*v CHAR_76 */
{0x3C,0x40,0x3C,0x40,0x3C},/*w CHAR_77 */
{0x44,0x28,0x10,0x28,0x44},/*x CHAR_78 */
{0x9C,0xA0,0xA0,0x90,0x7C},/*y CHAR_79 */
{0x44,0x64,0x54,0x4C,0x44},/*z CHAR_7A */
{0x08,0x36,0x41,0x00,0x00},/*{ CHAR_7B */
{0x00,0x00,0x77,0x00,0x00},/*| CHAR_7C */
{0x00,0x00,0x41,0x36,0x08},/*} CHAR_7D */
{0x08,0x04,0x08,0x10,0x08},/*~ CHAR_7E */
{0x55,0x2A,0x55,0x2A,0x55}/* CHAR_7F */
};
/**********************************************************************************************
5*8ascii 点整

***********************************************************************************************/
void write_english5_8(uchar x, uchar y,uchar ascii)
{
uchar n,*p;
p = (unsigned char*)chardot_5x8[ascii-' '];
y= y+x/21;
x = x%21;
if(x!=10)
{
if(x<10){choose(0);x*=6;}
else {choose(1);x=x*6-64;}
lcd_code(0xb8+y);
lcd_code(0x40+x);
lcd_wram(0x00);
for(n=0;n<5;n++)
{
lcd_wram(*p++);
}
}
else
{
choose(0);
lcd_code(0xb8+y);
lcd_code(0x40+60);
lcd_wram(0x00);
for(n=0;n<3;n++)
{
lcd_wram(*p++);
}
choose(1);
lcd_code(0xb8+y);
lcd_code(0x40);
lcd_wram(*p++);
lcd_wram(*p++);
}
}
void Display_Locate(uchar x,uchar y,uchar dat)
{
uchar y_temp,x_temp;
y_temp = y+(x/128);
x_temp = x&0x7f;
if(x_temp>63){choose(1);x_temp -=64;}
else choose(0);
lcd_code(0xb8+y_temp);
lcd_code(0x40+x_temp);
lcd_wram(dat);
}
void write_word8_8(uchar page, uchar row, uchar *adr)
{
uchar n;
if(row>15){page=page+row/16;row=row%16;}
if(row<8){choose(0); row=row<<3; }
else {choose(1);row=(row-8)<<3; }
lcd_code(0xb8+page);
lcd_code(0x40+row);
for(n=0;n<8;n++)
{
lcd_wram(*(adr+n));
}
}
void write_word16_16(uchar page, uchar row, uchar *adr)
{
uchar n;
if(row>7){page=page+row/8;row=row%8;}
{
if(row<4){choose(0); row=row<<4; }
else {choose(1);row=(row-4)<<4; }
page=page<<1; // 4 两行显示一字
lcd_code(0xb8+page);
lcd_code(0x40+row);
for(n=0;n<16;n++)
lcd_wram(*(adr+n));
//上半部分
lcd_code(0xb9+page);
lcd_code(0x40+row);
for(n=16;n<32;n++)
lcd_wram(*(adr+n));
}
//下半部分
}
void write_word8_16(uchar page, uchar row, uchar *adr)
{
uchar n;
if(row>15){page=page+row/16;row=row%16;}
if(row<8){choose(0); row=row<<3; }
else {choose(1);row=(row-8)<<3; }
page=page<<1; // 4 两行显示一字
lcd_code(0xb8+page);
lcd_code(0x40+row);
for(n=0;n<8;n++)
{
lcd_wram(*(adr+n));
}
//上半部分
lcd_code(0xb9+page);
lcd_code(0x40+row);
for(n=8;n<16;n++)
{
lcd_wram(*(adr+n));
}
}
void lcd_busy(void)
{
unsigned char ac;
RS(0);
RW(1);
E(0);
LATD = 0X00;
PORTDD_IN;
do
{
E(1);
Delay_us(1);
ac=PORTD_IN;
ac&=0x80;
ac&=0x80;////////////延时
E(0);
}while(ac==0x80);
E(0);
}
void lcd_code(char Data)
{
lcd_busy();
E(0);
RS(0);
RW(0);
PORTDD_OUT;
E(1);
PORT_D=Data;
Delay_us(1);
E(0);
}
void lcd_wram(char Data)
{
lcd_busy();
E(0);
RS(1);
RW(0);
PORTDD_OUT;
E(1);
PORT_D=Data;
Delay_us(1);
E(0);
LATD = 0X00;
}
uchar lcd_rram(uchar page,uchar arrange) //page页地址.arrange列地址)
{
uchar dat;
lcd_code(page+0xb8);
lcd_code(arrange+0x40);
E(0);
RW(1);
RS(1);
LATD = 0X00;
PORTDD_IN;
E(1);
Delay_us(2);
E(0); //12864读数据时第二次读才有效,第一次读取的值不采集
Delay_us(2);
E(1);
dat=PORTD_IN;
Delay_us(2);
E(0);
return(dat);
}
void choose(uchar n)
{
switch(n)
{
case 0:C1(0);C2(1);break;
case 1:C1(1);C2(0);break;
case 2:C1(0);C2(0);break;
default:break;
}
}
void clear12864(void) // 清屏
{
uchar page,row;
choose(2);
for(page=0xb8;page<0xc0;page++)
{
lcd_code(page);
lcd_code(0x40);
for(row=0;row<64;row++)
{
lcd_wram(0x00);
}
}
}
void write_word8_16(uchar page, uchar row, uchar *adr)
{
uchar n;
if(row>15){page=page+row/16;row=row%16;}
if(row<8){choose(0); row=row<<3; }
else {choose(1);row=(row-8)<<3; }
page=page<<1; // 4 两行显示一字
lcd_code(0xb8+page);
lcd_code(0x40+row);
for(n=0;n<8;n++)
{
lcd_wram(*(adr+n));
}
//上半部分
lcd_code(0xb9+page);
lcd_code(0x40+row);
for(n=8;n<16;n++)
{
lcd_wram(*(adr+n));
}
}
void write_word8_8(uchar page, uchar row, uchar *adr)
{
uchar n;
if(row>15){page=page+row/16;row=row%16;}
if(row<8){choose(0); row=row<<3; }
else {choose(1);row=(row-8)<<3; }
lcd_code(0xb8+page);
lcd_code(0x40+row);
for(n=0;n<8;n++)
{
lcd_wram(*(adr+n));
}
}
void write_word16_16(uchar page, uchar row, uchar *adr)
{
uchar n;
if(row>7){page=page+row/8;row=row%8;}
{
if(row<4){choose(0); row=row<<4; }
else {choose(1);row=(row-4)<<4; }
page=page<<1; // 4 两行显示一字
lcd_code(0xb8+page);
lcd_code(0x40+row);
for(n=0;n<16;n++)
lcd_wram(*(adr+n));
//上半部分
lcd_code(0xb9+page);
lcd_code(0x40+row);
for(n=16;n<32;n++)
lcd_wram(*(adr+n));
}
//下半部分
}
/*void write_word32(uchar page, uchar row, uchar *adr)
{
uchar n;
if(row>3){page=page+row/4;row=row%4;}
if(row<2) { row=row<<5; choose(0);}
else {choose(1); row=(row-2)<<5; }
page=page<<2;
lcd_code(0xb8+page);
lcd_code(0x40+row);
for(n=0;n<32;n++)
lcd_wram(*(adr+n));
lcd_code(0xb9+page);
lcd_code(0x40+row);
for(n=32;n<64;n++)
lcd_wram(*(adr+n));
lcd_code(0xba+page);
lcd_code(0x40+row);
for(n=64;n<96;n++)
lcd_wram(*(adr+n));
lcd_code(0xbb+page);
lcd_code(0x40+row);
for(n=96;n<128;n++)
lcd_wram(*(adr+n));
} */
/*void play_photos(char *adr)
{
uchar n,z;
clear12864();
for(z=0;z<8;z++)
{
for(n=0;n<128;n++)
{
if(n<64)
{
choose(0);
lcd_code(0x40+n);
lcd_code(0xb8+z);
lcd_wram(*(adr+n+(z<<7)));
}
else
{
choose(1);
lcd_code(0x40+n-64);
lcd_code(0xb8+z);
lcd_wram(*(adr+n+(z<<7)));
}
}
}
} */
//显示一个点x=0~127 y=0~63;
void display1(uchar x,uchar y)
{
uchar dat;
if(x>63){choose(1);x=x-64;}
else{choose(0);}
dat =lcd_rram(y/8,x);
lcd_code(0xb8+y/8);
lcd_code(0x40+x);
lcd_wram(dat|(1<<y%8)) ;
}
//清除一个点
void disclr1(uchar x,uchar y)
{
uchar dat;
if(x>63){choose(1);x=x-64;}
else{choose(0);}
dat =lcd_rram(y/8,x);
lcd_code(0xb8+y/8);
lcd_code(0x40+x);
lcd_wram(dat&(~(1<<y%8))) ;
}