📄 12232driver.lst
字号:
257 1 A = 0; //指令
258 1 RW = 0; //写触发
259 1 data=instruction; //指令码
260 1 E2 = 0; //关Slaver
261 1 }
262
263 ////////////////////////////////////////////////////////////////////////////////
264 //调用方式:void send_sd(uchar data)
265 //函数说明:发数据data到从窗口(内函数,私有,用户不直接调用)
266 ////////////////////////////////////////////////////////////////////////////////
267 void send_sd(uchar c)
268 {
269 1 E1 = 0; //关Master
270 1 E2 = 1; //开Slaver
271 1 wait_ready(); //判断忙
272 1 A = 1; //数据
273 1 RW = 0; //写触发
274 1 data = c; //数据
275 1 E2 = 0; //关Slaver
276 1 }
277
278 ////////////////////////////////////////////////////////////////////////////////
279 //等待ready:等待LCD内部操作完成,判忙
280 ////////////////////////////////////////////////////////////////////////////////
281 void wait_ready(void)
282 {
283 1 A = 0; //指令
284 1 RW = 1; //读
285 1 _nop_(); //空操作,产生汇编里面的nop
286 1 while(data & status_busy); //读入LCD状态,1=忙,一直等待LCD内部操作完成
287 1 }
288
289 ////////////////////////////////////////////////////////////////////////////////
290 //调用方式:void lcd_init(void)
291 //函数说明:122x32LCD初始化,开机后仅调用一次
292 ////////////////////////////////////////////////////////////////////////////////
293 void lcd_init(void)
294 {
295 1 send_mi(reset); //复位m-left,s-right
296 1 send_si(reset);
297 1
298 1 send_mi(disp_off); //关闭显示
299 1 send_si(disp_off);
300 1
301 1 send_mi(dynamic_driver);//动态驱动
302 1 send_si(dynamic_driver);
303 1
C51 COMPILER V7.09 12232DRIVER 10/07/2004 17:58:58 PAGE 6
304 1 send_mi(clk32); //1/32占空比
305 1 send_si(clk32);
306 1
307 1 send_mi(adc_select); //clockwise
308 1 send_si(adc_select);
309 1
310 1 send_mi(modeRWite); //写模式结束
311 1 send_si(modeRWite);
312 1
313 1 send_mi(col_addr_set); //归回零列,设定显示起始行首
314 1 send_mi(disp_start_line);
315 1 send_si(col_addr_set);
316 1 send_si(disp_start_line);
317 1
318 1 send_mi(disp_on); //开显示
319 1 send_si(disp_on);
320 1 }
321
322 ////////////////////////////////////////////////////////////////////////////////
323 //调用方式:void lcd_clr(void)
324 //函数说明:清屏
325 ////////////////////////////////////////////////////////////////////////////////
326 void lcd_clr(void)
327 {
328 1 uchar i, page;
329 1 for (page=0;page<4;page++)
330 1 {
331 2 send_mi(page_addr_set|page);//设置页从0-3
332 2 send_si(page_addr_set|page);
333 2 send_mi(0); //主窗口设置为0列
334 2 send_si(0); //从窗口设置为0列
335 2 for (i=0;i<62;i++) //全部写入0x00
336 2 {
337 3 send_md(0x00);
338 3 send_sd(0x00);
339 3 }
340 2 }
341 1 }
342
343 ////////////////////////////////////////////////////////////////////////////////
344 //调用方式:void set_page(uchar page)
345 //函数说明:同时设置主(右)从(左)显示页为0-3页
346 ////////////////////////////////////////////////////////////////////////////////
347 void set_page(uchar page)
348 {
349 1 send_mi(page_addr_set|page);
350 1 send_si(page_addr_set|page);
351 1 }
352
353 ////////////////////////////////////////////////////////////////////////////////
354 //调用方式:void SetAddress(uchar address)
355 //函数说明:同时设置主(右)从(左)列地址为0-61列
356 ////////////////////////////////////////////////////////////////////////////////
357 void set_address(uchar address)
358 {
359 1 send_mi(address&0x7F); //&0x7F,考虑到防止越限
360 1 send_si(address&0x7F);
361 1 }
362
363 ////////////////////////////////////////////////////////////////////////////////
364 //调用方式:void putchar_l(uchar c)
365 //函数说明:在左页(主窗口)当前地址画一个字节(8点)
C51 COMPILER V7.09 12232DRIVER 10/07/2004 17:58:58 PAGE 7
366 ////////////////////////////////////////////////////////////////////////////////
367 void putchar_l(uchar c)
368 {
369 1 send_md(c);
370 1 }
371
372 ////////////////////////////////////////////////////////////////////////////////
373 //调用方式:void putchar_r(uchar c)
374 //函数说明:在右页(从主窗口)当前地址画一个字节(8点)
375 ////////////////////////////////////////////////////////////////////////////////
376 void putchar_r(uchar c)
377 {
378 1 send_sd(c);
379 1 }
380
381 ////////////////////////////////////////////////////////////////////////////////
382 //调用方式:void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
383 //函数说明:画一个图,横坐标是col,layer表示上下层,width是图形的宽,高固定16
384 // bmp是图形指针
385 // 使用Zimo3Pro软件,采用纵向取模,字节倒序得到数据。
386 // col 图型的起始位置0~121
387 // layer 图形的位置(Y坐标)0-上半部分 非0-下半部分
388 // width 图形宽度8,16可选
389 // bmp 图形数据指针
390 ////////////////////////////////////////////////////////////////////////////////
391 void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
392 {
393 1 uchar x;
394 1 uchar address; //address表示显存的物理地址
395 1 uchar p=0;
396 1 uchar page=0;
397 1 uchar window=0; //page表示上下两页,window表示左右窗口(0左,1右)
398 1 if (layer) page=2; //左-主窗口,右-从窗口
399 1
400 1 for (x=col; x<col+width; x++)
401 1 {
402 2 if (x>121)return; //防止显示乱码
403 2 if (x>60) //左右窗口定位
404 2 {
405 3 window=1; //右-从窗口
406 3 address=x%61;
407 3 }
408 2 else
409 2 {
410 3 address=x;
411 3 } //主窗口输出
412 2
413 2 set_page(page); //上层数据输出
414 2 set_address(address);
415 2
416 2 if (window)
417 2 {
418 3 putchar_r(bmp[p]);
419 3 }
420 2 else
421 2 {
422 3 putchar_l(bmp[p]);
423 3 }
424 2
425 2 set_page(page+1); //下层数据输出
426 2 set_address(address); //列保持不变
427 2
C51 COMPILER V7.09 12232DRIVER 10/07/2004 17:58:58 PAGE 8
428 2 if (window)
429 2 {
430 3 putchar_r(bmp[p+width]);
431 3 }
432 2 else
433 2 {
434 3 putchar_l(bmp[p+width]);
435 3 }
436 2 p++;
437 2 }
438 1 }
439
440
441
442
443 /*------------------------------------------------------------------------------
444 延时程序:入口unsinged char i ,延时i毫秒
445 -------------------------------------------------------------------------------*/
446
447 delay(uchar i)
448 {
449 1 uchar j;
450 1 for(i=i<<1;i>0;i--)
451 1 for(j=0xf3;j>0;j--)
452 1 {}
453 1 }
454
455 //////////////////////////////////////////////////////////////////////////////
456 //键盘扫描程序,有键按下,修改key值
457 //////////////////////////////////////////////////////////////////////////////
458 keywork(void)
459 {
460 1 if(!(up&&down)) //是否有键按下
461 1 {
462 2 delay(20); //延时5MS
463 2 if(up&&down) //再次判断是否有键按下,没有返回
464 2 {
465 3 return;
466 3 }
467 2 if(!up) //查up键
468 2 {
469 3 while(!up); //等待up键释放
470 3 key ++; //key值加1
471 3 LED = 0; //亮背光
472 3 TR0 = 1; //开定时器0,背光亮10S
473 3 time_counter = 0;//清定时器软件计数器,从按键以后亮背光10S
474 3 if (key == 3) //key值超上限,置下限
475 3 {
476 4 key = 0;
477 4 }
478 3 return;
479 3 }
480 2 if(!down) //查down键
481 2 {
482 3 while(!down); //等待down键释放
483 3 key --; //key值减1
484 3 LED = 0; //亮背光
485 3 TR0 = 1; //开定时器0,背光亮10S
486 3 time_counter = 0;//清定时器软件计数器,从按键以后亮背光10S
487 3 if (key ==255)
488 3 {
489 4 key = 2; ////key值超上限,置下限
C51 COMPILER V7.09 12232DRIVER 10/07/2004 17:58:58 PAGE 9
490 4 }
491 3 return;
492 3 }
493 2 }
494 1
495 1
496 1 }
497
498 disp_transit()
499 {
500 1 uchar j, row = 0 ,temp;
501 1 temp = (serial_buff[25]*10+serial_buff[26])*3/5; //经度最后.XX分转换位秒
502 1 serial_buff[25] = temp/10;
503 1 serial_buff[26] = temp%10;
504 1 temp = (serial_buff[12]*10+serial_buff[13])*3/5; //纬度最后.XX分转换为秒
505 1 serial_buff[12] = temp/10;
506 1 serial_buff[13] = temp%10;
507 1 lcd_clr(); //清屏
508 1 draw_bmp(0,0,16,azimuth[serial_buff[30]-20]); //判断东、西,并显示
509 1 draw_bmp(16,0,16,jing); //显示'经'
510 1 draw_bmp(32,0,8,num[13]); //显示':'
511 1 for(j = 19;j<28;j++) //显示经度
512 1 {
513 2 if (j == 22)
514 2 {
515 3 draw_bmp(40+row*8,0,8,num[11]); //显示数字度符号
516 3 row++;
517 3 }
518 2 if (j == 24)
519 2 {
520 3 draw_bmp(40+row*8,0,8,num[12]); //显示'''(分)
521 3 row++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -