- 打卡等级:以坛为家II
- 打卡总天数:493
- 最近打卡:2025-05-01 08:31:58
荣誉版主
- 积分
- 3476
|
发表于 2024-7-4 10:27:04
|
显示全部楼层
本帖最后由 浦江一水 于 2024-7-4 20:47 编辑
感谢楼上这位坛友的浏览和关注。
本帖是用自制的实验板做了多项学习实验,所说的“智能串口屏”是指7楼的LCD1602实验吧?
这是其中实验之一,如果没有试出来,需要再说明一下的话,那么试解释如下:
所谓“智能串口屏”,就是可以通过串口通讯,上位机(PC机或单片机)发指令,就能控制显示的屏。
如现在流行的迪文DGUS屏、武汉中显VGUS屏、淘晶驰屏等等,都是“裸屏+MCU”组成的串口屏,都是通过串口发指令控制显示的。
而本实验中的串口屏,即是由LCD1602+MCU(STC32G12K128)所组成的。当实验板下载7楼的程序后,插上LCD1602显示屏,就组成了这样的“智能串口屏”。
上位机(PC机或单片机)要想控制LCD1602显示屏显示,只要发出相关的简单的指令给实验板的MCU就可以了,具体如何驱动LCD1602屏的程序就由MCU去完成了。
那么,这里必须有一个通讯协议,规定什么样的指令格式,能让MCU识别和执行了。
于是就如附件中写出的那段,就是通讯协议。
为了说明方便,再贴一下: (原文在8楼)
//******************************************************************************
// 附件: LCD1602串口屏通信控制指令协议,9600,8,1,N
//----------------------------------------------------------------------
// 共五条指令, 说明如下...
//----------------------------------------------------------------------
// 1, 格式: PXYsss...\r\n +0D+0A
// 其中: P -- 命令字 指定坐标显示字符串;
// X -- 显示行坐标, X=0或1,表示第一行或第二行
// Y -- 显示列坐标, Y=0...F(超过9用ABCDEF的16进制表示)
// sss... 需要显示的字符串 (长度限于16字符)(LCD1602每行最多显示16字符)
// \r\n 发送串结尾标志,回车换行符 即+0x0D+0x0A,(以下同)
// 实例: P00ABCDEFG+0.1234(\r\n) 在显示屏第一行首显示"ABCDEFG+0.1234"
//----------------------------------------------------------------------
// 2, 格式: Cm\r\n
// 其中: C -- 命令字 清屏
// m -- 参数 0:清第一行 1:清第二行 2:清全屏
// 实例: C0\r\n 显示屏第一行被清空;
//----------------------------------------------------------------------
// 3, 格式: @XY\r\n
// 其中: @ -- 命令字 指定当前光标坐标
// X,Y -- 参数 X:行 Y:列
// 实例: @01\r\n 当前光标在第一行第1列 (光标是否显示取决于以下指令)
//----------------------------------------------------------------------
// 4, 格式: *m\r\n
// 其中: * -- 命令字 光标闪烁显示
// m -- 参数 0:不闪烁 1:闪烁
// 实例: *1 在先前指定的坐标位置闪烁光标;
//----------------------------------------------------------------------
// 5, 格式: _m\r\n
// 其中: _ -- 命令字 底画线显示
// m -- 参数 0:不显示底画线 1:显示底画线
// 实例: _1 在先前指定的坐标位置显示底画线; (底画线显示后,光标闪烁取消)
//*******************************************************************************
这里共设计了五条指令,最基本的常用的是第一条指令,都是很简单的。
为什么没“试出来”呢,是否注意两点? 一是正确的硬件连接,二是发送正确的指令。
先说硬件连接,
实验板本身在开发(下载调试)过程中,就是用通信线(四线)与上位机连接的,这四线分别是VCC、RXD、TXD、GND,通过USB转TTL串口的模块,与上位机(PC机)连接的。
当程序下载后,运行后,也就是通过这根线,上位机(PC机)与实验板的串口1连接的,不需要作任何改变的。
上位机(PC机)要启动串口助手软件,或者就用STC-ISP软件中的串口助手,找到与实验板连接的串口端口,设置好波特率9600等参数,并打开通讯端口,这样就完成了硬件连接。
其次就是发送正确指令了,
要解释指令协议了,以第一条指令为例:
// 1, 格式: PXYsss...\r\n +0D+0A
什么意思? 要理解一下,
格式? 就是按这样的格式顺序发送后面的字符串,
第一个字母是‘P’, 什么意思?
众所周知,Printf就是打印显示,就取第一个字母‘P’作为显示指令的特征字符,下位机接收到'P'就知道要让我显示字符串了...
后面的两字母"XY", 什么意思?
就是显示屏的行列坐标位置, 因为LCD1602只能显示两行,每行16个字符, 那么X(行)取值范围是0..1, Y(列)取值范围是0..15(超过9就用ABCDEF表示),
后面的"sss...", 什么意思?
那就是所要显示的字符串, 众所周知,string就是字符串,取第一个字母s表示一下,为什么后面有“...”省略号? 因为长度是不定的(当然长度超出屏幕范围是不显示的)。
后面的"\r\n”, 什么意思?
这是C语言表示回车换行的转义字符,其ASCII码值就是后面的0x0D和0x0A, 因为“\r\n”是不可见ASCII符,在串口助手中打字时只要按回车换行即可。
明白了这些含义后,再看举例是什么?
实例: P00ABCDEFG+0.1234(\r\n) 在显示屏第一行首显示"ABCDEFG+0.1234"
就是在显示屏的0行0列的位置,显示“ABCDEFG+0.1234”,
如果是正确连接通讯线了,那么只要在串口助手中打入上述指令串,按下回车键时,实验板的显示屏,第一行首就应该显示“ABCDEFG+0.1234”了。
其它的四条指令,其实上述协议中都已经有解释了,其中m, 就是表示模式mode或参数。
比如需要清除第一行,打字“C0”,按回车,发送... 很简单的...
......
|
|