[51单片机] 1602液晶显示控制代码

简介:

>_<:引脚的连接方式

>_<:下面是对其各个引脚进行说明:

  reg52.h 一般自带直接引用就含有这个文件啦
  intrins.h 一般自带 
复制代码
  1 /*-----------------------------------------------
  2 名称:LCD1602
  3 论坛:www.doflye.net
  4 编写:shifang
  5 内容:通过标准程序静态显示字符
  6 引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK
  7 ------------------------------------------------*/
  8 #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  9 #include<intrins.h>
 10 
 11 sbit RS = P2^4;   //定义端口 
 12 sbit RW = P2^5;
 13 sbit EN = P2^6;
 14 
 15 #define RS_CLR RS=0 
 16 #define RS_SET RS=1
 17 
 18 #define RW_CLR RW=0 
 19 #define RW_SET RW=1 
 20 
 21 #define EN_CLR EN=0
 22 #define EN_SET EN=1
 23 
 24 #define DataPort P0
 25 /*------------------------------------------------
 26 uS延时函数,含有输入参数 unsigned char t,无返回值
 27 unsigned char 是定义无符号字符变量,其值的范围是
 28 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
 29 长度如下 T=tx2+5 uS 
 30 ------------------------------------------------*/
 31 void DelayUs2x(unsigned char t)
 32 {   
 33     while(--t);
 34 }
 35 /*------------------------------------------------
 36 mS延时函数,含有输入参数 unsigned char t,无返回值
 37 unsigned char 是定义无符号字符变量,其值的范围是
 38 0~255 这里使用晶振12M,精确延时请使用汇编
 39 ------------------------------------------------*/
 40 void DelayMs(unsigned char t)
 41 {  
 42     while(t--)
 43     {
 44         //大致延时1mS
 45         DelayUs2x(245);
 46         DelayUs2x(245);
 47     }
 48 }
 49 /*------------------------------------------------
 50 判忙函数
 51 ------------------------------------------------*/
 52 bit LCD_Check_Busy(void) 
 53 { 
 54     DataPort= 0xFF; 
 55     RS_CLR; 
 56     RW_SET; 
 57     EN_CLR; 
 58     _nop_(); 
 59     EN_SET;
 60     return (bit)(DataPort & 0x80);
 61 }
 62 /*------------------------------------------------
 63 写入命令函数
 64 ------------------------------------------------*/
 65 void LCD_Write_Com(unsigned char com) 
 66 {  
 67     // while(LCD_Check_Busy()); //忙则等待
 68     DelayMs(5);
 69     RS_CLR; 
 70     RW_CLR; 
 71     EN_SET; 
 72     DataPort= com; 
 73     _nop_(); 
 74     EN_CLR;
 75 }
 76 /*------------------------------------------------
 77 写入数据函数
 78 ------------------------------------------------*/
 79 void LCD_Write_Data(unsigned char Data) 
 80 { 
 81     //while(LCD_Check_Busy()); //忙则等待
 82     DelayMs(5);
 83     RS_SET; 
 84     RW_CLR; 
 85     EN_SET; 
 86     DataPort= Data; 
 87     _nop_();
 88     EN_CLR;
 89 }
 90 
 91 /*------------------------------------------------
 92 清屏函数
 93 ------------------------------------------------*/
 94 void LCD_Clear(void) 
 95 { 
 96     LCD_Write_Com(0x01); 
 97     DelayMs(5);
 98 }
 99 /*------------------------------------------------
100 写入字符串函数
101 ------------------------------------------------*/
102 void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) 
103 {     
104     if (y == 0) 
105     {     
106         LCD_Write_Com(0x80 + x);     //表示第一行
107     }
108     else 
109     {      
110         LCD_Write_Com(0xC0 + x);      //表示第二行
111     }        
112     while (*s) 
113     {     
114         LCD_Write_Data( *s);     
115         s ++;     
116     }
117 }
118 /*------------------------------------------------
119 写入字符函数
120 ------------------------------------------------*/
121 void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) 
122 {     
123     if (y == 0) 
124     {     
125         LCD_Write_Com(0x80 + x);     
126     }    
127     else 
128     {     
129         LCD_Write_Com(0xC0 + x);     
130     }        
131     LCD_Write_Data( Data);  
132 }
133 /*------------------------------------------------
134 初始化函数
135 ------------------------------------------------*/
136 void LCD_Init(void) 
137 {
138     LCD_Write_Com(0x38);    /*显示模式设置*/ 
139     DelayMs(5); 
140     LCD_Write_Com(0x38); 
141     DelayMs(5); 
142     LCD_Write_Com(0x38); 
143     DelayMs(5); 
144     LCD_Write_Com(0x38);  
145     LCD_Write_Com(0x08);    /*显示关闭*/ 
146     LCD_Write_Com(0x01);    /*显示清屏*/ 
147     LCD_Write_Com(0x06);    /*显示光标移动设置*/ 
148     DelayMs(5); 
149     LCD_Write_Com(0x0C);    /*显示开及光标设置*/
150 }
151 
152 /*------------------------------------------------
153 主函数[上面已经把显示功能封装好了,今后再写其他显示就直接调用]
154 ------------------------------------------------*/ 
155 void main(void) 
156 { 
157     LCD_Init(); 
158     LCD_Clear();//清屏
159     while (1) 
160     {  
161         LCD_Write_Char(7,0,'o');
162         LCD_Write_Char(8,0,'k');
163         LCD_Write_String(1,1,"www.doflye.net");
164         while(1);
165     }
166 }
复制代码
相关文章
|
4月前
|
C语言
【51单片机】LCD1602显示字符串,时间、时间+按键校准、秒表计时的功能代码。
【51单片机】LCD1602显示字符串,时间、时间+按键校准、秒表计时的功能代码。
|
4月前
|
C语言
51单片机汇编语言流水灯代码
51单片机汇编语言流水灯代码
|
7月前
|
传感器
51单片机循迹小车原理介绍和代码示例
51单片机循迹小车原理介绍和代码示例
51单片机循迹小车原理介绍和代码示例
|
7月前
|
传感器
51单片机矩阵键盘超详解!(内含LCD1602代码)
51单片机矩阵键盘超详解!(内含LCD1602代码)
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义动态数码管显示(设计思路&原理&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
【51单片机】自定义静态数码管显示(设计思路&代码演示)
|
7月前
|
C++
【51单片机】添加模块代码的常见问题(图示&代码演示)
【51单片机】添加模块代码的常见问题(图示&代码演示)
【51单片机】烧写教程:将代码下载到单片机中(图示&解析)
【51单片机】烧写教程:将代码下载到单片机中(图示&解析)
【51单片机】静态数码管显示(设计思路&原理&代码演示)
【51单片机】静态数码管显示(设计思路&原理&代码演示)
|
7月前
|
芯片 数据格式
【51单片机】实现一个动静态数码管显示项目(超全详解&代码&图示)(5)
【51单片机】实现一个动静态数码管显示项目(超全详解&代码&图示)(5)