绿色单文件版:整个界面(web)内嵌在 exe 里,无需安装、免注册,解压即用。内置 Tiny C Compiler(TCC),可直接写 PC 控制台 / 窗口程序;通过外挂 SDCC / Keil 支持 8051 单片机 开发,配自带 8051 模拟器(TinySim51)实现实时串口交互仿真,并内置 STC 虚拟调试器件组帧库(vSTC),可直连 STC-ISP「虚拟调试器件」面板双向交互。
平时折腾单片机,顺手做了个绿色小工具 TinyForge——一个免安装的单片机 IDE,主要是想给刚入门的朋友省点事:不用买开发板、不用装一堆软件,电脑上就能写 8051 程序、直接仿真看效果。
它内置 C 编译器(TCC),PC 小程序直接写;外挂 SDCC/Keil 就能玩 8051。最有意思的是配合 STC 官方「虚拟调试器件」:程序里的数码管、LCD12864 显示,会实时显示在 STC-ISP 的面板上,还能用虚拟键盘按键跟你的程序互动——没有硬件也能体验点灯、按键、显示的乐趣,学会了再上真机,代码不用改。
解压即用,整包丢一个文件夹里就行。下面是用法,欢迎老手多提意见,新手有问题尽管问。
TinyForge\ ├─ TinyForge.exe # 主程序(界面内嵌,绿色单文件) ├─ examples\ # 示例代码(TCC 控制台 / 8051 串口 / vSTC 虚拟器件等) └─ data\ # 数据目录(配置、工具链、模拟器) ├─ config.json # 软件配置(设置里改,自动保存到这里) ├─ lib\ # TCC 运行库(libtcc1-64.a 等,内置编译器依赖,勿删) ├─ RealSim\ # 8051 模拟器 TinySim51.exe(自带,勿删) ├─ sdcc\ # SDCC 工具链(可选,放这里自动识别,见下文) ├─ completion\ # 代码补全库(自动生成/重建) └─ tmp\ # 编译临时目录(自动清理)
WebView2 的用户数据与临时文件放在系统
%TEMP%\TinyForgeWebView2\,不占用程序目录,删除程序不留残留。
TinyForge.exe 启动(Windows 10/11 自带 WebView2 Runtime)。examples\ 里点开一个示例,右侧编辑。| 平台 | 按钮 | 说明 |
|---|---|---|
| TCC(PC 程序) | 编译 F5 | 内存编译 → 落盘 exe → 运行,printf 回流输出面板 |
| 调试 F6 | 内存编译运行,支持断点 / 步入 / 变量监视 | |
| 文件夹编译 / 文件夹调试 | 编译左侧选中的整个文件夹 | |
| SDCC(8051) | 编译 | SDCC 编译出 .hex 文件 |
| 调试 | 编译 → 进 8051 模拟器实时仿真(串口交互) | |
| 文件夹编译 / 文件夹模拟 | 整个文件夹编译出 hex / 模拟运行 | |
| Keil(8051) | 编译 | 调用 UV4 批处理编译 .uvproj 工程 |
| 调试 | 工程 hex 进 8051 模拟器 |
TinyForge 没有「工程文件」:一个文件夹就是一个工程。左侧文件树选中文件夹 → 「文件夹编译 / 文件夹调试 / 文件夹模拟」一键处理:
.c / .h,无需手工添加文件;文件夹名.exe、SDCC 出 文件夹名.hex,落在文件夹根目录,点「打开位置」直接定位;.uvproj 工程(调用 UV4 批处理)。试试:打开左侧
examples\tcc_控制台\multi_工程\(hello.c + util.c + util.h 三文件),选中文件夹点「文件夹编译」——不用建工程,直接出 exe 并运行。
4. 编译成功后,输出面板会出现 「打开位置: <路径>(点击打开并定位)」 —— 点击即可在资源管理器中定位生成的 exe / hex 文件。
TinyForge 不打包 SDCC(体积大、客户需求各异),请自行下载:
https://sdcc.sourceforge.net/(Windows 版,如 sdcc-4.x.x-x64-setup.exe 或解压版)bin\sdcc.exe 和 include\(必须完整,否则 #include <8051.h> 会找不到)。两种接法,任选其一:
① 放到 data\sdcc(推荐,零配置)
把整个 SDCC 目录放进 data\sdcc\,使结构为 data\sdcc\bin\sdcc.exe。启动软件即自动识别。
② 放在任意位置,手动指定
在 ⚙ 设置 → SDCC 路径 中填写,三种填法都认:
D:\sdcc ← 根目录(推荐) D:\sdcc\bin ← bin 目录(自动归一) D:\sdcc\bin\sdcc.exe ← exe 完整路径(自动归一)
填完保存后,若识别成功,「平台」下拉里 SDCC 变为可选;识别失败会自动禁止选择。
在 ⚙ 设置 → Keil 路径 填写 UV4.EXE 完整路径(如 C:\Keil_v5\UV4\UV4.EXE)。Keil 只能按工程(.uvproj)编译:打开工程源文件或选中工程目录后,点「编译」出 hex、「调试」进模拟器。
vSTC 是什么:STC-ISP 的「虚拟调试器件」面板(SEG7 数码管、LCD12864、虚拟键盘等)显示内容经 8051 串口以二进制帧上报。TinyForge 的 vSTC 库把「组帧」封装成一个个 vSTC_* 函数 —— 用户程序只管调用,不碰任何帧字节。真机环境换成 STC 官方 USB-HID / USB-CDC 库即可(帧格式完全一致,代码不用改)。
examples\vSTC\vSTC.h(#define VSTC_IMPLEMENTATION + #include 即用,无需额外 .c)vSTC_SendByte(ch);业务 .c 里先包含器件头(SDCC #include <8051.h>,Keil #include <STC8.H> 等)再包含 vSTC.h| 器件 | vSTC 函数 |
|---|---|
| SEG7 数码管(8 位) | vSTC_Seg7ShowString(fmt,...) / ShowLong(n,radix) / ShowFloat(f) / ShowCode(cod) |
| LCD12864(128×64,ST7920 自带 GB2312 字库) | vSTC_Lcd12864DisplayOn/Off/Clear / CursorOn/Off / ShowString(x,y,str) / ReverseLine(line) 等 |
| 虚拟键盘(接收方向) | vSTC_KeyFeed(ch):主循环喂串口字节,完整按键帧到达返回键值(ASCII),未组完返回 0 |
其他 STC 虚拟器件(LED、按键、更多外设)在后续版本陆续补充。
#define VSTC_IMPLEMENTATION /* 单文件库:实现编进本文件 */
#include <8051.h> /* 器件头:提供 SFR(SBUF/RI/TI/SCON...),必须先包含 */
#include "..\..\vSTC\vSTC.h" /* 共享库相对路径 */
static void uart_init(void) { SCON = 0x50; TMOD = 0x20; TH1 = TL1 = 0xFD; TR1 = 1; TI = 0; } /* 9600 @ 11.0592MHz */
void vSTC_SendByte(unsigned char ch) { SBUF = ch; while (!TI); TI = 0; } /* 库要求的发送钩子(客户实现) */
void main(void) {
uart_init();
vSTC_Lcd12864DisplayOn();
vSTC_Lcd12864DisplayClear();
vSTC_Lcd12864ShowString(0, 0, "Hello!");
for (;;) {
if (RI) {
unsigned char ch = SBUF, k;
RI = 0;
k = vSTC_KeyFeed(ch); /* 组帧:完整按键到达返回键值 */
if (k) vSTC_Seg7ShowString("%02X", k);
}
}
}
COM3 ↔ COM2;examples\sdcc\02.vSTC\01.kbd_lcd12864.c → 点「8051 模拟运行」;APP: key=41 'A' 行)。面板没反应:先看 TinyForge 调试台有没有
APP: key=XX实时行(有 = 链路通,只是面板没开/没选中)。
KEYP 00 <键值> 00 00)| 按键 | 键值 | 按键 | 键值 | 按键 | 键值 |
|---|---|---|---|---|---|
| 数字 0~9 | 30H~39H | 字母 A~Z | 41H~5AH | 空格 | 20H |
| 回车 Enter | 0DH | 退格 Backspace | 08H | Del | 2EH |
| 向上 | 26H | 向下 | 28H | 向左 | 25H |
| 向右 | 27H | Home | 24H | End | 23H |
| PgUp | 21H | PgDn | 22H | Esc | 1BH |
| 小键盘 + | 6BH | 小键盘 - | 6DH | 小键盘 * | 6AH |
| 小键盘 / | 6FH | = | 3DH | 小键盘 . | 6EH |
02.vSTC 目录有多个示例并存(都内联同一实现)→ 文件夹编译会 Multiple definition,请用单文件模式(打开示例 .c → 点「8051 模拟运行」)。!src\stc\虚拟调试器件\说明.html。TinyForge 自带自编译的 8051 模拟器 data\RealSim\TinySim51.exe:
.ihx(SDCC)或 .hex(Keil)直接进模拟器仿真;REN=1 + RI/SBUF 轮询即收),程序 printf 输出实时回调试区;| 配置 | 说明 |
|---|---|
| 编译选项 | TCC 的 -Wall / -W / 优化 / 标准 / 额外参数 |
| 平台 | SDCC 目标(当前 8051/mcs51);存储模式 small/medium/large;晶振;波特率 |
| SDCC 路径 | 留空自动探测 data\sdcc;否则按上文三种填法指定 |
| Keil 路径 | UV4.EXE 完整路径 |
| 串口 | 8051 模拟器对外透传的本地 COM 口 |
Q:平台下拉里 SDCC/Keil 是灰的选不了?
说明没有找到对应的编译器。SDCC:确认 data\sdcc\bin\sdcc.exe 存在,或到 ⚙ 设置里正确指定路径;Keil:确认 UV4.EXE 路径填写正确。
Q:#include <8051.h> 编译报错「cannot open file」?
SDCC 目录不完整 —— 缺少 include\mcs51\ 头文件目录。请使用完整安装版 SDCC(解压版要整个目录一起拷,不能只拷 bin)。
Q:编译出的 hex / exe 在哪?
编译成功后,点输出面板里的「打开位置」即自动打开所在文件夹并选中文件。
Q:调试/编译过程中工具栏按钮变灰点不了?
极少数情况下按钮状态未自动复位(旧版已知问题,新版已加自动复位机制)。若遇到:按 Ctrl+F5 强制刷新界面即恢复(不影响已保存的源码与配置);仍不行就关闭 TinyForge 重新打开。
Q:被杀毒软件误报?
程序是绿色单文件,运行时不释放可执行文件(模拟器/编译器均为静态落盘),临时文件仅写系统 %TEMP%。如遇个别启发式误报,添加信任即可。
Q:8051 程序怎么收发串口?
标准 8051 UART:REN=1 使能接收,RI 标志查询/中断接收,TI 查询发送。模拟器与调试台输入实时互通(参考 examples\sdcc\01.uart_echo)。
examples\tcc_控制台\ —— PC 控制台程序示例(含 __tf_dbg 调试头、多文件工程)examples\tcc_窗口\ —— PC 窗口程序示例(WinMain)examples\tcc_Dll\ —— DLL 编译示例examples\sdcc\ —— 8051 示例(01.uart_echo 串口回显、02.vSTC 虚拟调试器件交互:虚拟键盘 → LCD12864/SEG7)examples\keil\ —— Keil 工程示例(seg7 数码管、UART)examples\vSTC\ —— 共享 vSTC 库(8051 常用头,SDCC/Keil 均可 include)—— TinyForge · 绿色单文件 · 免安装 ——