ks0108驱动
时间:11-29
来源:互联网
点击:
.unsigned char const chardot_5x8[][5] = {
***********************************************************************************************/ 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|(163){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
{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
ks0108驱 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)