lcd_1602 指令汇总
0x28 设置 162 显示, 57 点阵, 4 位数据接口
0x38 设置 162 显示, 57 点阵, 8 位数据接口
0x01 清屏 , 光标复位到地址 00H 位置
0x02 光标归原点, DDRAM 中内容不变,地址计数器 AC=0; (此时地址为 0x80 )
0x0F 开显示,显示光标,光标闪烁
0x0e 开显示,显示光标,光标不闪烁
0x0c 开显示,不显示光标
0x08 只开显示
0x06 地址加一,当写入数据的时候光标右移设定显示屏或光标移动方向指令
0x18 字符全部左移一格,但光标不动
0x1c 字符全部右移一格,但光标不动
0x10 光标左移 1 格,且 AC 值减 1
0x14 光标右移 1 格,且 AC 值加 1
C语言程序代码:
/*-----------------------------------------------
------------------------------------------------*/
#include #include sbit RS = P2^4; //定义端口 sbit RW = P2^5; sbit EN = P2^6; #define RS_CLR RS=0 #define RS_SET RS=1 #define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0 #define EN_SET EN=1 #define DataPort P0 /*------------------------------------------------ uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS ------------------------------------------------*/ void DelayUs2x(unsigned char t) { while(--t); } /*------------------------------------------------ mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编 ------------------------------------------------*/ void DelayMs(unsigned char t) { while(t--) { //大致延时1mS DelayUs2x(245); DelayUs2x(245); } } /*------------------------------------------------ 判忙函数 ------------------------------------------------*/ bit LCD_Check_Busy(void) { DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET; return (bit)(DataPort & 0x80); } /*------------------------------------------------ 写入命令函数 ------------------------------------------------*/ void LCD_Write_Com(unsigned char com) { // while(LCD_Check_Busy()); //忙则等待 DelayMs(5); RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_CLR; } /*------------------------------------------------ 写入数据函数 ------------------------------------------------*/ void LCD_Write_Data(unsigned char Data) { //while(LCD_Check_Busy()); //忙则等待 DelayMs(5); RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR; } /*------------------------------------------------ 清屏函数 ------------------------------------------------*/ void LCD_Clear(void) { LCD_Write_Com(0x01); DelayMs(5); } /*------------------------------------------------ 写入字符串函数 ------------------------------------------------*/ void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { if (y == 0) { LCD_Write_Com(0x80 + x); //表示第一行 } else { LCD_Write_Com(0xC0 + x); //表示第二行 } while (*s) { LCD_Write_Data( *s); s ++; } } /*------------------------------------------------ 写入字符函数 ------------------------------------------------*/ void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) { if (y == 0) { LCD_Write_Com(0x80 + x); } else { LCD_Write_Com(0xC0 + x); } LCD_Write_Data( Data); } /*------------------------------------------------ 初始化函数 ------------------------------------------------*/ void LCD_Init(void) { LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/ LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5); LCD_Write_Com(0x0C); /*显示开及光标设置*/ } /*------------------------------------------------ 主函数[上面已经把显示功能封装好了,今后再写其他显示就直接调用] ------------------------------------------------*/ void main(void) { LCD_Init(); LCD_Clear(); LCD_Write_Char(7,0,'0'); LCD_Write_Char(8,0,'k'); LCD_Write_String(1,1,"Welcome China HangZhou"); while(1) { DelayMs(200); LCD_Write_Com(0x18);//左平移画面0x1c是右平移 } }
上一篇:单片机控制LCD1602显示屏动态显示字符串
下一篇:单片机控制LCD1602显示英文句子
推荐阅读最新更新时间:2024-11-10 12:30
设计资源 培训 开发板 精华推荐
- 1usb网口+3usb2.0hub
- LT8330IDDB 4V 至 16V 输入、5V SEPIC 转换器的典型应用电路
- STEVAL-ISA182V1,使用 VIPER38HD 8.4W/30W 峰值功率离线反激转换器的评估板
- NCP5007 紧凑型背光 LED 升压驱动器的典型应用,具有模拟反馈的基本直流电流模式操作
- 用于微功率 A/D 转换器的 LT1634AIS8-5 电压基准的典型应用
- L78L12AB正压稳压器Edit boost电路的典型应用
- FRDMSTBANBP8XD: Freedom Shield评估板
- 有源视频滤波器
- 基于 L6364W 双 IO-Link 设备收发器的工业智能传感器套件
- NCP6151 双输出 4 相 +1/0 相控制器的典型应用,具有单 SVID 接口,适用于台式机和笔记本 CPU 应用