📄 12232drivers.lst
字号:
236 lcd_clr1(1,6,54,1);
237 lcd_clr1(2,6,54,1);
238 lcd_clr1(3,6,54,1);
239 lcd_clr1(0,6,54,0);
240 lcd_clr1(1,6,54,0);
241 lcd_clr1(2,6,54,0);
C51 COMPILER V7.50 12232DRIVERS 09/26/2007 17:19:04 PAGE 5
242 lcd_clr1(3,6,54,0);
243 } */
244
245 //同时设置主(右)从(左)显示页为0~3页
246 void set_page(uchar page)
247 {
248 1 send_mi(page_addr_set|page);
249 1 send_si(page_addr_set|page);
250 1 }
251
252 //同时设置主(右)从(左)列地址为0~61列
253 void set_address(uchar address)
254 {
255 1 send_mi(address&0x7F); //&0x7F,考虑到防止越限
256 1 send_si(address&0x7F);
257 1 }
258
259 //在右页(从窗口)当前地址画一个字节(8点)
260
261 void putchar_l(uchar c)
262 {
263 1 send_md(c);
264 1 }
265
266 //在左页(主窗口)当前地址画一个字节(8点)
267
268 void putchar_r(uchar c)
269 {
270 1 send_sd(c);
271 1 }
272
273 //画一个图,横坐标是col,layer表示上下层,width是图形的宽,高固定16
274 // bmp是图形指针
275 // 使用zimo21软件,采用纵向取模下高位得到bmp数据。
276 // col 图型的起始位置0~121
277 // layer 图形的位置(Y坐标)0-下半部分 非0-上半部分
278 // width 图形宽度8,16可选
279 // bmp 图形数据指针
280
281 void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
282 {
283 1 uchar x;
284 1 uchar address; //address表示显存的物理地址
285 1 uchar p=0;
286 1 uchar page=0;
287 1 uchar window=0; //page表示上下两页,window表示左右窗口(0
288 1 //左,1右)
289 1 if (layer) page=2; //左-主窗口,右-从窗口
290 1
291 1 for (x=col; x<col+width; x++)
292 1 {
293 2 if (x>121)return; //防止显示乱码
294 2 if (x>60) //左右窗口定位
295 2 {
296 3 window=1; //右-从窗口
297 3 address=x%61;
298 3 }
299 2 else
300 2 address=x; //主窗口输出
301 2
302 2 set_page(page); //上层数据输出
303 2 set_address(address);
C51 COMPILER V7.50 12232DRIVERS 09/26/2007 17:19:04 PAGE 6
304 2
305 2 if (window)
306 2 putchar_r(bmp[p]);
307 2 else
308 2 putchar_l(bmp[p]);
309 2
310 2 set_page(page+1); //下层数据输出
311 2 set_address(address); //列保持不变
312 2
313 2 if (window)
314 2 putchar_r(bmp[p+width]);
315 2 else
316 2 putchar_l(bmp[p+width]);
317 2
318 2 p++;
319 2 }
320 1 }
321 /*
322 void draw_bmp1(uchar col,uchar width,uchar *bmp)
323 {
324 uchar x;
325 uchar address; //address表示显存的物理地址
326 uchar p=0;
327 uchar page=0;
328 uchar window=0; //page表示上下两页,window表示左右窗口(0
329 //左,1右)
330 // if (layer) page=2; //左-主窗口,右-从窗口
331
332 for (x=col; x<col+width; x++)
333 {
334 if (x>121)return; //防止显示乱码
335 if (x>60) //左右窗口定位
336 {
337 window=1; //右-从窗口
338 address=x%61;
339 }
340 else
341 address=x; //主窗口输出
342
343 set_page(page); //上层数据输出
344 set_address(address);
345 // set_page(page+2); //上层数据输出
346 // set_address(address);
347
348 if (window)
349 putchar_r(bmp[p]);
350 else
351 putchar_l(bmp[p]);
352
353 set_page(page+1); //下层数据输出
354 set_address(address); //列保持不变
355 // set_page(page+3); //下层数据输出
356 // set_address(address);
357
358 if (window)
359 putchar_r(bmp[p+width]);
360 else
361 putchar_l(bmp[p+width]);
362
363 //page=2;
364 set_page(page+2); //上层数据输出
365 set_address(address);
C51 COMPILER V7.50 12232DRIVERS 09/26/2007 17:19:04 PAGE 7
366 // set_page(page); //上层数据输出
367 // set_address(address);
368
369 if (window)
370 putchar_r(bmp[p+2*width]);
371 else
372 putchar_l(bmp[p+2*width]);
373
374 set_page(page+3); //下层数据输出
375 set_address(address); //列保持不变
376 // set_page(page+1); //下层数据输出
377 // set_address(address);
378
379 if (window)
380 putchar_r(bmp[p+3*width]);
381 else
382 putchar_l(bmp[p+3*width]);
383
384 p++;
385 }
386
387
388 } */
389
390 //显示单个ASCII码col-列;layer-上下行:1-上,0-下;ascii_code:所要显示德ASCCII码
391
392 void disp_one_ascii(uchar col,uchar layer,uchar ascii_code,uchar mode)
393 {
394 1 uchar i;
395 1 for(i=0;i<16;i++) //ASCII码显示占用16个字节
396 1 {
397 2 if(mode)dot_buffer[i]=~ascii[(ascii_code-0x20)*16 + i];
398 2 else dot_buffer[i]= ascii[(ascii_code-0x20)*16 + i];
399 2 }
400 1 draw_bmp(col,layer,8,dot_buffer);
401 1 }
402
403 //显示小于4个的十进制数字
404 //修改缓冲区的大小可以扩展显示
405 #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);
col += 8;
}
}
#endif
417
418 //ASCII(8*16) 和 汉字(16*16)显示函数
419
420 void dprintf(uchar col,uchar layer,uchar *ptr,uchar mode)
421 {
422 1 uchar c1,c2;
423 1 uchar i,j,k;
424 1 uchar ulen;
425 1 //uchar ucol,ulayer,umode;
426 1 uchar ucol,ulayer;
427 1 ulen = 0;
C51 COMPILER V7.50 12232DRIVERS 09/26/2007 17:19:04 PAGE 8
428 1 ucol = col;
429 1 ulayer = layer;
430 1
431 1 while (ptr[ulen]!= 0)ulen++; //探测字串长度
432 1 i=0;
433 1 while(i<ulen)
434 1 {
435 2 c1 = ptr[i];
436 2 c2 = ptr[i+1];
437 2 //ASCII字符与汉字内码的区别在于128做
438 2 //分界;大于128的为汉字码
439 2 if(c1 <=128) //ASCII
440 2 {
441 3 if(mode)disp_one_ascii(ucol,ulayer,c1,1);
442 3 else disp_one_ascii(ucol,ulayer,c1,0);
443 3 ucol+=8;
444 3 i++; //ASCII码的处理
445 3 }
446 2 else //中文
447 2 {
448 3 for(j=0;j<sizeof(hz16)/sizeof(hz16[0]);j++)
449 3 { //查找定位当前汉字的点阵区
450 4 if((c1 == hz16[j].index[0]) && (c2 == hz16[j].index[1]))
451 4 break;
452 4 }
453 3 for(k=0;k<32;k++)
454 3 { if(mode)dot_buffer[k]=~hz16[j].zimo[k];
455 4 else dot_buffer[k]= hz16[j].zimo[k];
456 4 }
457 3 draw_bmp(ucol,ulayer,16,dot_buffer);
458 3 ucol+=16;
459 3 i+=2; //中文的处理
460 3 }
461 2 }
462 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1190 ----
CONSTANT SIZE = 1020 ----
XDATA SIZE = 32 40
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 + -