📄 12232drivers.lst
字号:
274 1 send_si(disp_on);
275 1 }
276
277 //清屏
278 void lcd_clr(void)
279 {
280 1 uchar i, page;
281 1 for (page=0;page<4;page++)
282 1 {
283 2 send_mi(page_addr_set|page); //0xb8 10111000
284 2 send_si(page_addr_set|page);
285 2 send_mi(0); //主窗口设置为0列
286 2 send_si(0); //从窗口设置为0列
287 2 for (i=0;i<62;i++)
288 2 {
289 3 send_md(0x00);
290 3 send_sd(0x00);
291 3 }
292 2 }
293 1 }
294
295 void lcd_clr1(uchar page,uchar i,uchar withe,uchar mode)
296 {
297 1 //uchar page;
298 1 //for (page=0;page<4;page++)
299 1 //{
300 1 uchar k;
301 1 send_mi(page_addr_set|page); //0xb8 10111000
302 1 send_si(page_addr_set|page);
303 1 send_mi(i);
C51 COMPILER V7.50 12232DRIVERS 05/28/2007 15:49:30 PAGE 6
304 1 send_si(i);
305 1 //for (i=0;i<62;i++)
306 1 for(k=i;k<(i+withe);k++)
307 1 {
308 2 //send_md(0x00);
309 2 //send_sd(0x00);
310 2 if(mode)
311 2 {
312 3 send_md(0); //左屏
313 3 // send_sd(0);
314 3 }
315 2 else send_sd(0); //右屏
316 2 }
317 1 //}
318 1 }
319 void lcd_clr2()
320 {
321 1 lcd_clr1(0,6,54,1);
322 1 lcd_clr1(1,6,54,1);
323 1 lcd_clr1(2,6,54,1);
324 1 lcd_clr1(3,6,54,1);
325 1 lcd_clr1(0,6,54,0);
326 1 lcd_clr1(1,6,54,0);
327 1 lcd_clr1(2,6,54,0);
328 1 lcd_clr1(3,6,54,0);
329 1 }
330
331 //同时设置主(右)从(左)显示页为0~3页
332 void set_page(uchar page)
333 {
334 1 send_mi(page_addr_set|page);
335 1 send_si(page_addr_set|page);
336 1 }
337
338 //同时设置主(右)从(左)列地址为0~61列
339 void set_address(uchar address)
340 {
341 1 send_mi(address&0x7F); //&0x7F,考虑到防止越限
342 1 send_si(address&0x7F);
343 1 }
344
345 //在右页(从窗口)当前地址画一个字节(8点)
346
347 void putchar_l(uchar c)
348 {
349 1 send_md(c);
350 1 }
351
352 //在左页(主窗口)当前地址画一个字节(8点)
353
354 void putchar_r(uchar c)
355 {
356 1 send_sd(c);
357 1 }
358
359 //画一个图,横坐标是col,layer表示上下层,width是图形的宽,高固定16
360 // bmp是图形指针
361 // 使用zimo21软件,采用纵向取模下高位得到bmp数据。
362 // col 图型的起始位置0~121
363 // layer 图形的位置(Y坐标)0-下半部分 非0-上半部分
364 // width 图形宽度8,16可选
365 // bmp 图形数据指针
C51 COMPILER V7.50 12232DRIVERS 05/28/2007 15:49:30 PAGE 7
366
367 void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
368 {
369 1 uchar x;
370 1 uchar address; //address表示显存的物理地址
371 1 uchar p=0;
372 1 uchar page=0;
373 1 uchar window=0; //page表示上下两页,window表示左右窗口(0
374 1 //左,1右)
375 1 if (layer) page=2; //左-主窗口,右-从窗口
376 1
377 1 for (x=col; x<col+width; x++)
378 1 {
379 2 if (x>121)return; //防止显示乱码
380 2 if (x>60) //左右窗口定位
381 2 {
382 3 window=1; //右-从窗口
383 3 address=x%61;
384 3 }
385 2 else
386 2 address=x; //主窗口输出
387 2
388 2 set_page(page); //上层数据输出
389 2 set_address(address);
390 2
391 2 if (window)
392 2 putchar_r(bmp[p]);
393 2 else
394 2 putchar_l(bmp[p]);
395 2
396 2 set_page(page+1); //下层数据输出
397 2 set_address(address); //列保持不变
398 2
399 2 if (window)
400 2 putchar_r(bmp[p+width]);
401 2 else
402 2 putchar_l(bmp[p+width]);
403 2
404 2 p++;
405 2 }
406 1 }
407 void draw_bmp1(uchar col,uchar width,uchar *bmp)
408 {
409 1 uchar x;
410 1 uchar address; //address表示显存的物理地址
411 1 uchar p=0;
412 1 uchar page=0;
413 1 uchar window=0; //page表示上下两页,window表示左右窗口(0
414 1 //左,1右)
415 1 // if (layer) page=2; //左-主窗口,右-从窗口
416 1
417 1 for (x=col; x<col+width; x++)
418 1 {
419 2 if (x>121)return; //防止显示乱码
420 2 if (x>60) //左右窗口定位
421 2 {
422 3 window=1; //右-从窗口
423 3 address=x%61;
424 3 }
425 2 else
426 2 address=x; //主窗口输出
427 2
C51 COMPILER V7.50 12232DRIVERS 05/28/2007 15:49:30 PAGE 8
428 2 set_page(page); //上层数据输出
429 2 set_address(address);
430 2
431 2 if (window)
432 2 putchar_r(bmp[p]);
433 2 else
434 2 putchar_l(bmp[p]);
435 2
436 2 set_page(page+1); //下层数据输出
437 2 set_address(address); //列保持不变
438 2
439 2 if (window)
440 2 putchar_r(bmp[p+width]);
441 2 else
442 2 putchar_l(bmp[p+width]);
443 2
444 2 //page=2;
445 2 set_page(page+2); //上层数据输出
446 2 set_address(address);
447 2
448 2 if (window)
449 2 putchar_r(bmp[p+2*width]);
450 2 else
451 2 putchar_l(bmp[p+2*width]);
452 2
453 2 set_page(page+3); //下层数据输出
454 2 set_address(address); //列保持不变
455 2
456 2 if (window)
457 2 putchar_r(bmp[p+3*width]);
458 2 else
459 2 putchar_l(bmp[p+3*width]);
460 2
461 2 p++;
462 2 }
463 1
464 1
465 1 }
466
467 //显示单个ASCII码col-列;layer-上下行:1-上,0-下;ascii_code:所要显示德ASCCII码
468
469 void disp_one_ascii(uchar col,uchar layer,uchar ascii_code,uchar mode)
470 {
471 1 uchar i;
472 1 for(i=0;i<16;i++) //ASCII码显示占用16个字节
473 1 {
474 2 if(mode)dot_buffer[i]=~ascii[(ascii_code-0x20)*16 + i];
475 2 else dot_buffer[i]= ascii[(ascii_code-0x20)*16 + i];
476 2 }
477 1 draw_bmp(col,layer,8,dot_buffer);
478 1 }
479
480 //显示小于4个的十进制数字
481 //修改缓冲区的大小可以扩展显示
482 #ifdef disp_ram_data
#define disp_ram_data
void disp_ram_data(uchar col,uchar layer,uchar n,uchar mode)
{
while(n--)
{
if(mode)disp_one_ascii(col,layer,disp_buffer[n]+0x30,1);
else disp_one_ascii(col,layer,disp_buffer[n]+0x30,0);
C51 COMPILER V7.50 12232DRIVERS 05/28/2007 15:49:30 PAGE 9
col += 8;
}
}
#endif
494
495 //ASCII(8*16) 和 汉字(16*16)显示函数
496
497 void dprintf(uchar col,uchar layer,uchar *ptr,uchar mode)
498 {
499 1 uchar c1,c2;
500 1 uchar i,j,k;
501 1 uchar ulen;
502 1 //uchar ucol,ulayer,umode;
503 1 uchar ucol,ulayer;
504 1 ulen = 0;
505 1 ucol = col;
506 1 ulayer = layer;
507 1
508 1 while (ptr[ulen]!= 0)ulen++; //探测字串长度
509 1 i=0;
510 1 while(i<ulen)
511 1 {
512 2 c1 = ptr[i];
513 2 c2 = ptr[i+1];
514 2 //ASCII字符与汉字内码的区别在于128做
515 2 //分界;大于128的为汉字码
516 2 if(c1 <=128) //ASCII
517 2 {
518 3 if(mode)disp_one_ascii(ucol,ulayer,c1,1);
519 3 else disp_one_ascii(ucol,ulayer,c1,0);
520 3 ucol+=8;
521 3 i++; //ASCII码的处理
522 3 }
523 2 else //中文
524 2 {
525 3 for(j=0;j<sizeof(hz16)/sizeof(hz16[0]);j++)
526 3 { //查找定位当前汉字的点阵区
527 4 if((c1 == hz16[j].index[0]) && (c2 == hz16[j].index[1]))
528 4 break;
529 4 }
530 3 for(k=0;k<32;k++)
531 3 { if(mode)dot_buffer[k]=~hz16[j].zimo[k];
532 4 else dot_buffer[k]= hz16[j].zimo[k];
533 4 }
534 3 draw_bmp(ucol,ulayer,16,dot_buffer);
535 3 ucol+=16;
536 3 i+=2; //中文的处理
537 3 }
538 2 }
539 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1686 ----
CONSTANT SIZE = 1462 ----
XDATA SIZE = 42 50
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -