/******************************************************************************** * 描述: LCD1602 移动显示 * * 显示方式: * * 1、 LCD 第一行显示: BIG BIG WORLD * * LCD 第二行显示:I LOVE PUZHONG * * 2、先将两行字符写入DDRAM 中,然后从右至左逐字移出显示。 * * 3、 在指定位置停留1.6 秒后,闪烁2 次,清屏。 * * 4、反复循环上述显示方式。 * ********************************************************************************/ #include #include #define uchar unsigned char #define uint unsigned int sbit LCD_RS = P2^6; sbit LCD_RW = P2^5; sbit LCD_EN = P2^7; uchar code dis1[] = {"PRETTY GIRL"}; uchar code dis2[] = {"I LOVE SHUJUN"}; /*******************************************************************/ /* /* 延时子程序 /* /*******************************************************************/ void delay(int ms) { int i; while(ms--) { for(i = 0; i< 250; i++) { _nop_(); _nop_(); _nop_(); _nop_(); } } } /*******************************************************************/ /* /*检查LCD 忙状态 /*lcd_busy 为 1 时,忙,等待。lcd-busy 为 0 时 ,闲,可写指令与数据。 /* /*******************************************************************/ bit lcd_busy() { bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (bit)(P0&0x80); LCD_EN = 0; return result; } /*******************************************************************/ /* /*写指令数据到LCD /*RS=L, RW=L, E=高脉冲,D0-D7=指令码。 /* /*******************************************************************/ void lcd_wcmd(uchar cmd) { while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EN = 0; } /*******************************************************************/ /* /*写显示数据到LCD...