📄 lcd.lst
字号:
144 1 LCD_Write_Funtion(0x03,0x80);//LCD特殊显示功能
145 1 LCD_Write_Funtion(0x10,0x6B);//LCD基本显示功能设定 2
146 1 LCD_Write_Funtion(0x11,0x00);//光标高度和行距设定
147 1 LCD_Write_Funtion(0x12,0x91) ;//显示层设定:高位8灰度,9水平单一层,A单二层,B同时一二层
148 1 LCD_Write_Funtion(0x20,0x1E) ;//实际显示窗口垂直结束地址(LCD屏的分辨率30*8=240)
149 1 LCD_Write_Funtion(0x30,0x7F) ;//实际显示窗口水平结束地址(128)
150 1 LCD_Write_Funtion(0x40,0x00) ;//实际显示窗口垂直起始地址
151 1 LCD_Write_Funtion(0x50,0x00) ;//实际显示窗口水平起始地址
152 1 LCD_Write_Funtion(0x21,0x1E) ;//工作区窗口垂直结束地址(用户指定的显示窗口)
153 1 LCD_Write_Funtion(0x31,0x7F) ;//工作区窗口水平结束地址
154 1 LCD_Write_Funtion(0x41,0x00) ;//工作区窗口垂直起始地址
155 1 LCD_Write_Funtion(0x51,0x00) ;//工作区窗口水平起始地址
156 1 LCD_Write_Funtion(0x60,0x00) ;//地址定位
157 1 LCD_Write_Funtion(0x61,0x00) ;//
158 1 LCD_Write_Funtion(0x70,0x00) ;//
159 1 LCD_Write_Funtion(0x71,0x00) ;//
160 1 LCD_Write_Funtion(0x72,0x00) ;//
161 1 LCD_Write_Funtion(0x80,0xAA) ;//光标闪烁时间
162 1 LCD_Write_Funtion(0x81,0x04) ;//保留
163 1 LCD_Write_Funtion(0x91,0x00) ;//保留
164 1 LCD_Write_Funtion(0x90,0x0F) ;
165 1 LCD_Write_Funtion(0xA0,0x11) ;//键、触摸屏、光标行列状态
166 1 LCD_Write_Funtion(0xA1,0x00) ;
167 1 LCD_Write_Funtion(0xA2,0x00) ;
168 1 LCD_Write_Funtion(0xA3,0x00) ;
169 1 LCD_Write_Funtion(0xB0,0x27) ;
170 1 LCD_Write_Funtion(0xB1,0xEF) ;
171 1 LCD_Write_Funtion(0xC0,0x00) ;
172 1 LCD_Write_Funtion(0xC1,0x0A) ;
173 1 LCD_Write_Funtion(0xC8,0x80) ;
174 1 LCD_Write_Funtion(0xC9,0x80) ;
175 1 LCD_Write_Funtion(0xCA,0x00) ;
176 1 LCD_Write_Funtion(0xD0,0x80) ;
C51 COMPILER V7.50 LCD 05/09/2008 16:12:47 PAGE 4
177 1 LCD_Write_Funtion(0xE0,0x00) ;//自动写此寄存器的数据到DDRAM(图形模式有效)
178 1 LCD_Write_Funtion(0xF0,0xA0) ;//字符字体控制
179 1 LCD_Write_Funtion(0xF1,0x0F) ;//字符点阵大小控制
180 1 /////39
181 1 }
182 //////////清除文本层显示数据///////////////////
183 void LCD_Clear_Text(void)
184 {
185 1 uchar i,j;
186 1 LCD_Write_Funtion(0x00,0xCD); //文本模式
187 1 LCD_Write_Funtion(0x60,0x00) ;//地址定位
188 1 LCD_Write_Funtion(0x70,0x00) ;//地址定位
189 1 for(i=0;i<16;i++)/////共16//////
190 1 {
191 2 for(j=0;j<30;j++)
192 2 LCD_Write_Dat(0x00); ////每页连续写入40个数据/////
193 2 }
194 1 }
195 //////////清除图形层显示数据///////////////////
196 void LCD_Clear_Graphics(void)
197 {
198 1 uchar i,j;
199 1 LCD_Write_Funtion(0x00,0xC5); //图形模式
200 1 LCD_Write_Funtion(0x60,0x00) ;//地址定位
201 1 LCD_Write_Funtion(0x70,0x00) ;//地址定位
202 1 for(i=0;i<128;i++)/////共16//////
203 1 {
204 2 for(j=0;j<30;j++)
205 2 LCD_Write_Dat(0x00); ////每页连续写入40个数据/////
206 2 }
207 1 }
208 ////////////////////////////////////
209 void main(void)
210 {
211 1
212 1 P0=0x8f;//AT89C51的IO口初始化//
213 1 Delay(20);
214 1 P0=0x9f;
215 1 P1=0xff;//AT89C51的IO口初始化//
216 1
217 1 LCD_Init();
218 1 LCD_Clear_Text();//////清除文本层显示数据///////////////////////
219 1 LCD_Clear_Graphics();//清除图形层显示数据//
220 1
221 1 LCD_Write_Funtion(0x00,0xCD);//文本模式
222 1 LCD_Write_Funtion(0x60,0x00) ;//地址定位
223 1 LCD_Write_Funtion(0x70,0x00) ;//地址定位
224 1 LCD_Write_Dat(0xA4);
225 1 LCD_Write_Dat(0xA4);
226 1 LCD_Write_Dat(0xA4);
227 1 LCD_Write_Dat(0xE5);//
228 1 LCD_Write_Dat(0xB1);
229 1 LCD_Write_Dat(0xB1);
230 1 LCD_Write_Dat(0xA8);
231 1 LCD_Write_Dat(0xEE);
232 1 LCD_Write_Dat(0xBE);
233 1 LCD_Write_Dat(0xB9);
234 1 while(1)
235 1 {
236 2 ;
237 2 }
238 1 }
C51 COMPILER V7.50 LCD 05/09/2008 16:12:47 PAGE 5
239 /*
240
241 //////////////LCD左半屏清屏///////可实现全部、上部分、左部分、右部分的清屏功能////////////////////////////
-/////
242 void LCD_L_Clear( uchar ZB_y,/////参数ZB_y是液晶屏的64X64的点坐标系的y轴向右横向坐标值//////
243 ///////x轴向上纵向坐标值固定为64, 坐标(64,ZB_y)确定了清屏的起点////////////////////////////////
244 uchar yy,////清屏的列数由yy确定////////
245 uchar page)/////清屏到那页为止,由page值确定, page的范围是0-7///////
246 {
247 uchar i,j;
248 if((64-ZB_y)>=yy)
249 {
250 for(j=0;j<(page+1);j++)
251 {
252 LCD_WRTite_Com_L(0xc0|64);////从第64小行开始////
253 LCD_WRTite_Com_L(0xb8|j);////根据确定的小行位置开始,从第0页(即0大行)开始//////
254 LCD_WRTite_Com_L(0x40|ZB_y);/////从由ZB_y值确定的列开始////
255 for(i=0;i<yy;i++) LCD_WRTite_Dat_L(0x00); ////写入0x00清屏/////
256 }
257 }
258 }
259
260 ///////////////////左半屏/////////显示8x16点(横向右8点X纵向下16点)字符////////////////////////////////////
261 /////坐标(ZB_x,ZB_y)是液晶屏的64X64的点坐标,坐标系的方向为:x轴纵(行)坐标向上 ,y轴横(列)坐标向右/////////
262 /////左下角为坐标原点,左上角为(64,0)右下角为(0,64),该坐标用于确定在液晶屏的何处开始位置。//////////////
263 /////根据上面确定的显示位置为坐标原点,坐标(x,y)位置按8x8=64个点为一个点坐标来定位的,这时///////////////
264 /////坐标系的方向变更为:x轴纵(行)坐标向下,y轴横(列)坐标向右,x的范围是0-7,y的范围是0-7,////////////
265 ////////////////////////////chrx:显示字符的指定参数值/////////////////////////////////////////////////////
266 LCD_L_WRTite_Char_8x16(uchar ZB_x,uchar ZB_y,/////液晶屏的64X64的点坐标系////
267 uchar x,uchar y,/////显示坐标系////////////////
268 uchar chrx)/////显示内容的指定参数索引值///////
269 {
270 uchar i;
271 uint chr_m;
272 chr_m=chrx;
273 chr_m=chr_m*16;
274 LCD_WRTite_Com_L(0xc0|ZB_x);////////从第ZB_x小行开始////
275 LCD_WRTite_Com_L(0xb8|x); /////根据确定的小行位置开始,从第x页(即x大行)开始//////
276 LCD_WRTite_Com_L(0x40|ZB_y|y<<3);/////从由ZB_y值确定的列,由y值确定的点位置开始/////
277 for(i=0;i<8;i++) LCD_WRTite_Dat_L(Ezk[chr_m+i]); ////根据确定的具体点位置处写入8个数据//字符的上半部分/
-//
278 LCD_WRTite_Com_L(0xb9|x); ////再从第x+1页(即x+1大行)开始////////
279 LCD_WRTite_Com_L(0x40|ZB_y|y<<3);/////从由ZB_y值确定的列,由y值确定的点位置开始/////
280 for(i=8;i<16;i++) LCD_WRTite_Dat_L(Ezk[chr_m+i]);////根据确定的具体点位置处写入8个数据//字符的下半部分/
-//
281 }
282
283 ////////左半屏/////////显示16x16点(横向右16点X纵向下16点)的汉字字符////////////////////////////////////
284 LCD_L_WRTite_Hanzi_16x16(uchar ZB_x,uchar ZB_y,
285 uchar x,uchar y,
286 uchar chrx)
287 {
288 uchar i;
289 uint chr_m;
290 chr_m=chrx;
291 chr_m=chr_m*32;
292 LCD_WRTite_Com_L(0xc0|ZB_x);////////////从第ZB_x小行开始////
293 LCD_WRTite_Com_L(0xb8|x); ////根据确定的小行位置开始,从第x页(即x大行)开始//////
294 LCD_WRTite_Com_L(0x40|ZB_y|y<<3);/////从由ZB_y值确定的列,由y值确定的点位置开始/////
295 for(i=0;i<16;i++) LCD_WRTite_Dat_L(Hzk1[chr_m+i]);////根据确定的具体点位置处写入16个数据//汉字的上半部
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -