液晶显示屏1602
液晶显示屏1602
LCD1602简介
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若干个5×7或者5×10的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。
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 }