找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7111|回复: 5
收起左侧

第13章-1602液晶

  [复制链接]
ID:111078 发表于 2016-3-28 21:32 | 显示全部楼层 |阅读模式
51单片机轻松入门—基于STC15W4K系列(C语言版)
李友全
编著:http://www.51hei.com/bbs/dpj-37954-1.html
13章 1602液晶

1 1602液晶电路图

2 LCD1602显示字符串与整数
3 1602液晶显示汉字与特殊符号
1 1602液晶电路图
1602液晶可显示2行英文字符,每行最多16个字符,市面上买来的1602液晶一般是可以
直接互换使用的,与数码管显示最大的区别在于1602液晶显示字符更多,但亮度比不上 数码管显示

1号单片机与D/A输出芯片TLC5615连接电路如图所示 。

0.png
背光耗电大,一般不接

2 LCD1602显示字符串与整数

例13.1 LCD1602显示字符串与整数,要求1602上电立即在第一行显示字符串"LCD1602- TEST-OK",在第二行显示一个字符串与一个固定不变的整数“Data = 123456789”。 说明:本例是最简单的字符串与整数显示程序,程序移植时只需要根据实际硬件连接调整 LCD1602.H中定义的引脚即可。

//************************* LCD1602.H ***************************

#include "STC15W4K.H"
#include "intrins.h" // _nop_()函数需要
sbit
RS
=
P1^3;
//
根据实际硬件连接修改
sbit
RW
=
P1^2;
//
根据实际硬件连接修改
sbit
E
=
P4^7;
//
根据实际硬件连接修改
#define
DPORT
P0


//
根据实际硬件连接修改
void
LCD1602_Init();


//
初始化
void
SetCur(unsigned
char Para);
//
设置光标
void WriteString(unsigned char xPos,unsigned char yPos,unsigned char *s);
// 写字符串
主程序代码如下:

#include "LCD1602.H"

#include "myfun.H"

void main()
{
unsigned
char
xPos,yPos;
//
X坐标、Y坐标
unsigned
char
*s="Data=";



unsigned
char
DispBuf[9];
//
存放4个待发送ASCII码
unsigned
long
TestDat=123456789;
//
临时变量
port_mode();
//
所有IO口设为准双向弱上拉方式。
delay100ms();
//
等待LCD1602上电时内部复位,很重要
LCD1602_Init();






SetCur(CurFlash);//开光标显示、闪烁,NoCur—有显示无光标,NoDisp—无显示,
//CurNoFlash—有光标但不闪烁,CurFlash—有光标且闪烁
xPos=0;// xPos表示水平右移字符数(0-15)
yPos=1;// yPos表示垂直下移字符数(0-1)
WriteString(0,0,"LCD1602-TEST-OK");
// X坐标、Y坐标、字符串,屏幕左上角为坐标原点,水平:0-15,垂直:0-1

Long_Str(TestDat,DispBuf); // 同第4章8节“单片机串口向计算机串口发送2进制…” WriteString(xPos,yPos,s); // X坐标、Y坐标、字符串,屏幕左上角为坐标原点 xPos=5;

yPos=1; WriteString(xPos,yPos,DispBuf); while(1);

}
8.jpg
实验效果如图

3 1602液晶显示汉字与特殊符号
1602液晶显示汉字与特殊符号需要使用自定义字符的方式实现,实际非常简单,我们在前面 例子的基础上添加很少的代码就可以实现,下面先看一个最简单的基本实例。
例13.3 1602第1行显示“一二三四五六日℃”。
//***************************** main.C ********************************
#include "LCD1602.H"
#include "myfun.H" void main()
{
port_mode(); // 所有IO口设为准双向弱上拉方式。 delay100ms(); // 等待LCD1602上电时内部复位 LCD1602_Init();
WriteROM(); // 将自定义字形码写入LCD1602内部存储器 WriteChar(0,0,0); // 显示“一”,x坐标、y坐标,ASCII码
WriteChar(1,0,1); // 显示“二” WriteChar(2,0,2); // 显示“三” WriteChar(3,0,3); // 显示“四”
WriteChar(4,0,4); // 显示“五” WriteChar(5,0,5); // 显示“六”
WriteChar(6,0,6); // 显示“日” WriteChar(7,0,7); // 显示“°C”
while(1);
}

//***************************** LCD1602.C ********************************
unsigned char code table[]=
{
0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00, // 一,显示时的ASCII码 0x00
0x00,0x00,0x00,0x0e,0x00,0xff,0x00,0x00, // 二,显示时的ASCII码 0x01
0x00,0x00,0xff,0x00,0x0e,0x00,0xff,0x00, // 三,显示时的ASCII码 0x02
0x00,0x00,0xff,0xf5,0xfb,0xf1,0xff,0x00, // 四,显示时的ASCII码 0x03
0x00,0xfe,0x08,0xfe,0x0a,0x0a,0xff,0x00, // 五,显示时的ASCII码 0x04
0x00,0x04,0x00,0xff,0x00,0x0a,0x11,0x00, // 六,显示时的ASCII码 0x05
0x00,0x1f,0x11,0x1f,0x11,0x11,0x1f,0x00, // 日,显示时的ASCII码 0x06
0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00, // ℃,显示时的ASCII码 0x07
};
// 将自定义字形码写入1602内部存储器( 固定代码,不要改动)
void WriteROM()
{
unsigned char i;
LcdWriteCmd(0x40); // 操作CGRAM的命令码
for(i=0;i<64;i++) // 写入数组中数据
{
LcdWriteDat(table[ i ]);
}
}
12.jpg
对于LCD1602.C中字形码数组的获取,可以采用手工方式,也可以采用字模软件实

现,由于1602液晶每个字符显示位置是一个5×8点阵(5列8行),如图13-2所示,将 点阵的某一行中要显示的点用1表示,不显示的点用0表示,采用一个字节存放一行 的方式,字节高3位是无关的,8个字节表示一个字形码,允许最多自定义8个字形

码。
当处理字形码较多时,可采用字模软件来操作会更加方便,我们以“字模提取V2.2”
为例,进入软件后按图13-3所示步骤操作,虽然我们可以选取宽度5,但等效于8, 所示得到的是8×8点阵。
14.jpg
我们再点左侧的“模拟动画”菜单,点击“放大格点”选项,一直放大到最大,然后我们
就可以在8*8 的点阵图形中用鼠标点击填充黑点,注意前三列空着不填充,字模软 件是把黑色取为1,白色取为0,与手工取模方式正好相同,图形画好后,点一下 “参数设置”菜单里的“其他选项”,我们选择“横向取模”, 然后选择“取模方式”菜单,
点一下“C51 格式”后,在“点阵生成区”自动产生了8 个字节的数据,这8 个字节的数
据就是对应取出来的“模”,对于复杂点的汉字,可以使用紧挨着的2个或4个5×8点 阵图形进行拼接显示。

例13.4 1602第1行显示“2014年11月30日”,主程序代码如下。
#include "LCD1602.H"
#include "myfun.H"
unsigned char str[16]; // 最长字符16字节,
void main()
{
unsigned char str[]={'2','0','1','4',0x00,'1','1',0x01,'3','0',0x02};
// 显示“2014年11月30日”, 0x00=年, 0x01=月, 0x02=日。

port_mode(); // 所有IO口设为准双向弱上拉方式。 delay100ms(); // 等待LCD1602上电时内部复位 LCD1602_Init();

WriteROM(); // 将自定义字形码写入LCD1602内部存储器 WriteStringCN(0,0,str,11);
while(1);
}
17.jpg

回复

使用道具 举报

ID:108355 发表于 2016-8-6 12:03 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:108355 发表于 2016-8-6 14:45 | 显示全部楼层
谢谢分享  楼主有《51单片机轻松入门—基于STC15W4K系列》   例子的代码 求发一份齐全    214704816@qq.com  感激不尽
回复

使用道具 举报

ID:288930 发表于 2019-1-18 13:59 | 显示全部楼层
谢谢分享!
回复

使用道具 举报

ID:928284 发表于 2021-11-30 17:12 | 显示全部楼层
输入汉字的例子,特精彩。
回复

使用道具 举报

ID:1032507 发表于 2022-10-26 15:55 | 显示全部楼层
这个教程太攒了,刚好要用到,非常感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表