|
#include "all.h"
u8 LCD_Write_Buffer1[16];
u8 LCD_Write_Buffer2[16];
u8 LCD1602_Write_Cursor_Add=0;
u8 code LCD1602_5x8_Buffer[8]={0x08,0x00,0x07,0x08,0x08,0x08,0x08,0x07}; //*C
void delay1ms(void) //误差 0us
{
u8 a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void LcdWriteCom(u8 com) //写入命令
{
LCD1602_E = 0; //使能
LCD1602_RS = 0; //选择发送命令
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = com; //放入命令
delay1ms(); //等待数据稳定
LCD1602_E = 1; //写入时序
delay1ms();
delay1ms();
delay1ms();
delay1ms();
delay1ms(); //保持时间
LCD1602_E = 0;
}
void LcdWriteData(u8 dat) //写入数据
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 1; //选择输入数据
LCD1602_RW = 0; //选择写入
LCD1602_DATAPINS = dat; //写入数据
delay1ms();
LCD1602_E = 1; //写入时序
delay1ms();
delay1ms();
delay1ms();
delay1ms();
delay1ms(); //保持时间
LCD1602_E = 0;
}
void LcdInit() //LCD初始化子程序
{
u8 i;
LcdWriteCom(0x38); //开显示
LcdWriteCom(0x0c); //开显示不显示光标
LcdWriteCom(0x06); //写一个指针加1
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x80); //设置数据指针起点
LcdWriteCom(0x02);
LcdWriteCom(0x14);
for(i=0;i<16;i++) //写入CGM地址
{
LcdWriteData(LCD1602_5x8_Buffer[i]) ;
}
}
void LCD_Display_Ser()
{
u8 i;
LcdWriteCom(0x80) ;
for(i=0;i<16;i++)
{
LcdWriteData(LCD_Write_Buffer1[i]) ;
}
LcdWriteCom(0xc0) ;
for(i=0;i<16;i++)
{
LcdWriteData(LCD_Write_Buffer2[i]) ;
}
switch(LCD1602_Write_Cursor_Add) //控制光标闪烁
{
case 0: LcdWriteCom(0x0c);break; //不闪烁
case 1: LcdWriteCom(0x0f);LcdWriteCom(0x80);break;
case 2: LcdWriteCom(0x0f);LcdWriteCom(0xcd);break;
case 3: LcdWriteCom(0x0f);LcdWriteCom(0xc7);break;
case 4: LcdWriteCom(0x0f);LcdWriteCom(0xc4);break;
case 5: LcdWriteCom(0x0f);LcdWriteCom(0xc1);break;
case 6: LcdWriteCom(0x0f);LcdWriteCom(0xcf);break;
case 7: LcdWriteCom(0x0e);LcdWriteCom(0x82);break;
case 8: LcdWriteCom(0x0f);LcdWriteCom(0x81);break;
case 9: LcdWriteCom(0x0f);LcdWriteCom(0x80);break;
default: break;
}
}
我在主函数里调用了LCD1602_Write_Cursor_Add=1,为什么不显示光标
大佬们,帮帮我吧 |
|