📄 lcm_drive.lst
字号:
191 0x10, 0xFC, 0x12, 0x02, 0x04,
192 0x18, 0xA4, 0xA4, 0xA4, 0x7C,
193 0xFE, 0x10, 0x08, 0x08, 0xF0,
194 0x00, 0x88, 0xFA, 0x80, 0x00,
195 0x40, 0x80, 0x88, 0x7A, 0x00,
196 0xFE, 0x20, 0x50, 0x88, 0x00,
197 0x00, 0x82, 0xFE, 0x80, 0x00,
198 0xF8, 0x08, 0x30, 0x08, 0xF8,
199 0xF8, 0x10, 0x08, 0x08, 0xF0,
200 0x70, 0x88, 0x88, 0x88, 0x70
201 };
202
203 uint8 code ASCII_TAB70[80] = { 0xF8, 0x28, 0x28, 0x28, 0x10,
204 0x10, 0x28, 0x28, 0x30, 0xF8,
205 0xF8, 0x10, 0x08, 0x08, 0x10,
206 0x90, 0xA8, 0xA8, 0xA8, 0x40,
207 0x08, 0x7E, 0x88, 0x80, 0x40,
208 0x78, 0x80, 0x80, 0x40, 0xF8,
209 0x38, 0x40, 0x80, 0x40, 0x38,
210 0x78, 0x80, 0x60, 0x80, 0x78,
211 0x88, 0x50, 0x20, 0x50, 0x88,
212 0x18, 0xA0, 0xA0, 0xA0, 0x78,
213 0x88, 0xC8, 0xA8, 0x98, 0x88,
214 0x00, 0x10, 0x6C, 0x82, 0x00,
215 0x00, 0x00, 0xFE, 0x00, 0x00,
216 0x00, 0x82, 0x6C, 0x10, 0x00,
217 0x10, 0x10, 0x54, 0x38, 0x10,
218 0x10, 0x38, 0x54, 0x10, 0x10
219 };
220 uint8 code word[48]=
221 {0x00,0x00,0x30,0x04,0xCC,0x07,0x48,0x04,0xF8,0x7F,0x48,0x04,0x48,0x04,0x08,0x04,//"年",0
222 0x00,0x00,0x00,0x60,0xF8,0x1F,0x48,0x02,0x48,0x02,0x48,0x42,0xF8,0x7F,0x00,0x00, //"月",1
223 0x00,0x00,0x00,0x00,0xF8,0x7F,0x08,0x11,0x08,0x11,0x08,0x11,0xF8,0x3F,0x00,0x00};/*"日",2*/
224 /* (8 X 16 , 华文细黑 ) */
225 void LCM_DispWord(uint8 disp_cy, uint8 disp_cx,char dispdata)
226 { uint8 code *pchardata;
227 1 uint8 i;
228 1 // 参数过滤
229 1 disp_cy = disp_cy&0x07; //行
230 1 disp_cx = disp_cx&0x0f; //列
231 1
232 1 pchardata = &word[dispdata];
233 1
234 1
235 1 if( (disp_cx&0x08) == 0 ) // 选择液晶控制芯片(即CS1--控制前8个字符,CS2--控制后8个字符)
236 1 { i = disp_cx<<3; // 当前要写8列的首地址(把64列分为8个8列)
237 2 LCM_Wr1Command(LCM_ADDRSTRX+i); // 设置当前列地址,即列0x40(64)+i
238 2 LCM_Wr1Command(LCM_ADDRSTRY+disp_cy); // 设置当前页地址,即8行0xb8(8*23=184)+disp_cy
239 2
240 2 for(i=0; i<5; i++); //延时
C51 COMPILER V7.50 LCM_DRIVE 08/21/2007 11:05:02 PAGE 5
241 2
242 2 for(i=0; i<8; i++) //发送5列数据
243 2 { LCM_Wr1Data(*pchardata); // 发送数据 */
244 3 pchardata++; pchardata++;
245 3 }
246 2 }
247 1 else
248 1 { i = (disp_cx&0x07)<<3; // 若Y>7,则选取用CS2并且地址值要先减去8,再乘以8
249 2 LCM_Wr2Command(LCM_ADDRSTRX+i);
250 2 LCM_Wr2Command(LCM_ADDRSTRY+disp_cy); // 设置当前页地址,即8行
251 2
252 2 for(i=0; i<5; i++);
253 2
254 2 for(i=0; i<8; i++)
255 2 { LCM_Wr2Data(*pchardata); // 发送数据 */
256 3 pchardata++; pchardata++;
257 3 }
258 2 }
259 1 }
260
261
262 /***********************************************************************
263 * 名称:LCM_DispChar()
264 * 功能:指定地址显示字符。
265 * 入口参数:disp_cy 显示行值(0-7)
266 * disp_cx 显示列值(0-15)
267 * dispdata 所要显示的字符(ASCII码)
268 * 注:支持显示字符0-9、A-Z、a-z及空格,字符显示格式为5*7,模为8*8,所以
269 * 屏幕显示为8*16(共8行,每行16个字符)。
270 ***********************************************************************/
271 void LCM_DispChar(uint8 disp_cy, uint8 disp_cx, char dispdata)
272 { uint8 code *pchardata;
273 1 uint8 i;
274 1 // 参数过滤
275 1 disp_cy = disp_cy&0x07; //行
276 1 disp_cx = disp_cx&0x0f; //列
277 1
278 1 /* 先要找出显示数据的类型,并设置相应的点阵数据表,然后设置指针,以取得对应的点阵数据。 */
279 1 switch(dispdata&0xf0)
280 1 { case 0x20:
281 2 dispdata = (dispdata&0x0f)*5;
282 2 pchardata = &ASCII_TAB20[dispdata];
283 2 break;
284 2
285 2 case 0x30:
286 2 dispdata = (dispdata&0x0f)*5;
287 2 pchardata = &ASCII_TAB30[dispdata];
288 2 break;
289 2
290 2 case 0x40:
291 2 dispdata = (dispdata&0x0f)*5;
292 2 pchardata = &ASCII_TAB40[dispdata];
293 2 break;
294 2
295 2 case 0x50:
296 2 dispdata = (dispdata&0x0f)*5;
297 2 pchardata = &ASCII_TAB50[dispdata];
298 2 break;
299 2
300 2 case 0x60:
301 2 dispdata = (dispdata&0x0f)*5;
302 2 pchardata = &ASCII_TAB60[dispdata];
C51 COMPILER V7.50 LCM_DRIVE 08/21/2007 11:05:02 PAGE 6
303 2 break;
304 2
305 2 case 0x70:
306 2 dispdata = (dispdata&0x0f)*5;
307 2 pchardata = &ASCII_TAB70[dispdata];
308 2 break;
309 2
310 2 default:
311 2 pchardata = &ASCII_TAB20[0];
312 2 break;
313 2 } // end of switch(dispdata&0xf0)...
314 1
315 1
316 1 if( (disp_cx&0x08) == 0 ) // 选择液晶控制芯片(即CS1--控制前8个字符,CS2--控制后8个字符)
317 1 { i = disp_cx<<3; // 当前要写8列的首地址(把64列分为8个8列)
318 2 LCM_Wr1Command(LCM_ADDRSTRX+i); // 设置当前列地址,即列0x40(64)+i
319 2 LCM_Wr1Command(LCM_ADDRSTRY+disp_cy); // 设置当前页地址,即8行0xb8(8*23=184)+disp_cy
320 2
321 2 for(i=0; i<5; i++); //延时
322 2 LCM_Wr1Data(0x00); // 显示一列空格
323 2 for(i=0; i<5; i++) //发送5列数据
324 2 { LCM_Wr1Data(*pchardata); // 发送数据 */
325 3 pchardata++;
326 3 }
327 2 LCM_Wr1Data(0x00); // 显示一列空格
328 2 for(i=0; i<5; i++); //延时
329 2 LCM_Wr1Data(0x00); // 显示一列空格
330 2 }
331 1 else
332 1 { i = (disp_cx&0x07)<<3; // 若Y>7,则选取用CS2并且地址值要先减去8,再乘以8
333 2 LCM_Wr2Command(LCM_ADDRSTRX+i);
334 2 LCM_Wr2Command(LCM_ADDRSTRY+disp_cy); // 设置当前页地址,即8行
335 2
336 2 for(i=0; i<5; i++);
337 2 LCM_Wr2Data(0x00); // 显示一列空格
338 2 for(i=0; i<5; i++)
339 2 { LCM_Wr2Data(*pchardata); // 发送数据 */
340 3 pchardata++;
341 3 }
342 2 LCM_Wr2Data(0x00);
343 2 for(i=0; i<5; i++);
344 2 LCM_Wr2Data(0x00);
345 2 }
346 1 }
347
348
349 /***********************************************************************
350 * 名称:LCM_DispStr()
351 * 功能:字符串显示输出。
352 * 入口参数:disp_cy 显示起始行(0-7)
353 * disp_cx 显示起始列(0-15)
354 * disp_str 字串指针
355 * 出口参数:无
356 * 注:支持显示字符0-9、A-Z、a-z及空格,字符显示格式为5*7,模为8*8,所以屏幕显示
357 * 为8*16(共8行,每行16个字符)。
358 ***********************************************************************/
359 void LCM_DispStr(uint8 disp_cy, uint8 disp_cx, char *disp_str)
360 { while( *disp_str != '\0')
361 1 { // 参数过滤
362 2 disp_cy = disp_cy&0x07; //行
363 2 disp_cx = disp_cx&0x0f; //列
364 2 LCM_DispChar(disp_cy, disp_cx, *disp_str); // 显示字符
C51 COMPILER V7.50 LCM_DRIVE 08/21/2007 11:05:02 PAGE 7
365 2
366 2 disp_str++; // 指向下一字符数据
367 2 disp_cx++;
368 2 if(disp_cx>15) disp_cy++; // 指向下一显示行
369 2 }
370 1 }
371
372
373
374
375
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1057 ----
CONSTANT SIZE = 528 ----
XDATA SIZE = 1024 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 22
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -