TinyForge —— 单片机制作·仿真·调试一体化 IDE

绿色单文件版:整个界面(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 的面板上,还能用虚拟键盘按键跟你的程序互动——没有硬件也能体验点灯、按键、显示的乐趣,学会了再上真机,代码不用改。

解压即用,整包丢一个文件夹里就行。下面是用法,欢迎老手多提意见,新手有问题尽管问。

目录
  1. 目录结构
  2. 快速开始
  3. 8051 开发(SDCC 与 Keil)
  4. vSTC 虚拟调试器件库(STC 虚拟器件组帧)
  5. 8051 模拟器(TinySim51)
  6. 常用配置(⚙ 设置)
  7. 常见问题
  8. 示例目录

一、目录结构

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\,不占用程序目录,删除程序不留残留。

二、快速开始

  1. 双击 TinyForge.exe 启动(Windows 10/11 自带 WebView2 Runtime)。
  2. 左侧 examples\ 里点开一个示例,右侧编辑。
  3. 工具栏会出现对应平台的按钮组(自动识别代码用的工具链):
平台按钮说明
TCC(PC 程序)编译 F5内存编译 → 落盘 exe → 运行,printf 回流输出面板
调试 F6内存编译运行,支持断点 / 步入 / 变量监视
文件夹编译 / 文件夹调试编译左侧选中的整个文件夹
SDCC(8051)编译SDCC 编译出 .hex 文件
调试编译 → 进 8051 模拟器实时仿真(串口交互)
文件夹编译 / 文件夹模拟整个文件夹编译出 hex / 模拟运行
Keil(8051)编译调用 UV4 批处理编译 .uvproj 工程
调试工程 hex 进 8051 模拟器

文件夹编译 —— 免工程文件(特色)

TinyForge 没有「工程文件」:一个文件夹就是一个工程。左侧文件树选中文件夹 → 「文件夹编译 / 文件夹调试 / 文件夹模拟」一键处理:

试试:打开左侧 examples\tcc_控制台\multi_工程\(hello.c + util.c + util.h 三文件),选中文件夹点「文件夹编译」——不用建工程,直接出 exe 并运行。

4. 编译成功后,输出面板会出现 「打开位置: <路径>(点击打开并定位)」 —— 点击即可在资源管理器中定位生成的 exe / hex 文件。

三、8051 开发(SDCC 与 Keil)

SDCC(推荐,免费开源)

TinyForge 不打包 SDCC(体积大、客户需求各异),请自行下载:

两种接法,任选其一:

① 放到 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(工程化,可选)

在 ⚙ 设置 → Keil 路径 填写 UV4.EXE 完整路径(如 C:\Keil_v5\UV4\UV4.EXE)。Keil 只能按工程(.uvproj)编译:打开工程源文件或选中工程目录后,点「编译」出 hex、「调试」进模拟器。

四、vSTC 虚拟调试器件库(STC 虚拟器件组帧)

vSTC 是什么:STC-ISP 的「虚拟调试器件」面板(SEG7 数码管、LCD12864、虚拟键盘等)显示内容经 8051 串口以二进制帧上报。TinyForge 的 vSTC 库把「组帧」封装成一个个 vSTC_* 函数 —— 用户程序只管调用,不碰任何帧字节。真机环境换成 STC 官方 USB-HID / USB-CDC 库即可(帧格式完全一致,代码不用改)。

当前支持的器件

器件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);
        }
    }
}

怎么跑起来(模拟运行 + STC-ISP 面板实时交互)

  1. 装虚拟串口对(如 com0com),得到相连的两个端口 COM3 ↔ COM2;
  2. TinyForge 工具栏「模拟串口」下拉选一端(如 COM3);
  3. STC-ISP → 串口监控选另一端(COM2),波特率选 9600(与示例一致),打开串口;
  4. STC-ISP → 「虚拟调试器件」→ 打开 LCD12864 和 虚拟键盘 面板;
  5. TinyForge 打开 examples\sdcc\02.vSTC\01.kbd_lcd12864.c → 点「8051 模拟运行」;
  6. 在虚拟键盘上点键 → LCD 面板与调试台实时响应(每按一键出现 APP: key=41 'A' 行)。

面板没反应:先看 TinyForge 调试台有没有 APP: key=XX 实时行(有 = 链路通,只是面板没开/没选中)。

虚拟键盘常用键值(帧 KEYP 00 <键值> 00 00)

按键键值按键键值按键键值
数字 0~930H~39H字母 A~Z41H~5AH空格20H
回车 Enter0DH退格 Backspace08HDel2EH
向上26H向下28H向左25H
向右27HHome24HEnd23H
PgUp21HPgDn22HEsc1BH
小键盘 +6BH小键盘 -6DH小键盘 *6AH
小键盘 /6FH=3DH小键盘 .6EH

注意事项

五、8051 模拟器(TinySim51)

TinyForge 自带自编译的 8051 模拟器 data\RealSim\TinySim51.exe:

六、常用配置(⚙ 设置)

配置说明
编译选项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)。

八、示例目录

—— TinyForge · 绿色单文件 · 免安装 ——