.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))) ; }