📄 lcd160xb.lst
字号:
289 1 _lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
290 1 //////////////
291 1 //20061128(2-2)
292 1 _lcd160xb_judge_busy();
293 1 _lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND); //RE=0
294 1 //////////////
295 1
296 1 #endif
297 1 }
298
299
300 /********************************************************/
301 //序号:
302 // HD_LCD160XB_S04
C51 COMPILER V8.01 LCD160XB 12/08/2006 10:51:10 PAGE 6
303 //功能:
304 // 液晶上显示一行固定字符串
305 //输入:
306 // str 液晶显示的字符串
307 // line 指定的行号,=0/1 表示第1/2行
308 //输出:
309 // 无
310 //注意: 如果类型是1601B则第二行的显示也在液晶的第一行!
311 /********************************************************/
312 void lcd160xb_disp_str(uchar *str, uchar line)
313 {
314 1 //保证平时RE=0
315 1 uchar i;
316 1 #if (LCD_PORT ==PORT_WIDTH_4BIT)
#if (LCD_TYPE ==TYPE_LCD1601B)
i =line; //防止不使用line产生编译警告
i =0x80;
#else
i =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0);
#endif
_lcd160xb_judge_busy();
_lcd160xb_send_byte(i, CONST_LCD160XB_COMMAND);
for(i=0; i<CONST_LCD160XB_LINE_WIDTH; i++)
{
_lcd160xb_judge_busy();
_lcd160xb_send_byte(str[i], CONST_LCD160XB_DATA);
}
#elif (LCD_PORT ==PORT_WIDTH_4SPI)
i =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0);
_lcd160xb_send_byte(i, CONST_LCD160XB_COMMAND);
for(i=0; i<CONST_LCD160XB_LINE_WIDTH; i++)
{
_lcd160xb_send_byte(str[i], CONST_LCD160XB_DATA);
}
#elif (LCD_PORT ==PORT_WIDTH_3SPI)
i =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0);
_lcd160xb_send_byte(i, CONST_LCD160XB_COMMAND);
//RE =1, SET DATA LENGTH
_lcd160xb_send_byte(0x34,CONST_LCD160XB_COMMAND); //RE=1
_lcd160xb_send_byte(0x80 |(CONST_LCD160XB_LINE_WIDTH-1), CONST_LCD160XB_COMMAND);
//此命令后紧跟相应字节的数据
for(i=0; i<CONST_LCD160XB_LINE_WIDTH; i++)
{
_lcd160xb_send_byte(str[i], CONST_LCD160XB_DATA);
}
_lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND); //RE=0
#else
357 1
358 1 #if (LCD_TYPE ==TYPE_LCD1601B)
i =line; //防止不使用line产生编译警告
i =0x80;
#else
362 1 i =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0);
363 1 #endif
364 1 _lcd160xb_judge_busy();
C51 COMPILER V8.01 LCD160XB 12/08/2006 10:51:10 PAGE 7
365 1 _lcd160xb_send_byte(i, CONST_LCD160XB_COMMAND);
366 1
367 1 for(i=0; i<CONST_LCD160XB_LINE_WIDTH; i++)
368 1 {
369 2 _lcd160xb_judge_busy();
370 2 _lcd160xb_send_byte(str[i], CONST_LCD160XB_DATA);
371 2 }
372 1
373 1 #endif
374 1 }
375
376 /*
377 //********************************************************
378 //序号:
379 // HD_LCD160XB_S05
380 //功能:
381 // 在液晶指定位置上显示一个字符
382 //输入:
383 // ch 液晶显示的字符
384 // line 指定的行号,=0/1 表示第1/2行
385 // pos 字符在液晶上的显示位置,=0...15
386 //输出:
387 // 无
388 //注意: 如果类型是1601B则第二行的显示也在液晶的第一行!
389 //********************************************************
390 void lcd160xb_disp_char(uchar ch, uchar line, uchar pos)
391 {
392 #if (LCD_PORT ==PORT_WIDTH_4BIT)
393
394 #if (LCD_TYPE ==TYPE_LCD1601B)
395 line =0x80 |(pos &0x0f);
396 #else
397 line =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0)|(pos &0x0f);
398 #endif
399 _lcd160xb_judge_busy();
400 _lcd160xb_send_byte(line, CONST_LCD160XB_COMMAND);
401 _lcd160xb_judge_busy();
402 _lcd160xb_send_byte(ch, CONST_LCD160XB_DATA);
403
404 #elif (LCD_PORT ==PORT_WIDTH_4SPI)
405 line =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0)|(pos &0x0f);
406 _lcd160xb_send_byte(line, CONST_LCD160XB_COMMAND);
407 _lcd160xb_send_byte(ch, CONST_LCD160XB_DATA);
408
409 #elif (LCD_PORT ==PORT_WIDTH_3SPI)
410 line =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0)|(pos &0x0f);
411 _lcd160xb_send_byte(line, CONST_LCD160XB_COMMAND);
412
413 _lcd160xb_send_byte(0x80 |0x01, CONST_LCD160XB_COMMAND);
414 _lcd160xb_send_byte(ch, CONST_LCD160XB_DATA);
415
416 #else
417
418 while( (_lcd160xb_recv_byte(CONST_LCD160XB_COMMAND) &0x80) !=0);
419 #if (LCD_TYPE ==TYPE_LCD1601B)
420 line =0x80 |(pos &0x0f);
421 #else
422 line =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0)|(pos &0x0f);
423 #endif
424 _lcd160xb_send_byte(line, CONST_LCD160XB_COMMAND);
425 _lcd160xb_judge_busy();
426 _lcd160xb_send_byte(ch, CONST_LCD160XB_DATA);
C51 COMPILER V8.01 LCD160XB 12/08/2006 10:51:10 PAGE 8
427
428 #endif
429 }
430 */
431
432
433 /********************************************************/
434 //序号:
435 // HD_LCD160XB_S06
436 //功能:
437 // 液晶初始化,显示带光标闪烁的模式
438 //输入:
439 // 无
440 //输出:
441 // 无
442 /********************************************************/
443 void lcd160xb_init_set_with_cursor(void)
444 {
445 1 #if (LCD_PORT ==PORT_WIDTH_4BIT)
#if (LCD_TYPE ==TYPE_LCD1601B)
delay_x1ms(15);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_4BIT_1LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_4BIT_1LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_4BIT_1LINE,CONST_LCD160XB_COMMAND);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_4BIT_1LINE,CONST_LCD160XB_COMMAND);
#else //2行显示
delay_x1ms(50);
_lcd160xb_send_half_cmd(0x30);
delay_x1ms(10);
_lcd160xb_send_half_cmd(0x30);
delay_x1ms(1);
_lcd160xb_send_half_cmd(0x30);
delay_x1ms(1);
_lcd160xb_send_half_cmd(0x20);
delay_x1ms(1);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(0x28,CONST_LCD160XB_COMMAND);
#endif
_lcd160xb_judge_busy();
_lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_ON,CONST_LCD160XB_COMMAND);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(CMD_LCD160XB_CLR_SCREEN,CONST_LCD160XB_COMMAND);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_ON_CURSOR_FLUSH,CONST_LCD160XB_COMMAND);
lcd160xb_clr_scr();
lcd160xb_clr_scr();
delay_25us();
//RE=1, SelectCodeBank=Bank1, LcdLines=2,RE=0
_lcd160xb_judge_busy();
_lcd160xb_send_byte(0x24,CONST_LCD160XB_COMMAND);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(0x08,CONST_LCD160XB_COMMAND);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
C51 COMPILER V8.01 LCD160XB 12/08/2006 10:51:10 PAGE 9
_lcd160xb_judge_busy();
_lcd160xb_send_byte(0x20,CONST_LCD160XB_COMMAND);
////////////
#elif (LCD_PORT ==PORT_WIDTH_4SPI)
delay_x1ms(50);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_OFF,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(CMD_LCD160XB_CLR_SCREEN,CONST_LCD160XB_COMMAND);
delay_x1ms(11);
_lcd160xb_send_byte(CMD_LCD160XB_CURSE_SETS,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_ON_CURSOR_FLUSH,CONST_LCD160XB_COMMAND);
//RE=1, SelectCodeBank=Bank1, LcdLines=2,RE=0
_lcd160xb_send_byte(0x34,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x08,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND);
#elif (LCD_PORT ==PORT_WIDTH_3SPI)
delay_x1ms(50);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_OFF,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(CMD_LCD160XB_CLR_SCREEN,CONST_LCD160XB_COMMAND);
delay_x1ms(11);
_lcd160xb_send_byte(CMD_LCD160XB_CURSE_SETS,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_ON_CURSOR_FLUSH,CONST_LCD160XB_COMMAND);
//RE=1, SelectCodeBank=Bank1, LcdLines=2,RE=0
_lcd160xb_send_byte(0x34,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x08,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND);
#else //8位数据端口
538 1 #if (LCD_TYPE ==TYPE_LCD1601B)
delay_x1ms(15);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_1LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_1LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_1LINE,CONST_LCD160XB_COMMAND);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_1LINE,CONST_LCD160XB_COMMAND);
#else //2行显示
549 1 delay_x1ms(15);
550 1 _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
C51 COMPILER V8.01 LCD160XB 12/08/2006 10:51:10 PAGE 10
551 1 delay_x1ms(5);
552 1 _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
553 1 delay_x1ms(5);
554 1 _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
555 1
556 1 _lcd160xb_judge_busy();
557 1 _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
558 1 #endif
559 1
560 1 _lcd160xb_judge_busy();
561 1 _lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_OFF,CONST_LCD160XB_COMMAND);
562 1 _lcd160xb_judge_busy();
563 1 _lcd160xb_send_byte(CMD_LCD160XB_CLR_SCREEN,CONST_LCD160XB_COMMAND);
564 1 _lcd160xb_judge_busy();
565 1 _lcd160xb_send_byte(CMD_LCD160XB_CURSE_SETS,CONST_LCD160XB_COMMAND);
566 1 _lcd160xb_judge_busy();
567 1 _lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_ON_CURSOR_FLUSH,CONST_LCD160XB_COMMAND);
568 1 delay_25us();
569 1
570 1 //20061128(2-4)
571 1 //RE=1, SelectCodeBank=Bank1, LcdLines=2,RE=0
572 1 _lcd160xb_judge_busy();
573 1 _lcd160xb_send_byte(0x34,CONST_LCD160XB_COMMAND);
574 1 _lcd160xb_judge_busy();
575 1 _lcd160xb_send_byte(0x08,CONST_LCD160XB_COMMAND);
576 1 _lcd160xb_judge_busy();
577 1 _lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
578 1 _lcd160xb_judge_busy();
579 1 _lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND);
580 1 ////////////
581 1
582 1 #endif
583 1
584 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -