📄 lcd.lst
字号:
198 2 }
199 1 else
200 1 {
201 2 set_page_R(upage);
202 2 set_col_addr_R(ucol-64);
203 2 }
204 1 }
205
206 //---------------行列设置函数---------------------------
207 void SetRowCol(unsigned char urow, unsigned char ucol)
208 {
209 1 unsigned char page;
210 1 CurRow = urow;
211 1 CurCol = ucol;
212 1
213 1 switch(urow)
214 1 {
215 2 case 1:
216 2 page=0;
217 2 CurOffset=1;
218 2 break;
219 2 case 2:
220 2 page=1;
221 2 CurOffset=2;
222 2 break;
223 2 case 3:
224 2 page=3;
225 2 CurOffset=1;
226 2 break;
227 2 case 4:
228 2 page=4;
229 2 CurOffset=2;
230 2 break;
231 2 case 5:
232 2 page=6;
233 2 CurOffset=1;
C51 COMPILER V7.06 LCD 12/20/2008 10:18:35 PAGE 6
234 2 break;
235 2 }
236 1 SetPageCol(page,ucol);
237 1 }
238
239
240 //----------------字符显示函数------------------
241 void disp_char(unsigned char c)
242 {
243 1 unsigned char k,j,uPage,uCol,ch_r,ch_w;
244 1 unsigned char width;
245 1 unsigned char len;
246 1 uPage = GetPage();
247 1 uCol = GetCol();
248 1 len=sizeof(ASC_16)/sizeof(ASC_16[0]);
249 1 for(k=0;k<len;k++)
250 1 {
251 2 if(c == ASC_16[k].Index[0] )
252 2 break;
253 2 }
254 1 if(k<len)
255 1 {
256 2 if(c=='-'||c==':')
257 2 width=ASC_CHR_WIDTH-2;
258 2 else if(c=='|')
259 2 width=ASC_HZ_WIDTH-ASC_CHR_WIDTH;
260 2 else
261 2 width=ASC_CHR_WIDTH;
262 2
263 2 if(CurOffset==1) //下半部是写半个字节
264 2 {
265 3 for(j=0;j<width;j++)
266 3 {
267 4 SetPageCol(uPage,uCol+j);
268 4 ch_w=ASC_16[k].Msk[j];
269 4 if(uCol+j<64)
270 4 write_LCD(LEFT,DATA,ch_w);
271 4 else
272 4 write_LCD(RIGHT,DATA,ch_w);
273 4 }
274 3 SetPageCol(uPage+1,uCol);
275 3
276 3 for(j=0;j<width;j++)
277 3 {
278 4 SetPageCol(uPage+1,uCol+j);
279 4 if(uCol+j<64)
280 4 ch_r=read_LCD(LEFT);
281 4 else
282 4 ch_r=read_LCD(RIGHT);
283 4 ch_r&=0xf0;
284 4 ch_w=ASC_16[k].Msk[ASC_CHR_WIDTH+j]&0x0f;
285 4 ch_w|=ch_r;
286 4 SetPageCol(uPage+1,uCol+j);
287 4 if(uCol+j<64)
288 4 write_LCD(LEFT,DATA,ch_w);
289 4 else
290 4 write_LCD(RIGHT,DATA,ch_w);
291 4 }
292 3 }
293 2 else //上半部是写半个字节
294 2 {
295 3 for(j=0;j<width;j++)
C51 COMPILER V7.06 LCD 12/20/2008 10:18:35 PAGE 7
296 3 {
297 4 SetPageCol(uPage,uCol+j);
298 4 if(uCol+j<64)
299 4 ch_r=read_LCD(LEFT);
300 4 else
301 4 ch_r=read_LCD(RIGHT);
302 4 ch_r&=0x0f;
303 4 ch_w=ASC_16[k].Msk[j];
304 4 ch_w=ch_w<<4;
305 4 ch_w|=ch_r;
306 4 SetPageCol(uPage,uCol+j);
307 4 if(uCol+j<64)
308 4 write_LCD(LEFT,DATA,ch_w);
309 4 else
310 4 write_LCD(RIGHT,DATA,ch_w);
311 4 }
312 3 SetPageCol(uPage+1,uCol);
313 3 for(j=0;j<width;j++)
314 3 {
315 4 SetPageCol(uPage+1,uCol+j);
316 4
317 4 ch_r=ASC_16[k].Msk[j];
318 4 ch_w=ASC_16[k].Msk[ASC_CHR_WIDTH+j];
319 4 ch_r=ch_r>>4;
320 4 ch_w=ch_w<<4;
321 4 ch_w|=ch_r;
322 4 SetPageCol(uPage+1,uCol+j);
323 4 if(uCol+j<64)
324 4 write_LCD(LEFT,DATA,ch_w);
325 4 else
326 4 write_LCD(RIGHT,DATA,ch_w);
327 4 }
328 3 }
329 2 }
330 1 SetPageCol(uPage,uCol+width);
331 1 }
332
333
334 //---------------汉字显示函数------------------
335 void disp_hz(unsigned char *hz)
336 {
337 1 unsigned char k,j,uPage,uCol,ch_r,ch_w;
338 1 uPage = GetPage();
339 1 uCol = GetCol();
340 1 for(k=0;k<sizeof(GB_16)/sizeof(GB_16[0]);k++)
341 1 {
342 2 if(hz[0] == GB_16[k].Index[0] && hz[1] == GB_16[k].Index[1])
343 2 break;
344 2 }
345 1
346 1 if(CurOffset==1)
347 1 {
348 2 for(j=0;j<ASC_HZ_WIDTH;j++)
349 2 {
350 3 SetPageCol(uPage,uCol+j);
351 3 ch_w=GB_16[k].Msk[j];
352 3 if(uCol+j<64) write_LCD(LEFT,DATA,ch_w);
353 3 else write_LCD(RIGHT,DATA,ch_w);
354 3 }
355 2 SetPageCol(uPage+1,uCol);
356 2
357 2 for(j=0;j<ASC_HZ_WIDTH;j++)
C51 COMPILER V7.06 LCD 12/20/2008 10:18:35 PAGE 8
358 2 {
359 3 SetPageCol(uPage+1,uCol+j);
360 3 if(uCol+j<64)
361 3 ch_r=read_LCD(LEFT);
362 3 else
363 3 ch_r=read_LCD(RIGHT);
364 3 ch_r&=0xf0;
365 3 ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j]&0x0f;
366 3 ch_w|=ch_r;
367 3 SetPageCol(uPage+1,uCol+j);
368 3 if(uCol+j<64)
369 3 write_LCD(LEFT,DATA,ch_w);
370 3 else
371 3 write_LCD(RIGHT,DATA,ch_w);
372 3 }
373 2 SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
374 2 }
375 1
376 1 else //汉字上半部是写半个字节
377 1 {
378 2 for(j=0;j<ASC_HZ_WIDTH;j++)
379 2 {
380 3 SetPageCol(uPage,uCol+j);
381 3 if(uCol+j<64)
382 3 ch_r=read_LCD(LEFT);
383 3 else ch_r=read_LCD(RIGHT);
384 3 ch_r&=0x0f;
385 3 ch_w=GB_16[k].Msk[j];
386 3 ch_w=ch_w<<4;
387 3 ch_w|=ch_r;
388 3 SetPageCol(uPage,uCol+j);
389 3 if(uCol+j<64)
390 3 write_LCD(LEFT,DATA,ch_w);
391 3 else
392 3 write_LCD(RIGHT,DATA,ch_w);
393 3 }
394 2 SetPageCol(uPage+1,uCol);
395 2 for(j=0;j<ASC_HZ_WIDTH;j++)
396 2 {
397 3 SetPageCol(uPage+1,uCol+j);
398 3
399 3 ch_r=GB_16[k].Msk[j];
400 3 ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j];
401 3 ch_r=ch_r>>4;
402 3 ch_w=ch_w<<4;
403 3 ch_w|=ch_r;
404 3 SetPageCol(uPage+1,uCol+j);
405 3 if(uCol+j<64)
406 3 write_LCD(LEFT,DATA,ch_w);
407 3 else
408 3 write_LCD(RIGHT,DATA,ch_w);
409 3 }
410 2 SetPageCol(uPage,uCol+ASC_HZ_WIDTH);
411 2 }
412 1 }
413
414
415 //-----------字符串显示函数----------------
416 void disp_str(unsigned char *p)
417 {
418 1 unsigned char i=0;
419 1 while(p[i]>0)
C51 COMPILER V7.06 LCD 12/20/2008 10:18:35 PAGE 9
420 1 {
421 2 if(p[i] < 128)
422 2 { /* ASCII */
423 3 disp_char(p[i]);
424 3 }
425 2 else
426 2 { /* 中文 */
427 3 disp_hz(&p[i]);
428 3 i++;
429 3 }
430 2 i++;
431 2 }
432 1 }
433
434
435 //-------------------绘点函数----------------------------------
436 //XX--(0-128) YY--(0-63) FLAG=1绘点 FLAG=0 清点
437 void GUI_Point(unsigned char xx,unsigned char yy,unsigned char flag)
438 {
439 1 unsigned int y,ch;
440 1 ch=yy%8; //余数
441 1
442 1 y=1;
443 1 for(;ch!=0;)
444 1 {
445 2 y=y*2;
446 2 ch--;
447 2 }
448 1 if(xx<64)
449 1 {
450 2 set_page_L(yy/8);
451 2 set_col_addr_L(xx);
452 2 ch=read_LCD(LEFT);
453 2 set_col_addr_L(xx);
454 2 if(flag)
455 2 write_LCD(LEFT,DATA,ch|y);
456 2 else
457 2 write_LCD(LEFT,DATA,ch&(~y));
458 2 }
459 1 else
460 1 {
461 2 set_page_R(yy/8);
462 2 set_col_addr_R(xx-64);
463 2 ch=read_LCD(RIGHT);
464 2 set_col_addr_R(xx-64);
465 2 if(flag)
466 2 write_LCD(RIGHT,DATA,ch|y);
467 2 else
468 2 write_LCD(RIGHT,DATA,ch&(~y));
469 2 }
470 1 }
C51 COMPILATION COMPLETE. 2 WARNING(S), 68 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -