液晶显示屏1602

液晶显示屏1602

LCD1602简介

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若干个5x7或者5x10的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。

 1602的引脚说明

 1602每一行的地址说明

 

第一个字符的地址是 40H, 那么是否直接写入 40H 就可以将光标定位 在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7 恒定为高电平 1 所以实际写入的数据应该是 01000000B(40H) +10000000B(80H)=11000000B(C0H)。在 1602 中我们就用前 16 个就行了。第二行也一样用前 16 个地址。对应如下: 

 

1602的操作步骤以及基本操作时序

  

 

 驱动1602代码

 1 #define LCD1602_DATAPINS P0
 2 sbit LCD1602_E=P2^7;
 3 sbit LCD1602_RW=P2^5;
 4 sbit LCD1602_RS=P2^6;
 5 
 6 /*******************************************************************************
 7 * 函 数 名         : Lcd1602_Delay1ms
 8 * 函数功能           : 延时函数,延时1ms
 9 * 输    入         : c
10 * 输    出         : 无
11 * 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。
12 *******************************************************************************/
13 
14 void Lcd1602_Delay1ms(uint c)   //误差 0us
15 {
16     uchar a,b;
17     for (; c>0; c--)
18     {
19          for (b=199;b>0;b--)
20          {
21               for(a=1;a>0;a--);
22          }      
23     }
24         
25 }
26 
27 /*******************************************************************************
28 * 函 数 名         : LcdWriteCom
29 * 函数功能           : 向LCD写入一个字节的命令
30 * 输    入         : com
31 * 输    出         : 无
32 *******************************************************************************/
33 void TOLcdWriteCom(uchar com)  //写入命令
34 {
35     LCD1602_E = 0;      //将LCD1602_E变为低电平,为下面LCD1602_E变高电平形成高脉冲进行写入做准备
36     LCD1602_RS = 0;     //选择发送命令
37     LCD1602_RW = 0;     //选择写入
38     
39     LCD1602_DATAPINS = com;     //放入命令
40     Lcd1602_Delay1ms(1);        //等待数据稳定
41 
42     LCD1602_E = 1;              //高脉冲写入
43     Lcd1602_Delay1ms(5);        //保持时间
44     LCD1602_E = 0;
45 }

 写数据与写命令只是LCD1602_RS的不同其他都一样

 1 /*******************************************************************************
 2 * 函 数 名         : LcdWriteData
 3 * 函数功能           : 向LCD写入一个字节的数据
 4 * 输    入         : dat
 5 * 输    出         : 无
 6 *******************************************************************************/
 7 void LcdWriteData(uchar dat)            //写入数据
 8 {
 9     LCD1602_E = 0;     //使能清零
10     LCD1602_RS = 1;    //选择输入数据
11     LCD1602_RW = 0;    //选择写入
12 
13     LCD1602_DATAPINS = dat; //写入数据
14     Lcd1602_Delay1ms(1);
15 
16     LCD1602_E = 1;       //写入时序
17     Lcd1602_Delay1ms(5);   //保持时间
18     LCD1602_E = 0;
19 }
20 
21 /*******************************************************************************
22 * 函 数 名       : LcdInit()
23 * 函数功能         : 初始化LCD屏
24 * 输    入       : 无
25 * 输    出       : 无
26 *******************************************************************************/
27 void LcdInit()       //LCD初始化子程序
28 {
29     LcdWriteCom(0x38);  //开显示
30     LcdWriteCom(0x0c);   //开显示不显示光标
31     LcdWriteCom(0x06);   //写一个指针加1
32     LcdWriteCom(0x01);   //清屏
33     LcdWriteCom(0x80);   //设置数据指针起点
34 }

 向1602内写入一个数据举例(包括前面的所有代码)

主函数内操作步骤如图片所示

 1 #include "reg52.h"             //此文件中定义了单片机的一些特殊功能寄存器
 2 #include "lcd.h"
 3 
 4 typedef unsigned int u16;      //对数据类型进行声明定义
 5 typedef unsigned char u8;
 6 
 7 u8 Disp[]=" Pechin Science ";
 8 
 9 /*******************************************************************************
10 * 函 数 名         : main
11 * 函数功能           : 主函数
12 * 输    入         : 无
13 * 输    出         : 无
14 *******************************************************************************/
15 void main(void)                            
16 {
17     u8 i;
18     LcdInit();
19     for(i=0;i<16;i++)
20     {
21         LcdWriteData(Disp[i]);    
22     }
23     while(1);                
24 }
原文地址:https://www.cnblogs.com/zhj868/p/12533303.html