⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 glcd.c

📁 usage of graphical LCD in C (assembly)
💻 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 + -