dongfang 发表于 2026-2-24 12:34
你好,我理解的意思是,第一行 LCD_SetWindow(X,Y,X,Y+H);设置显示区域是一条竖线,
第二行 for(i=0;i ...
第一行理解为"设置显示区域是一条竖线"也是对的.
其实质是设置一个矩形区域,因为X水平方向的宽度是1, 那么就相当于,区域就是垂直的一条线了.
"只能在这个区域,超过这个区域坐标Y值是可以自动加1的",
我的理解是, 在X水平方向地址是自动加一的, 但是到设置X的边界了, 要换行了,Y才被迫加1.
画垂直线,两种方法都可以的:
一种是我所写的原函数, 先定一个宽度为1的区域,高度就是线的长度, 设定后的初始坐标是在左上角,也就是顶端了, 然后后面连续写入色点数据, (因为写入一个色点数据后,宽度就到了,被迫换行,好像是Y自动加1),这样效率比较高.
另一种就入你修改的函数, 每次要写入一个色点数据时,先MoveTo, 就是定一个坐标点, 只要你定坐标的函数是正确有效的, 那么每一个点都是落在你指定的位置上, X没变,Y+i在变, 那么就是一条垂直线了. 这种方法,效率稍稍低一些, 而且前面的TFT_SET_ADD(X,Y,X,Y+H)是不需要的.
浦江一水 发表于 2026-2-24 13:19
第一行理解为"设置显示区域是一条竖线"也是对的.
其实质是设置一个矩形区域,因为X水平方向的宽度是1, 那 ...
刚才我看了看问题找到了,我的TFT_SET_ADD(X,Y,X,Y+H)函数
void TFT_SET_ADD(unsigned int X,unsignedint Y,unsigned int X_END,unsigned int Y_END)
{
TFT_SEND_CMD(0x2A); //窗口地址横向
TFT_SEND_DATA16(X);//start column
TFT_SEND_DATA(X_END);//start column
TFT_SEND_CMD(0x2B); //窗口地址纵向
TFT_SEND_DATA16(Y); //start row
TFT_SEND_DATA16(Y_END); //start row
TFT_SEND_CMD(0x2C); //写入数据
}第三行TFT_SEND_DATA少写个16,变成只传送8位,非常感谢你的解答
浦江老师你好,我参照你的汉字显示函数编写的汉字显示函数,编译没有警告,但页面上出现了警告,我在显示变量数值,编译也出现警告,但也能正常显示,应该指针类型的问题,请帮忙分析分析,如何解决?
我把函数里的指针类型改成char,只在 if(*str>0x80)语句前面出现警告,我又加了个类型转换,警告没了,不知这样合适不合适,但现在显示正常,
void TFT_Str24(u16 X,u16 Y,char * str,u8 Fc,u8 Bc)//显示一个24*24点阵中西文字符串函数
{
char ch;
while(*str)
{ if((u8)*str>0x80)
{ ch=*str;ch=*(str+1);
TFT_HZ24(X,Y,ch,Fc,Bc);
X+=24; str+=2;
}
else
{ TFT_A24(X,Y,*str,Fc,Bc); X+=12; str++; }
if(X>LCD_W-12){ X=0;Y+=24; }
}
}
dongfang 发表于 2026-2-26 13:41
浦江老师你好,我参照你的汉字显示函数编写的汉字显示函数,编译没有警告,但页面上出现了警告,我在显示变 ...
这种现象我的理解是编译环境的版本较高,对语法检验较严格,认为不符合某种C标准,所以提出警告,大多为数据类型不明确. 但是这不是致命错误, 所以能通过编译,运行也正常. 基本可忽略不计. 但是在页面上出现警告,让人看着不舒服,是应该加以克服的.
具体到上例而言,函数的形参中, char * str 是字符串, 类型是字符型的,每个字符取值范围是0..255. 而在语句调用时, if(*str>0x80)...这就是在比较大小了. 那么取值范围是无符号的0..255呢,还是有符号的-128到+127呢? 这就模糊了, 所以要警告一下. 你加上(u8)强制转换, 数据类型明确了,也就没有警告了.
应对此类情况, 无非有两种方法, 一个是严格语法表达,二是改变Keil环境设置(比如取消同步语法检验,不警告,具体是要看keil版本在哪设置勾选的).
不知我的理解是否正确, 仅供参考了.
尊敬的版主,我这几天在STC32G12K128试验箱上面运行STC公司的79-UART-SPI-LCM_DMA-交替使用下载显示图片例程,但是屏幕没有显示,运行您的程序就OK,想请教一下您,有运行STC公司这个79号程序成功过么,我的屏也是5V的TFTILI9341
wuzhengmin 发表于 2026-5-13 20:29
尊敬的版主,我这几天在STC32G12K128试验箱上面运行STC公司的79-UART-SPI-LCM_DMA-交替使用下载显示图片例 ...
这位同学你好, 感谢你浏览本帖。
很抱歉最近忙于其它项目编程,没时间来做这个实验。以后有空实验了再说.
应该说,官方的例程是没有问题的。
不过, 根据个人体会,在此提醒一下: STC-ISP版本是很多的。要注意并不是最新的是最适合的。
像STC32G128K V9.62 实验箱,现在说算是比较老的版本了,那时适用的是stc-isp V6.9前后的版本,
现在是更新多代的ISP新版本了, 如果你使用USB-Link-D调试器来调试老实验箱的话, 会提醒你固件版本需要更新,一旦更新了. 那么调试器输出S-VCC 5V电源就没有了, 这样显示屏如果没有另外5V供电, 它是不会亮的. 看看是否是这个原因.
按理讲,更新固件不会影响调试器S-VCC 5V输出的. 但是实际就是如此的.即便是你指定输出5V,它也会自动回到3.3V的.
若想要恢复调试器的S-VCC 5V输出, 只能用V6.94前版本, 手动烧写恢复固件版本. 才能恢复USB-Link-Dde S-VCC5V 供电. 这样调试用新ISP版本,总是提醒更新固件, 也是有点别扭的.
什么原因,咱们是难以搞清楚的, 只有官方知道了.估计现在是没人会注意并修正这一点的.
浦江一水 发表于 2026-5-14 16:30
这位同学你好, 感谢你浏览本帖。
很抱歉最近忙于其它项目编程,没时间来做这个实验。以后有空实验了再说 ...
感谢您,我今天在学习TFT彩屏,不知道什么原因,就是不能成功下载图片文件去Flash,今天换了Ai8051U试验箱,还在折腾中..................感谢您百忙中答复我!!!祝您工作顺利!!!
wuzhengmin 发表于 2026-5-14 19:22
感谢您,我今天在学习TFT彩屏,不知道什么原因,就是不能成功下载图片文件去Flash,今天换了Ai8051U试验箱 ...
这个实验实际上包含了多个知识点, 建议一步一步来:
1, 先搞一个串口通讯实验, 弄清楚CDC串口功能(因为以后要用官方ISP工具下载图片数据), 实现用printf()函数与PC机通讯;
2, 再搞一个TTF彩屏显示实验,让单片机能操控显示屏, 实现一些基本功能, 如显示中西文字符串和画点画线功能,以及显示图标等等;
3, 实验对Flash的读写, 实际上就是读写W25Qxx功能.(此时可利用屏幕或通讯检验准确性)
4, 实验PC机下载图片数据到单片机并写入到Flash中;
5, 最后才是如何从Flash中读取图片数据, 并显示在屏幕上.
以上各基本实验,在本论坛里应该都能找到例程的.参考消化一下,变成自己的东西,形成知识点积累.
如果一上来就实验官方例程, 出现问题,就不太好分析是在哪个环节出问题了.
仅供参考, 祝实验顺利!
浦江一水 发表于 2026-5-15 11:54
这个实验实际上包含了多个知识点, 建议一步一步来:
1, 先搞一个串口通讯实验, 弄清楚CDC串口功能(因为以 ...
感谢您的耐心指导,确实要按照您的计划进度,慢慢学习。。。。。。。。。。再一次感谢!
wuzhengmin 发表于 2026-5-15 13:50
感谢您的耐心指导,确实要按照您的计划进度,慢慢学习。。。。。。。。。。再一次感谢! ...
这位同学你好!
今天抽空做了一下关于第79例程的实验, 结果是成功的.
完全与官方描述的一致.
过程中几个要点说一下:
硬件条件:
STC32G128K V9.62实验箱. 加装320x240的TTF显示屏.USB-Link-D调试器.
软件条件:
STCAI-ISP软件V6.94版, 图片Bin文件若干,DEMO 79的官方代码文件 LCM_Test.hex
实验步骤:
1,正确连接(应该知道怎样连接的)后, 上电, 看显示屏是否点亮(不管显示显示啥内容,背光要亮).
如果不亮(是USB-Link-D 没有S-VCC 5V供电给显示屏), 则要用STCAI-ISP软件V6.94版,重烧USB-Link-D固件.
2,以上通过后, 将LCM_Test.hex下载到实验箱CPU中, 注意主频选35MHz. (应该知道怎样下载的)
3, HEX下载成功后,程序启动, 显示屏显示白色,无内容, 这是正常的.
LCM_Test.hex已经启动,这时要注意INT0和INT1两个键的用法.各有短按长按之分...(使用说明中有描述,官方程序就是这样设计使用的)
开始下载图片文件....
上位机STCAI-ISP软件V6.94版, 切换到USB-CDC串口助手, 打开STC-USB-CDC1-UART串口, 波特率115200. (注意准确选择通讯端口)
短按INT1键, 观察串口助手的窗口显示:
接收←Ready to receive data...
说明通讯口通了. 已准备好接收图片数据下载了.....
点击发送文件, 设置一次发送256字节, 间隔1ms, 打开待发送的BIN文件. 点击发送,
串口助手的窗口显示可以看到,哗哗的字节流动, 稍等片刻, 一个图片文件下载完毕, 有提示的...
重复以上操作, 每短按一次INT1键, 下载一个图片文件......
先后共重复4次,下载4个bin图片文件数据...
结束后, 屏幕显示依然空白,这是正常的, 因为此时还没执行显示图片程序.
短按INT0键, 显示一幅图片, 再短按一次INT0键, 切换下一幅图片.... 这是手动切换.
如果长按INT0键, 则程序自动循环显示刚刚下载的图片.
......
整个实验完毕, 再对照一下, 使用手册的描述, 复习一下.
这个过程, 说明官方的DEMO是没有问题的, 实验通过也是比较容易的, 但是收获印象不一定是很深刻的.
真正理解和掌握其中的原理和编程技巧, 还是要细细琢磨深入学习的. 成为自己的积累技术, 还是按此前所说,一步一步来....
实验的工具和相关文件, 打包如下, 免得再费时收集了.
祝你实验顺利愉快, 学习进步.