首先硬件方面我们需要一个USB转串口工具 ch340 可以直接在某宝购买。
然后把ch340插入电脑,执行lsusb命令,执行后会出现如下情况

执行 ls /dev/ttyUSB* 查询所有串口名称

由于只有一个所以这个就是我们到时候写入数据的串口
然后开始安装 sdcc,
sudo apt install sdcc
这个是Linux下面的一个可以编译51单片机的编译器
然后开始安装 stcgal
首先需要安装 python3
sudo apt install python3
sudo apt install python3-pip
sudo pip3 install stcgal
stcgal是用于烧录程序
sdcc编译也很简单,编译命令类似与gcc,如sdcc test.c

其中.ihx,就类型于keil的hex文件
然后是进行烧录,在烧录之前先接线,把ch340的vcc接单片机的vcc,gnd接单片机的gnd,txd接单片机的rxd,rxd接单片机的txd

接线大概这样我用的是STC12C2052 管脚图如下:

烧录命令如下 sudo stcgal -b 4800 -p /dev/ttyUSB0 test.ihx
其中-b 用于定义波特率,-p是定义串口设备,默认是/dev/ttyUSB0
如果觉得太麻烦也可以写入Makefile来执行,比如这样:


如果使用的是windows系统可以使用wsl虚拟机
如果使用wsl首先需要安装usbipd-win (☞゚ヮ゚)☞ https://github.com/dorssel/usbipd-win用管理员权限执行usbipd list命令,查看串口设备

然后执行如下两条命令
usbipd bind -b 1-1
usbipd attach --wsl --busid=1-1

注:后面的数字如1-1请按照自己的设备填写
关键字:51单片机 代码
引用地址:
如何使用Linux编写51单片机代码
推荐阅读最新更新时间:2026-03-25 10:41
《逗比小憨憨51单片机Proteus仿真系列》第19期单片机的5位数码管显示(汇编代码)
源代码: ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV 30H,#01H MOV 31H,#02H MOV 32H,#03H MOV 33H,#04H MOV 34H,#05H MOV P0,#8FH DIS1: MOV R0,#30H MOV R1,#00H MOV R2,#05H DIS2: MOV A,@R0 ANL A,#0FH MOV B,A MOV A,R1 ANL A,#0FH
[单片机]
51单片机矩阵键盘.代码
用Keil4编写的,始终是报错,问题出在哪里??? 代码: #include reg52.h #define seg P0 //数码管段选 #define bitt P2 //CC共阴极数码管 #define keypad P1 typedef unsigned char u8; typedef unsigned int u16; u8 code display_bit ={0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c}; u8 code display_seg ={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,
[单片机]
青花瓷51单片机代码
#include reg51.h #define uchar unsigned char sbit beepIO=P1^5; //定义蜂鸣器端口为p0^7,根据单片机实际蜂鸣器实际接口改变 uchar m,n; //定义4个八度 每八度12分音律 共48音律 uchar code T ={{0,0},//定义音律49个二维数组 {0xF9,0x1F},{0xF9,0x82},{0xF9,0xDF},{0xFA,0x37},{0xFA,0x8A},{0xFA,0xD8},{0xFB,0x23},{0xFB,0x68},{0xFB,0xAA},{0xFB,0xE9},{0xFC,0x24},{0xFC,0x5B}, {0xFC,0x
[单片机]
DS1302暂停程序代码(51单片机)
下面是DS1302暂停程序代码(51单片机), 把它加到对时程序中, 我们在调整时间的时候就能让DS1302暂停计时了. 使用时要注意函数名称和部分变量的修改. /* DS1302暂停计时 */ /******************************************************************/ void Set_Ds1302_pause(void) { unsigned char temp; DS1302_WriteByte(0x8E,0X00); //允许写入 temp=DS1302_ReadByte(0x81);//读当前时钟 DS1302_WriteByte(0x80,temp|0x8
[单片机]
使用51单片机实现抢答器的设计资料和代码说明
在知识比赛中, 特别是做抢答题目的时候, 在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务。如果在抢答中,靠视觉是很难判断出哪组先答题。利用单片机系统来设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒,也可分辨出哪组优先答题。本文主要介绍了单片机抢答器设计及工作原理,以及它的实际用途。 ! 系统工作原理本系统采用8051单片机作为核心。控制系统的四个模块分别为:存储模块、显示模块、语音模块、抢答开关模块。该抢答器系统通过开关电路四个按键输入抢答信号;利用语音芯片ISD1420 完成语音的录放功能; 利用存储程序; 利用一个数码管来完成显示功能。工作时,用按键通过开关电路输入各路的抢答信号
[单片机]
51单片机超声波测距程序代码分享
/超声波模块ME007显示程序 //晶振=8M //MCU=STC10F04XE //P0.0-P0.6共阳数码管引脚 //Trig = P1^0 //Echo = P3^2 #include //包括一个52标准内核的头文件 #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long //*********************************************** sfr CLK_DIV = 0x97; //为STC单片机定义,系统时钟分频 //为STC单片机的IO口设置地址定义 sfr
[单片机]
【51单片机】STC89C52独立键盘实验,含c代码(6)
1.参考教程: 清翔51单片机教程 2.实现效果: 利用独立键盘的按键,控制数码管数字的变化。 3.基本原理 **特点:**每个按键占用一个IO口,当按键数量较多时,IO口的利用效率不高,但程序简单,适用于所需按键较少的场合。 **原理:**以按键S2为例,给P30赋逻辑1,当S2被按下的时候,由于S2左端接地,则P30输出由高电平变低电平。S2没被按下依旧输出高电平。 4.参考代码 #include reg52.h #include intrins.h //标准库函数 #define uint unsigned int #define uchar unsigned char sbit DU = P2^6; //
[单片机]
51单片机开发中一些常用代码块
数码管中的16个字符 uchar code table ={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; 延时函数(使用之前先声明一遍) void delay(uint); void delay(uint z) { uint x,y; for(x=z;x 0;x--) for(y=110;y 0;y--); } 点亮第一个二级管 #include reg52.h //点亮第一个发光二级管 sbit D1=P1^0;//P1是P1口,P1^0代表D1,D1为自己命名的变量 m
[单片机]