跟我学51单片机(七)——LCD1602液晶显示模块
液晶初始化函数:设置液晶的工作方式
void LCD_init(void)
{
delaylcd_nms(5);
LCD_en_com_nobusy(DATA_MODE);
// 延时5ms, 写指令,不检测忙信号
delaylcd_nms(5);
LCD_en_com_nobusy(DATA_MODE);
// 延时5ms, 写指令,不检测忙信号
delaylcd_nms(5);
LCD_en_com_nobusy(DATA_MODE);
// 延时5ms, 写指令,不检测忙信号
LCD_en_com(DATA_MODE);
// 设置为8位数据传送模式
delaylcd_nms(5);
LCD_en_com(OPEN_SCREEN); // 开显示
LCD_en_com(DISPLAY_ADDRESS); // 设置显示地址
CLEARSCREEN; // 清屏
}
设置显示坐标函数:设置字符的显示位置,行、列坐标
参数: x -列坐标,y -行坐标
void LCD_set_xy( unsigned char x, unsigned char y )
{
unsigned char address;
if (y == LINE1) // 判断行
address = LINE1_HEAD + x; // 设置列坐标
else
address = LINE2_HEAD + x;
LCD_en_command(address); // 将地址写入寄存器
}
写字符函数:向液晶写一个字符
参数:x -列坐标,y -行坐标,dat -将要显示的字符数据
void LCD_write_char( unsigned x,unsigned char y,unsigned char dat)
{
LCD_set_xy( x, y ); // 首先设置显示坐标
LCD_en_dat(dat); // 写数据
}
写字符串函数:向液晶写入字符串
参数:x -列坐标,y -行坐标,*s -将要显示的字符串数据
void LCD_write_string(unsigned char x,unsigned char y,unsigned
char *s)
{
LCD_set_xy( x, y ); // 首先设置显示坐标
while (*s) // 判断是否结束
{
LCDIO=*s;// 循环调用写数据函数
LCD_en_dat(*s);
s ++;
}
}
四、调试要点与实验现象
接好硬件(特别是连接好1602 液晶),通过冷启动方式将程序所生成的。hex 文件下载到单片机运行后,复位单片机,然后可在学习板上看到液晶的显示的字符(如图5 所示)。
图5 1602液晶显示界面
调试时应注意的是,因为液晶的内部显示操作需要一定的时间,因此如果单片机在对1602 液晶写操作时不进行读忙操作,就应该延时足够的时间(可用延时函数)以让液晶内部能够接收命令或数据,否则会让液晶无法工作或者工作不正常。此外对于V0 管脚,作为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,因此可通过一个电位器实现对其的电压调整,前文提到,将其调节到0.3~0.4V 时对比度效果最好。
五、总结
本讲介绍了字符型液晶1602 的工作原理并给出了实例,通过该讲,读者可以了解和掌握51 单片机驱动1602 液晶的方法。下讲将讲述单片机驱动带字库的128X64 液晶,敬请期待。
红外遥控器相关文章:红外遥控器原理
评论