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

屠龙刀三STC32G12K128实验板驱动TFT(128x160)彩屏

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

4

主题

511

回帖

1991

积分

金牌会员

积分
1991
发表于 2024-6-3 19:00:00 | 显示全部楼层

原程序内的TestLCD7735.hex,直接下载,可以,一切正常,好,就是不能编译,请问你是这个情况吗
回复 支持 反对

使用道具 举报 送花

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

4

主题

511

回帖

1991

积分

金牌会员

积分
1991
发表于 2024-6-3 19:02:45 | 显示全部楼层
浦江*** 发表于 2024-6-2 21:29
这是一个警告,不是错误,是可以忽略的, 再次编译,也许就不提示了。
意思是某个参数未引用到,或者不够严 ...

实在不行,就分享一下,Keil的正在使用好编译的版本,的安装包,我安装再试试 ,
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:321
  • 最近打卡:2025-05-01 21:04:13
已绑定手机

21

主题

487

回帖

1027

积分

金牌会员

积分
1027
发表于 2024-6-3 19:56:14 | 显示全部楼层
我也来学习了,支持一下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:464
  • 最近打卡:2025-04-29 08:25:45

10

主题

130

回帖

564

积分

高级会员

积分
564
发表于 2024-6-3 21:38:38 | 显示全部楼层
科学*** 发表于 2024-6-3 19:00
原程序内的TestLCD7735.hex,直接下载,可以,一切正常,好,就是不能编译,请问你是这个情况吗 ...

主程序 添加 #include "intrins.h"
LCD_7735_H 添加 #include "STC32_STC8_usb.h"
删掉文件夹中的 STC32G.H 文件,使用系统中的。
重新编译
回复 支持 反对

使用道具 举报 送花

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

4

主题

511

回帖

1991

积分

金牌会员

积分
1991
发表于 2024-6-4 11:56:10 | 显示全部楼层
NT*** 发表于 2024-6-3 21:38
主程序 添加 #include "intrins.h"
LCD_7735_H 添加 #include "STC32_STC8_usb.h"
删掉文件夹中的 STC32 ...

按上述内容操作,编译显示 USER\LCD_7735.C(500): error C7: compilation aborted   请问
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:78
  • 最近打卡:2025-04-30 10:04:20

7

主题

22

回帖

1063

积分

金牌会员

积分
1063
发表于 2024-6-4 13:24:11 | 显示全部楼层
#define u8  unsigned char
#define u16 unsigned int

把上面的放入
#ifndef __LCD_7735_H_
#define __LCD_7735_H_
里可以编译
回复 支持 反对

使用道具 举报 送花

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

30

主题

347

回帖

3476

积分

荣誉版主

积分
3476
发表于 2024-6-4 20:36:51 | 显示全部楼层
科学*** 发表于 2024-6-4 11:56
按上述内容操作,编译显示 USER\LCD_7735.C(500): error C7: compilation aborted   请问

近日稍忙,迟复为歉。

关于实验程序在你那里编译不顺的反馈,感觉有点水土不服了。估计主要原因还是编译环境的差异吧。
先理解一下上述错误提示:
(此前是:  提示USER\LCD_7735.C(389): error C7: compilation aborted)

由于C7类的错误,强制中断了编译。C7是指某些语句语法错误,无法通过编译。这已不是前次所说的警告了,而是不可忽略的错误了。



先贴一下我编译的截图。
编译结果.jpg

无警告,无错误。LCD_7735.C(389)行没发现错误。我只能猜测为,源文件是否经过了编辑,夹杂了某些非法字符,导致编译器认为错误。



另外,我考虑,STC32G系列所需编译器为C251,不一定要安装在C51一起的。
于是在另外一台计算机中单独安装了C251(v560),当然新装C251要做一些“注册”操作的,并且用STC-ISP软件添加有关型号和头文件到Keil中,这样得到一个纯净的编译环境,
再编译之正常通过没有发现此前所说的问题。

关于有坛友说一:
主程序 添加 #include "intrins.h"
LCD_7735_H 添加 #include "STC32_STC8_usb.h"
删掉文件夹中的 STC32G.H 文件,使用系统中的。
重新编译


谈一下认识和理解。
主程序 添加 #include "intrins.h" 是没有必要的。

"intrins.h"这个文件的作用是可用_nop_这样的空指令和执行一些汇编指令, 这与本实验无关。本实验其实很简单,没有用到其中的特殊指令语句。
而且, 在STC32G.H文件中就有这个包含,不必再在主程序中添加。
LCD_7735_H 添加 #include "STC32_STC8_usb.h",我认为也是没必要的。
LCD_7735在做针对STC32G的简单实验,何必再扯上STC8和usb干啥呢?

删掉文件夹中的 STC32G.H 文件,使用系统中的。

这正是要说明的, 是为了实验程序打包的完整性,是故意保留在这文件夹中的。
如果系统中的STC32G.H与这文件夹中的STC32G.H是完全相同的话,那么删与不删是没有区别的,对编译遇到的问题没有任何影响。
是否发现?现在的STC32G.H已有多种版本,长度字节不同,定义也不同,并不是完全兼容的。(比如SPI部分,有些实验走不通,就是STC32G.H不同了)
所以,先用文件夹中的头文件。


顺便备忘一下这个知识点:
#include "STC32G.H"     是首先使用当前文件夹中的  STC32G.H


#include <STC32G.H>   是首先使用编译系统中的 STC32G.H (在...C251\INC\STC\...路径中)


关于有坛友说二:

#define u8  unsigned char
#define u16 unsigned int
把上面的放入
#ifndef __LCD_7735_H_
#define __LCD_7735_H_
里可以编译



谈一下认识和理解。

这里是一个宏定义, 把u8 定义为 unsigned char  把u16 定义为 unsigned int.
目的是为了简化unsigned char和unsigned int的书写.
其实常见的类型说明是:

typedef unsigned char   u8;
typedef unsigned int    u16;

.....
因为u8,u16...并不是标准C语言的保留字, 所以使用之前必须要有定义说明.
这一点在移植代码时,往往容易疏忽,造成编译警告或错误.
上面坛友说, 放入LCD_7735.H里, 可以编译了, 正说明这个定义对编译有点影响了.
如果放入LCD_7735.H, 那么只是在引用LCD_7735的模块有效, 对其它模块还是没有用的,
其实最好是放在STC32G.H,可使用更广泛些. 不过为了尊重官方的头文件STC的完整性和权威性,一般不这么做.


上述两点,我感觉都与你遇到的编译通不过关系不是很大。

为了使编译能顺利通过, 我对原文件又做了少许修改, 全部使用最基本的语句, 文件包已经在一楼更新,可以再下载试试看。 祝实验顺利愉快。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:464
  • 最近打卡:2025-04-29 08:25:45

10

主题

130

回帖

564

积分

高级会员

积分
564
发表于 2024-6-4 21:36:37 | 显示全部楼层
浦江*** 发表于 2024-6-4 20:36
近日稍忙,迟复为歉。

关于实验程序在你那里编译不顺的反馈,感觉有点水土不服了。估计主要原因还是编译 ...

1. 不添加 #include "intrins.h"  会出现下面错误
*** ERROR L127: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  _nop_
    MODULE:  .\OUT\Main.obj (Main)
*** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  _nop_
    MODULE:  .\OUT\Main.obj (Main)
    ADDRESS: FF9582H
*** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  _nop_
    MODULE:  .\OUT\Main.obj (Main)
    ADDRESS: FF9585H
2. STC32_STC8_usb.h 文件中包含,u8, u16 定义。
回复 支持 反对

使用道具 举报 送花

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

30

主题

347

回帖

3476

积分

荣誉版主

积分
3476
发表于 2024-6-5 09:18:55 | 显示全部楼层
NT*** 发表于 2024-6-4 21:36
1. 不添加 #include "intrins.h"  会出现下面错误
*** ERROR L127: UNRESOLVED EXTERNAL SYMBOL
    SYMB ...

感谢这位坛友的浏览和回复。
有句说“存在即合理”,
在你那里编译时,出现错误了提示。这一定是合理的,不能否认的,也一定是有缘由的。
在我这里编译时,没出现错误提示。这也定是合理的,不能否认的,也一定是有缘由的。
这就成了一个很有趣的话题。
再仔细分析一下,应该越来越清楚的。
试分析一下:

在Main.C文件中,因为使用了STC-ISP软件生成的1ms延时函数:
void Delay1ms(void);//@22.1184MHz
这函数其中使用了_nop_()语句, (看来就是它引出的问题了.)
这_nop_()语句就是一个宏, 它定义在"intrins.h"中.

那么, 在原Main.C中, 首先包含了STC32G.h文件.  而STC32G.h中首先就包含了<intrins.h>,因此只要包含了STC32G.h,就是包含了intrins.h.h,也就是包含了_nop_()宏定义.
所以在我这里编译,是0错误0警告,没出现关于_nop_()找不到的错误提示,  

然而, 如果诚如坛友所建议, 删除STC32G.h, 改用 "STC32_STC8_usb.h",
在这样的条件下,
因为STC32_STC8_usb.h中不包含intrins.h.h,所以在编译时,找不到_nop_的宏定义,就会出现了楼上所示的错误提示.
为了克服这错误提示, 因此坛友还建议在Main.C中加入#include "intrins.h". 这没错,也是合理的。

再来看看,  STC32_STC8_usb.h,  这其中包含了包含u8, u16 定义,这当然是知道的.
为了包含u8和u16的定义,而删除STC32G.h,是否合适?
这样一来,除了引发了上述由于删除STC32G.h而引起的新问题不说.
再看看STC32_STC8_usb.h其中的内容是什么,它能包含STC32G.h的内容吗?
除了
typedef unsigned char u8;
typedef unsigned int  u16;
.....
这样的定义外, 还包含了
SEG7...
LCD12864...
OLED12864...
等多种外设的定义.
尽管只有定义说明, 没有函数实现,也没有使用, 不会影响编译, 但是对于本驱动LCD_7735的实验来说,个人还是认为是没有必要删除STC32G.h而用STC32_STC8_usb.h来替代的.

其实为了使用u8,u16定义, 只要建议在使用前在某个地方定义一下即可了,千万不要建议删除非常重要的STC32G.h。

仅供参考。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:464
  • 最近打卡:2025-04-29 08:25:45

10

主题

130

回帖

564

积分

高级会员

积分
564
发表于 2024-6-5 10:20:10 | 显示全部楼层
不是用STC32_STC8_usb.h 替换 STC32G.h, 也替换不了。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 06:48 , Processed in 0.144235 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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