找回密码
 立即注册
楼主: 浦江一水

新手学用STC32G12K128, 实践与思考(都是干货,盖楼砖瓦,实用基础)

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:502
  • 最近打卡:2025-05-01 08:01:38
已绑定手机

1

主题

833

回帖

1441

积分

金牌会员

积分
1441
发表于 2024-5-24 09:06:09 | 显示全部楼层
感谢分享,佩服楼主的动手能力和缜密的思维
靡不有初,鲜克有终
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:493
  • 最近打卡:2025-05-01 08:31:58

30

主题

347

回帖

3476

积分

荣誉版主

积分
3476
发表于 2024-5-24 16:21:56 | 显示全部楼层
小涵*** 发表于 2024-5-24 09:06
感谢分享,佩服楼主的动手能力和缜密的思维

感谢楼上坛友的浏览、回复和鼓励,我们共同学习、享受劳动快乐、丰富人生。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:419
  • 最近打卡:2025-05-01 07:24:50

4

主题

511

回帖

1991

积分

金牌会员

积分
1991
发表于 2024-5-31 10:24:23 | 显示全部楼层

优秀的编程习惯,学习的模版
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-05-01 09:54:52
已绑定手机

19

主题

3190

回帖

4866

积分

论坛元老

积分
4866
发表于 2024-5-31 10:37:43 来自手机 | 显示全部楼层
都是干货啊,值得学习
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:493
  • 最近打卡:2025-05-01 08:31:58

30

主题

347

回帖

3476

积分

荣誉版主

积分
3476
发表于 2024-7-4 10:27:04 | 显示全部楼层
本帖最后由 浦江一水 于 2024-7-4 20:47 编辑
qink*** 发表于 2024-7-3 11:57
楼主辛苦了,这个程序很有价值,已经下载实验了,led ,4key,功能都正常,就是智能串口屏没试出来,不知怎么 ...

感谢楼上这位坛友的浏览和关注。

本帖是用自制的实验板做了多项学习实验,所说的“智能串口屏”是指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”,按回车,发送...  很简单的...
......

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:181
  • 最近打卡:2025-04-29 08:52:53
已绑定手机

1

主题

9

回帖

759

积分

高级会员

积分
759
发表于 2024-11-29 17:34:59 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-03-03 23:04:42

2

主题

65

回帖

356

积分

中级会员

积分
356
发表于 2024-11-29 23:51:01 | 显示全部楼层
挺厉害
学无止境
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:75
  • 最近打卡:2025-01-05 14:16:57

30

主题

132

回帖

214

积分

中级会员

积分
214
发表于 2024-12-4 15:03:16 | 显示全部楼层
浦江*** 发表于 2023-10-30 10:33
基于这块自制的实验板, 又做了驱动LCD1602显示屏的实验。
在这个实验中,包含了三个内容的练习:
1,实现四 ...

您好,通过官网上的程序,我用STC32G12K128试验箱驱动lcd1602,屏会亮,但不显示任何东西,您知道为什么吗

LCD1602.zip

9.46 MB, 下载次数: 63

点评

刚看了一下所上传的文件包,其中大部分都是关于Arduino的相关资料。 唯一的一个关于51代码的举例程序“17-LCD1602液晶屏” 是针对普通51单片机的,而不是针对32G12K128这样的CPU的。 所以,自然就无法正常驱动LCD160  详情 回复 发表于 2024-12-4 17:08
谢谢您留言提问。 所提的问题已经看到,程序包也已经下载,会抽时间检查分析一下是什么原因的。 我先猜测一下, 您可以先在原先实验中,来回调节一下LCD旁的电位器,看看LCD1602是否显示一点什么。 LCD1602的第三  详情 回复 发表于 2024-12-4 16:45
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:493
  • 最近打卡:2025-05-01 08:31:58

30

主题

347

回帖

3476

积分

荣誉版主

积分
3476
发表于 2024-12-4 16:45:12 | 显示全部楼层
江上*** 发表于 2024-12-4 15:03
您好,通过官网上的程序,我用STC32G12K128试验箱驱动lcd1602,屏会亮,但不显示任何东西,您知道为什么吗 ...

谢谢您留言提问。

所提的问题已经看到,程序包也已经下载,会抽时间检查分析一下是什么原因的。

我先猜测一下, 您可以先在原先实验中,来回调节一下LCD旁的电位器,看看LCD1602是否显示一点什么。
LCD1602的第三脚,是Vo脚,需要一个适当的电压,如果此电压不当,往往也会出现,显示屏是亮的,但是什么都不显示的情况。先排除一下这种可能性,再看看程序是否有问题。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:493
  • 最近打卡:2025-05-01 08:31:58

30

主题

347

回帖

3476

积分

荣誉版主

积分
3476
发表于 2024-12-4 17:08:05 | 显示全部楼层
江上*** 发表于 2024-12-4 15:03
您好,通过官网上的程序,我用STC32G12K128试验箱驱动lcd1602,屏会亮,但不显示任何东西,您知道为什么吗 ...

刚看了一下所上传的文件包,其中大部分都是关于Arduino的相关资料。
唯一的一个关于51代码的举例程序“17-LCD1602液晶屏”
是针对普通51单片机的,而不是针对32G12K128这样的CPU的。
所以,自然就无法正常驱动LCD1602屏了。

您应该实验一下,官方例程包中的: “36.1-LCD1602显示程序”,看看是否正常显示。
微信图片_20241204172551.jpg

正常显示应该是这样的。(注意LCD1602位置正确插入)
36.1-LCD1602显示程序.rar (223.54 KB, 下载次数: 63)

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 20:06 , Processed in 0.163354 second(s), 120 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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