📄 glcd.c
字号:
#include <AT89S8253.H>//#include <stdio.h>unsigned char data LCDCont = 0x00; //00100000, [CS1] [CS2] [write] [command]unsigned char idata address;//unsigned char code space= {0x0 , 0x0 , 0x0 , 0x0 , 0x0 }; //32//unsigned char code ! = {0x0 , 0x0 , 0x4f, 0x0 , 0x0 }; //33//unsigned char code " = {0x0 , 0x07, 0x0 , 0x07, 0x0 }; //34//unsigned char code # = {0x14, 0x7f, 0x14, 0x7f, 0x14 }; //35//unsigned char code $ = {0x24, 0x2a, 0x7f, 0x2a, 0x12 }; //36//unsigned char code % = {0x23, 0x13, 0x08, 0x64, 0x62 }; //37//unsigned char code & = {0x36, 0x49, 0x55, 0x22, 0x50 }; //38//unsigned char code ' = {0x0 , 0x05, 0x03, 0x0 , 0x0 }; //39//unsigned char code ( = {0x0 , 0x1c, 0x22, 0x41, 0x0 }; //40//unsigned char code ) = {0x0 , 0x41, 0x22, 0x1c, 0x0 }; //41//unsigned char code * = {0x14, 0x08, 0x3e, 0x08, 0x14 }; //42//unsigned char code + = {0x08, 0x08, 0x3e, 0x08, 0x08 }; //43//unsigned char code , = {0x0 , 0x50, 0x30, 0x0 , 0x0 }; //44//unsigned char code - = {0x08, 0x08, 0x08, 0x08, 0x08 }; //45//unsigned char code . = {0x0 , 0xc0, 0xc0, 0x0 , 0x0 }; //46//unsigned char code / = {0x20, 0x10, 0x08, 0x04, 0x02 }; //47unsigned char code A_[] = {0x7E, 0x11, 0x11, 0x11, 0x7E }; //65unsigned char code B_[] = {0x7F, 0x49, 0x49, 0x49, 0x36 }; //66unsigned char code C_[] = {0x3E, 0x41, 0x41, 0x41, 0x22 }; //67unsigned char code D_[] = {0x7F, 0x41, 0x41, 0x22, 0x1c }; //68unsigned char code E_[] = {0x7f, 0x49, 0x49, 0x49, 0x41 }; //69unsigned char code F_[] = {0x7F, 0x09, 0x09, 0x09, 0x01 }; //70unsigned char code G_[] = {0x3E, 0x41, 0x49, 0x49, 0x7a }; //71unsigned char code H_[] = {0x7f, 0x08, 0x08, 0x08, 0x7F }; //72unsigned char code I_[] = {0x0, 0x41, 0x7F, 0x41, 0 }; //73unsigned char code J_[] = {0x20, 0x04, 0x41, 0x3f, 0x01 }; //74unsigned char code K_[] = {0x7F, 0x08, 0x14, 0x22, 0x41 }; //75unsigned char code L_[] = {0x7F, 0x40, 0x40, 0x40, 0x40 }; //76unsigned char code M_[] = {0x7f, 0x02, 0x0c, 0x02, 0x7f }; //77unsigned char code N_[] = {0x7f, 0x04, 0x08, 0x10, 0x7f }; //78unsigned char code O_[] = {0x3e, 0x41, 0x41, 0x41, 0x3e }; //79unsigned char code P_[] = {0x7F, 0x09, 0x09, 0x09, 0x06 }; //80unsigned char code Q_[] = {0x3e, 0X41, 0X51, 0X21, 0X5e }; //81unsigned char code R_[] = {0X7F, 0X09, 0X19, 0X29, 0X46 }; //82unsigned char code S_[] = {0X46, 0X49, 0X49, 0X49, 0X31 }; //83unsigned char code T_[] = {0X01, 0X01, 0X7F, 0X01, 0X01 }; //84unsigned char code U_[] = {0X3f, 0X40, 0X40, 0X40, 0X3f }; //85unsigned char code V_[] = {0X1f, 0X20, 0X40, 0X20, 0X1f }; //86unsigned char code W_[] = {0X3f, 0X40, 0X38, 0X40, 0X3f }; //87unsigned char code X_[] = {0X63, 0X14, 0X08, 0X14, 0X63 }; //88unsigned char code Y_[] = {0X07, 0X08, 0X70, 0X08, 0X07 }; //89unsigned char code Z_[] = {0X61, 0X51, 0X49, 0X45, 0X43 }; //90//unsigned char code [ [] = {0x0 , 0x7f, 0x41, 0x41, 0x0 }; //91//unsigned char code \ [] = {0x02, 0x04, 0x08, 0x10, 0x20 }; //92//unsigned char code ] [] = {0x0 , 0x41, 0x41, 0x7f, 0x0 }; //93//unsigned char code ^ [] = {0x04, 0x02, 0x01, 0x02, 0x04 }; //94//unsigned char code _ [] = {0x40, 0x40, 0x40, 0x40, 0x40 }; //95//unsigned char code ` [] = {0x0 , 0x01, 0x02, 0x04, 0x0 }; //96unsigned char code a_[] = {0x20, 0x54, 0x54, 0x54, 0x78 }; //97unsigned char code b_[] = {0x7F, 0x48, 0x44, 0x44, 0x38 }; //98unsigned char code c_[] = {0x38, 0x44, 0x44, 0x44, 0x20 }; //99unsigned char code d_[] = {0x38, 0x44, 0x44, 0x48, 0x7F }; //100unsigned char code e_[] = {0x38, 0x54, 0x54, 0x54, 0x18 }; //101unsigned char code f_[] = {0x08, 0x7e, 0x09, 0x01, 0x02 }; //102unsigned char code g_[] = {0x0c, 0x52, 0x52, 0x52, 0x3e }; //103unsigned char code h_[] = {0x7f, 0x08, 0x04, 0x04, 0x78 }; //104unsigned char code i_[] = {0x00, 0x44, 0x7d, 0x40, 0x00 }; //105unsigned char code j_[] = {0x20, 0x40, 0x44, 0x3d, 0x00 }; //106unsigned char code k_[] = {0x7f, 0x10, 0x28, 0x44, 0x00 }; //107unsigned char code l_[] = {0x00, 0x41, 0x7F, 0x40, 0 }; //108unsigned char code m_[] = {0x7c, 0x04, 0x18, 0x04, 0x78 }; //109unsigned char code n_[] = {0x7c, 0x08, 0x04, 0x04, 0x78 }; //110unsigned char code o_[] = {0x38, 0x44, 0x44, 0x44, 0x38 }; //111unsigned char code p_[] = {0x7c, 0x14, 0x14, 0x14, 0x08 }; //112unsigned char code q_[] = {0x08, 0x14, 0x14, 0x18, 0x7c }; //113unsigned char code r_[] = {0x7c, 0x08, 0x04, 0x04, 0x08 }; //114unsigned char code s_[] = {0x48, 0x54, 0x54, 0x54, 0x20 }; //115unsigned char code t_[] = {0x04, 0x3f, 0x44, 0x40, 0x20 }; //116unsigned char code u_[] = {0x3c, 0x40, 0x40, 0x20, 0x7c }; //117unsigned char code v_[] = {0x1c, 0x20, 0x40, 0x20, 0x1c }; //118unsigned char code w_[] = {0x3c, 0x40, 0x30, 0x40, 0x3c }; //119unsigned char code x_[] = {0x44, 0x28, 0x10, 0x28, 0x44 }; //120unsigned char code y_[] = {0x0c, 0x50, 0x50, 0x50, 0x3c }; //121unsigned char code z_[] = {0x44, 0x64, 0x54, 0x4c, 0x44 }; //122unsigned char code d0[] = {0x3e, 0x51, 0x49, 0x45, 0x3e }; //48unsigned char code d1[] = {0x00, 0x42, 0x7F, 0x40, 0x00 }; //49unsigned char code d2[] = {0x42, 0x61, 0x51, 0x49, 0x46 }; //50unsigned char code d3[] = {0x21, 0x41, 0x45, 0x4b, 0x31 }; //51unsigned char code d4[] = {0x18, 0x14, 0x12, 0x7f, 0x10 }; //52unsigned char code d5[] = {0x27, 0x45, 0x45, 0x45, 0x39 }; //53unsigned char code d6[] = {0x3c, 0x4a, 0x49, 0x49, 0x30 }; //54unsigned char code d7[] = {0x01, 0x71, 0x09, 0x05, 0x03 }; //55unsigned char code d8[] = {0x36, 0x49, 0x49, 0x49, 0x36 }; //56 unsigned char code d9[] = {0x06, 0x49, 0x49, 0x29, 0x1e }; //57//unsigned char code : [] = {0x0 , 0x36, 0x36, 0x0 , 0x0 }; //58//unsigned char code ; [] = {0x0 , 0x56, 0x36, 0x0 , 0x0 }; //59//unsigned char code < [] = {0x08, 0x14, 0x22, 0x41, 0x0 }; //60//unsigned char code = [] = {0x14, 0x14, 0x14, 0x14, 0x14 }; //61//unsigned char code > [] = {0x0 , 0x41, 0x22, 0x14, 0x08 }; //62//unsigned char code ? [] = {0x02, 0x01, 0x51, 0x09, 0x06 }; //63//unsigned char code @ [] = {0x32, 0x49, 0x79, 0x41, 0x3e }; //64void delay(unsigned long);void glcd_wc(unsigned char, unsigned char); // write control word to GRAPHIC LCD [CS1/CS2][WORD]void glcd_fillup(unsigned char); //GRAPHIC LCD fillup with a patternunsigned char glcd_rs(unsigned char lcd); // read status from GRAPHIC LCD//void glcd_wd(unsigned char, unsigned char, unsigned char, unsigned char); void glcd_wd(unsigned char, unsigned char); // [GLCD][DATA]// write data word to GRAPHIC LCD, [CS1/CS2][X-pos][Y-pos][DATA].void glcd_pos (unsigned char, unsigned char, unsigned char); // [GLCD] [x-pos] [y-pos]void glcd_char(unsigned char ,unsigned char*); //[lcd][pattern_array]void main(){int iTemp ; // Temporary integer varable//unsigned cTemp;//==== INFO ===//// P1_0 : infra-red LED// GLCD = 1 for right LCD pixels// GLCD = 2 for left LCD pixels// GLCD = 3 for both LCD pixels//=== initialize =====================address = 0xF6;// test program for GRAPHIC LCD ==================================glcd_wc(1, 0x3F); // GRAPHIC LCD 1 onglcd_wc(2, 0x3F); // GRAPHIC LCD 2 onglcd_fillup(0x00);glcd_pos(1,0,0);glcd_char(1, I_);glcd_char(1, E_);glcd_char(1, G_);glcd_char(1, d3);glcd_char(1, d8);glcd_char(1, d1);glcd_char(1, d0);glcd_pos(2,0,0);glcd_char(2, C_);glcd_char(2, U_);glcd_char(2, H_);glcd_char(2, K_);glcd_pos(2,1,0);glcd_char(2, i_);glcd_char(2, e_);glcd_char(2, g_);glcd_char(2, d3);glcd_char(2, d8);glcd_char(2, d1);glcd_char(2, d0);glcd_pos(1,1,0);glcd_char(1, c_);glcd_char(1, u_);glcd_char(1, h_);glcd_char(1, k_);glcd_pos(3, 4, 0);for (iTemp=0; iTemp<4; iTemp++) glcd_char(3,A_);/* end of "test GRPAHIC LCD" */ // test program for BUZZER for(iTemp=0; iTemp<50; iTemp++) { P2_7=0; //BUZZER delay(100); P2_7=1; delay(100); } /* end of "test program for BUZZER" *///================================---------------------------------------------while(1) { delay(100); // glcd_fillup(0x00); } //stop while loop}//end of main///=== INTERRUPT SUBROUTINE ===== start here =======================///==== end INTERRRUPT SUBROUTINE ========////== SUBROUTINE start here ===========================================////====================================================================/* Delay program */void delay(unsigned long value) { while(value>0) value--; }/* write command word to GRAPHIC LCD*/void glcd_wc(unsigned char lcd, unsigned char cTempdata) { TR0=0; //temperoray stop timer0 (dot matrix LED) if (lcd==2) P0=(LCDCont & 0x0F)|0x80; //CONTROL WORD=1000xxxx, [CS2] [CS1] [write] [command] else P0=(LCDCont & 0x0F)|0x40; //CONTROL WORD=0100xxxx, [CS2] [CS1] [write] [command] P2 = (address & 0xF0)|0x0E; //latch LCDCont to U20 P2 = address; //unselect U20 P0 = cTempdata; P2 = (address & 0xF0)|0x0B; //select (pulse trigger) Graphic LCD P2 = address; TR0=1; //resume dot matrix LED scanning }/* read status word of GRAPHIC LCD*/unsigned char glcd_rs(unsigned char lcd) { unsigned char cTemp; TR0=0; //temperoray stop timer0 (dot matrix LED) if (lcd==2) P0=(LCDCont & 0x0F)|0xA0; //CONTROL WORD=1000xxxx, [CS2] [CS1] [read] [command] else P0=(LCDCont & 0x0F)|0x60; //CONTROL WORD=0100xxxx, [CS2] [CS1] [reaad] [command] P2 = (address & 0xF0)|0x0E; //latch LCDCont to U20 P2 = address; //unselect U20 P0=0xff; P2 = (address & 0xF0)|0x0B; //select (pulse trigger) Graphic LCD cTemp = P0; P2 = address; TR0=1; //resume dot matrix LED scanning return cTemp; }/* write data to GRAPHIC LCD */void glcd_wd(unsigned char lcd, unsigned char cTempdata) { TR0=0; //temperoray stop timer0 (dot matrix LED) if (lcd==3) P0=(LCDCont & 0x0F)|0xD0; //CONTROL WORD=1001xxxx, [CS2=1] [CS1=1] [write=0] [data=1]xxxx else if (lcd==2) P0=(LCDCont & 0x0F)|0x90; //CONTROL WORD=1001xxxx, [CS2=1] [CS1=0] [write=0] [data=1]xxxx else P0=(LCDCont & 0x0F)|0x50; //CONTROL WORD=0101xxxx, [CS2=0] [CS1=1] [write=0] [data=1]xxxx P2 = (address & 0xF0) | 0x0E; // latch LCDCont to U20 P2 = address; // unselect U20 P0 = cTempdata; P2 = (address & 0xF0)|0x0B; //select (pulse trigger) Graphic LCD P2 = address; TR0=1; //resume dot matrix LED scanning //delay(1); }/* select location of GRAPHIC LCD */void glcd_pos (unsigned char lcd, unsigned char xpos, unsigned char ypos) { TR0=0; //temperoray stop timer0 (dot matrix LED) if (lcd==3) P0=(LCDCont & 0x0F)|0xC0; //CONTROL WORD=1000xxxx, [CS2=1] [CS1=1] [write=0] [command=0] else if (lcd==2) P0=(LCDCont & 0x0F)|0x80; //CONTROL WORD=1000xxxx, [CS2=1] [CS1=0] [write=0] [command=0] else P0=(LCDCont & 0x0F)|0x40; //CONTROL WORD=0100xxxx, [CS2=0] [CS1=1] [write=0] [command=0] P2 = (address & 0xF0) | 0x0E; // latch LCDCont to U20 P2 = address; // unselect U20 P0 = (ypos & 0x3F) | 0x40; // form Y-position pattern, 0~63 P2 = (address & 0xF0) | 0x0B; //select graphic LCD (latch y-position) P2 = address; // unselect (pulse trigger)graphic LCD delay(1); //little delay for position change P0 = (xpos & 0x07) | 0xB8; //form X-position pattern, 0~7 P2 = (address & 0xF0) | 0x0B; //select graphic LCD (latch x-position) P2 = address; // unselect (pulse trigger)graphic LCD TR0=1; //resume dot matrix LED scanning } /* Clear GRAPHIC LCD */void glcd_fillup(unsigned char pattern) { unsigned char counter1, counter2; for(counter1=0; counter1<8; counter1++) //x-pos { glcd_pos(3, counter1, 0); for(counter2=0; counter2<64; counter2++) { glcd_wd(3, pattern); //y-pos auto increase 1 } } }/* GRAPHIC LCD */void glcd_char(unsigned char lcd,unsigned char *pattern) { glcd_wd(lcd, *pattern); glcd_wd(lcd, *(pattern+1)); glcd_wd(lcd, *(pattern+2)); glcd_wd(lcd, *(pattern+3)); glcd_wd(lcd, *(pattern+4)); //glcd_wd(lcd, *(pattern+5)); glcd_wd(lcd, 0x00); }/////////////////// end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -