首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >51单片机在Ubuntu和MacOS下程序开发和下载

51单片机在Ubuntu和MacOS下程序开发和下载

作者头像
zhangrelay
发布于 2021-03-03 06:32:09
发布于 2021-03-03 06:32:09
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

这学期有51单片机课程,平时调试代码不用windows,查阅了一些资料,不太能用,现在将51单片机在ubuntu下(Linux通用)开发和下载说明一下:需要用到SDCCstcgal

推荐使用HML_FwLib_STC89!!!

具体参考:https://blog.csdn.net/ZhangRelay/article/details/109196577

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*****************************************************************************
 *                             头文件                                         *
 *****************************************************************************/
#include "hml/hml.h"
#define LSA   P1_5
#define LSB   P1_6
#define LSC   P1_7
/*****************************************************************************
 *                             初始化                                         *
 *****************************************************************************/
char receiver;
void sys_init(void)
{
    UART_configTypeDef uc;
 
    uc.baudrate          = 4800;
    uc.baudGenerator     = PERIPH_TIM_2;
    uc.interruptState    = DISABLE;
    uc.interruptPriority = UTIL_interruptPriority_0;
    uc.mode              = UART_mode_1;
    uc.multiBaudrate     = DISABLE;
    uc.receiveState      = ENABLE;
 
    UART_config(&uc);
    enableAllInterrupts();
    LSA = 0;
    LSB = 0;
    LSC = 0;
}
/*****************************************************************************
 *                             主函数                                         *
 *****************************************************************************/
void main(void)
{
    sys_init();
    unsigned char j=0,sel=0x00;
    while(true)
    {
    	while(RI==0);
    	RI=0;
    	receiver=UART_getByte();
	if(receiver=='1')
	{
	  UART_sendString("你真的已经放弃学习单片机了吗?\r\n");
	  for(j=0,sel=0x7F;j<8;j++)		
    	  {	
	    P0=sel;
	    sleep(125);	
	    sel=sel>>1|0x80; 	
          }
          sel=0xFF;
          P0=sel;
          sleep(100);	
	}
        if(receiver=='2')
        {
          UART_sendString("是的,完全学不会啊!\r\n");
          for(j=0,sel=0xFE;j<8;j++)		
    	  {	
	    P0=sel;
	    sleep(125);	
	    sel=sel<<1|0x01; 	
          }
          sel=0xFF;
          P0=sel;
          sleep(100);
        }
        receiver=0;
    }
}

已测试Linux通用,Ubuntu16.04,18.04.20.04均可。

资源下载:https://download.csdn.net/download/ZhangRelay/12820423

什么是SDCC?

SDCC是可重定目标的,优化的标准C(ANSI C89,ISO C99,ISO C11)编译器套件,针对的是基于Intel MCS51的微处理器(8031、8032、8051、8052 等)Maxim(以前为Dallas),DS80C390飞思卡尔(以前基于Motorola)基于HC08 (hc08,s08), 基于Zilog Z80的MCU (z80,z180,gbz80,Rabbit 2000/3000,Rabbit 3000A,TLCS-90)Padauk(pdk14,pdk15)STMicroelectronics STM8。支持Padauk(pdk13)Microchip PIC16PIC18 目标的工作正在进行中 。可以将其重新定位为其他微处理器。

SDCC套件是从具有不同FOSS许可证的不同来源派生的几个组件的集合。SDCC编译器套件包括:

  • SDASsdld,一个retargettable汇编程序和连接,基于ASXXXX,由Alan鲍德温写入; (GPL)。
  • sdcpp 预处理器,基于GCC cpp ; (GPL)。
  • ucsim 模拟器,最初由Daniel Drotos编写;(GPL)。
  • sdcdb 源代码级调试器,最初由Sandeep Dutta编写;(GPL)。
  • sdbinutils 库归档实用程序,包括从GNU Binutils派生的sdar,sdranlib和sdnm;(GPL)
  • SDCC运行时库;(GPL + LE)。Pic设备库和头文件来自Microchip头文件(.inc)和链接程序脚本(.lkr)文件。Microchip要求“头文件应声明它们仅可与可靠的Microchip设备一起使用”,这使它们与GPL不兼容。
  • gcc-test 回归测试,源自 gcc-testsuite;(未明确指定许可,但由于它是GCC的一部分,因此可能是GPL许可)
  • packihx ; (公共区域)
  • makebin ; (zlib / libpng许可证)
  • sdcc C编译器,最初由Sandeep Dutta编写;(GPL)。一些功能包括:
    • 广泛的MCU特定语言扩展,可有效利用基础硬件。
    • 一系列标准优化,例如全局子表达式消除,循环优化(循环不变式,归纳变量的强度降低和循环反转),恒定折叠传播,复制传播,死代码消除以及“ switch”语句的跳转表。
    • MCU特定的优化,包括全局寄存器分配器。
    • 适用于MCU的自适应后端,应该非常适合其他8位MCU
    • 基于独立规则的窥视孔优化器。
    • 完整的数据类型范围:char8位,1字节),short16位,2字节), int16位,2字节),long32位,4字节),long long64位,8位元组),浮点数(IEEE 4位元组)和 _Bool / bool
    • 在函数中任何地方添加内联汇编代码的能力。
    • 报告功能复杂性的能力,以帮助确定应在汇编器中重写的内容。
    • 很好的自动回归测试选择。

SDCC最初由Sandeep Dutta编写,并根据GPL许可发布。自最初发布以来,已经进行了许多错误修复和改进。自1999年12月起,代码已移至SourceForge,所有“用户都变成开发者”都可以访问同一源树。SDCC会不断更新所有用户和开发人员的输入。

安装

简要介绍一下吧:

解压sdcc压缩文件(这里使用最新4.0.0版本),全部文档在sdcc-4.0.0/share/sdcc/doc

cd sdcc-4.0.0 cp -r * /usr/local

编译

sdcc -mmcs51 xxx.c

最简单安装方法:

sudo apt install sdcc


stcgal-STC MCU ISP闪存工具

stcgal是用于STC MCU Ltd的命令行闪存编程工具。8051兼容的微控制器

STC微控制器具有基于UART/USB的引导加载程序(BSL)。它利用基于数据包的协议通过串行链路刷新代码存储器和IAP存储器。这称为系统内编程(ISP)。BSL还用于配置各种(类似保险丝的)设备选项。不幸的是,该协议没有公开记录,STC仅提供(粗略的)Windows GUI应用程序进行编程。

stcgal是STC的Windows软件的功能全面的开源替代品;它支持多种MCU,非常便携,适合自动化。

特征

  • 支持STC 89/90/10/11/12/15/8系列
  • UART和USB BSL支持
  • 显示零件信息
  • 确定工作频率
  • 程序闪存
  • 程式IAP / EEPROM
  • 设置设备选项
  • 读取唯一的设备ID(STC 10/11/12/15/8)
  • 修整RC振荡器频率(STC 15/8)
  • 使用DTR切换键或自定义Shell命令自动重启电源
  • 自动UART协议检测

快速开始

安装stcgal(可能需要root /管理员权限):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip3 install stcgal
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Collecting stcgal
  Downloading https://files.pythonhosted.org/packages/b0/68/4924bd584b9e47639b28a1900cbced4e90deac7905fd996108ee2fcf975c/stcgal-1.6-py3-none-any.whl
Collecting tqdm>=4.0.0 (from stcgal)
  Downloading https://files.pythonhosted.org/packages/28/7e/281edb5bc3274dfb894d90f4dbacfceaca381c2435ec6187a2c6f329aed7/tqdm-4.48.2-py2.py3-none-any.whl (68kB)
    100% |████████████████████████████████| 71kB 754kB/s 
Collecting pyserial>=3.0 (from stcgal)
  Using cached https://files.pythonhosted.org/packages/0d/e4/2a744dd9e3be04a0c0907414e2a01a7c88bb3915cbe3c8cc06e209f59c30/pyserial-3.4-py2.py3-none-any.whl
Installing collected packages: tqdm, pyserial, stcgal
Successfully installed pyserial-3.4 stcgal-1.6 tqdm-4.48.2

如果网络问题,请尝试如下命令:

pip3 install stcgal -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

调用stcgal并显示用法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
stcgal -h
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
usage: stcgal [-h] [-a] [-r RESETCMD]
              [-P {stc89,stc12a,stc12b,stc12,stc15a,stc15,stc8,usb15,auto}]
              [-p PORT] [-b BAUD] [-l HANDSHAKE] [-o OPTION] [-t TRIM] [-D]
              [-V]
              [code_image] [eeprom_image]

stcgal 1.6 - an STC MCU ISP flash tool
(C) 2014-2018 Grigori Goronzy and others
https://github.com/grigorig/stcgal

positional arguments:
  code_image            code segment file to flash (BIN/HEX)
  eeprom_image          eeprom segment file to flash (BIN/HEX)

optional arguments:
  -h, --help            show this help message and exit
  -a, --autoreset       cycle power automatically by asserting DTR
  -r RESETCMD, --resetcmd RESETCMD
                        shell command for board power-cycling (instead of DTR
                        assertion)
  -P {stc89,stc12a,stc12b,stc12,stc15a,stc15,stc8,usb15,auto}, --protocol {stc89,stc12a,stc12b,stc12,stc15a,stc15,stc8,usb15,auto}
                        protocol version (default: auto)
  -p PORT, --port PORT  serial port device
  -b BAUD, --baud BAUD  transfer baud rate (default: 19200)
  -l HANDSHAKE, --handshake HANDSHAKE
                        handshake baud rate (default: 2400)
  -o OPTION, --option OPTION
                        set option (can be used multiple times, see
                        documentation)
  -t TRIM, --trim TRIM  RC oscillator frequency in kHz (STC15+ series only)
  -D, --debug           enable debug output
  -V, --version         print version info and exit

stcgal -P stc89 xxx.ihx


程序需要做一些修改的,以LED灯为例吧:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <reg52.h>       	//52系列单片机头文件

sbit LSA = P1^5;  			//LED位选译码地址引脚A
sbit LSB = P1^6;  			//LED位选译码地址引脚B
sbit LSC = P1^7;  			//LED位选译码地址引脚C
int  main(void)			
{
	while(1)				//主程序中设置死循环程序,保证周而复始运行
	{				
		//使LED灯的总开关三极管Q6导通,+5V加到LED灯组
		LSA = 0;
		LSB = 0;
		LSC = 0;
		P0 = 0xfe;         	//点亮一个发光二极管
	}
}

在sdcc下需修改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <8052.h>       	

#define LSA P1_5  			
#define LSB P1_6  			
#define LSC P1_7 
 			
int  main(void)			
{
	while(1)				
	{
		LSA = 0;
		LSB = 0;
		LSC = 0;
		P0 = 0xfe;
	}
}

Linux下无需安装驱动!!!

sdcc -mmcs51 led.c

stcgal -P stc89 led.ihx

闪烁:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <8052.h> 
     
#define LSA  P1_5  			//LED位选译码地址引脚A
#define LSB  P1_6  			//LED位选译码地址引脚B
#define LSC  P1_7  			//LED位选译码地址引脚C
#define Led10 P0_7          	//定义P0.7名字为led10

int  main(void)		
{
	 unsigned int a;    	//定义无符号的整型变量a
     while(1)				
     {				
		//使LED灯的总开关三极管Q6导通,+5V加到LED灯组
		LSA = 0;
		LSB = 0;
		LSC = 0;   
	  	Led10 = 0;          //点亮LED10
		a = 50000;
		while(a--); 		//50000次的循环,通过消耗时间以达到延时的目的
	 	Led10 = 1;;         //熄灭LED10
		a = 50000;
		while(a--); 		//延时
     }
}

呼吸灯:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <8052.h>

#define LSA   P1_5  			//LED位选译码地址引脚A
#define LSB   P1_6  			//LED位选译码地址引脚B
#define LSC   P1_7  			//LED位选译码地址引脚C
#define Led10 P0_7          	//定义P0.7名字为led10

int atime=64;

void delay(unsigned int pms)	//延时函数
{
  unsigned int x;
  unsigned int y;
  for(x=pms;x>0;x--)
	for(y=11;y>0;y--)
	  ;
}

void ledfade(unsigned int i)	//呼吸灯
{
   Led10 = 0;
   delay(i);
   Led10 = 1;
   delay(atime-i);

}
int  main(void)		
{
	 int a;    	//定义无符号的整型变量a
     while(1)				
     {				
		//使LED灯的总开关三极管Q6导通,+5V加到LED灯组
		LSA = 0;
		LSB = 0;
		LSC = 0;
		for(a=0;a<atime;a++)
		{
			ledfade(a);
		}
		for(a=atime;a>0;a--)
		{
			ledfade(a);
		}   
        
     }
}

呼吸跑马灯???(需改进优化哦!)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <8052.h>

#define LSA   P1_5  			//LED位选译码地址引脚A
#define LSB   P1_6  			//LED位选译码地址引脚B
#define LSC   P1_7  			//LED位选译码地址引脚C
#define Led10 P0_0          	//定义P0.0名字为led10
#define Led11 P0_1          	//定义P0.0名字为led11
#define Led12 P0_2          	//定义P0.0名字为led12
#define Led13 P0_3          	//定义P0.0名字为led13
#define Led14 P0_4          	//定义P0.0名字为led14
#define Led15 P0_5          	//定义P0.0名字为led15
#define Led16 P0_6          	//定义P0.0名字为led16
#define Led17 P0_7          	//定义P0.0名字为led17

int atime=64;

void delay(unsigned int pms)	//延时函数
{
  unsigned int x;
  unsigned int y;
  for(x=pms;x>0;x--)
	for(y=11;y>0;y--)
	  ;
}

void ledfade0(unsigned int i)	//呼吸灯
{
   Led10 = 0;
   delay(i);
   Led10 = 1;
   delay(atime-i);

}
void ledfade1(unsigned int i)	//呼吸灯
{
   Led11 = 0;
   delay(i);
   Led11 = 1;
   delay(atime-i);

}
void ledfade2(unsigned int i)	//呼吸灯
{
   Led12 = 0;
   delay(i);
   Led12 = 1;
   delay(atime-i);

}
void ledfade3(unsigned int i)	//呼吸灯
{
   Led13 = 0;
   delay(i);
   Led13 = 1;
   delay(atime-i);

}
void ledfade4(unsigned int i)	//呼吸灯
{
   Led14 = 0;
   delay(i);
   Led14 = 1;
   delay(atime-i);

}
void ledfade5(unsigned int i)	//呼吸灯
{
   Led15 = 0;
   delay(i);
   Led15 = 1;
   delay(atime-i);

}
void ledfade6(unsigned int i)	//呼吸灯
{
   Led16 = 0;
   delay(i);
   Led16 = 1;
   delay(atime-i);

}
void ledfade7(unsigned int i)	//呼吸灯
{
   Led17 = 0;
   delay(i);
   Led17 = 1;
   delay(atime-i);

}
int  main(void)		
{
	 int a;    	//定义无符号的整型变量a
     while(1)				
     {				
		//使LED灯的总开关三极管Q6导通,+5V加到LED灯组
		LSA = 0;
		LSB = 0;
		LSC = 0;
		for(a=0;a<atime;a++)
		{
			ledfade0(a);
		}
		for(a=atime;a>0;a--)
		{
			ledfade0(a);
		}   
		for(a=0;a<atime;a++)
		{
			ledfade1(a);
		}
		for(a=atime;a>0;a--)
		{
			ledfade1(a);
		}  
		for(a=0;a<atime;a++)
		{
			ledfade2(a);
		}
		for(a=atime;a>0;a--)
		{
			ledfade2(a);
		}
		for(a=0;a<atime;a++)
		{
			ledfade3(a);
		}
		for(a=atime;a>0;a--)
		{
			ledfade3(a);
		} 
		for(a=0;a<atime;a++)
		{
			ledfade4(a);
		}
		for(a=atime;a>0;a--)
		{
			ledfade4(a);
		}  
		for(a=0;a<atime;a++)
		{
			ledfade5(a);
		}
		for(a=atime;a>0;a--)
		{
			ledfade5(a);
		}  
		for(a=0;a<atime;a++)
		{
			ledfade6(a);
		}
		for(a=atime;a>0;a--)
		{
			ledfade6(a);
		}  
		for(a=0;a<atime;a++)
		{
			ledfade7(a);
		}
		for(a=atime;a>0;a--)
		{
			ledfade7(a);
		}             
     }
}

如果需要将51接入机器人操作系统ROS,可以参考:


MacOS

此部分内容和ubuntu类似!

macOS下51单片机的开发

编译器SDCC

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ brew install sdcc

虽然有编译器,也都是c代码,但是语法上还是有那么一点点不同,根据文档以及网上的说法:

Mac sdcc

Windows Keil c

头文件

8051.h/8052.h

reg51.h/reg52.h

IO端口

P2_0

P2^0

IO口定义

#define LED P2_0

sbit LED = P2^0

中断函数

void INT0_ISR() __interrupt 0

void INT0_ISR() interrupt 0

参考示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<8052.h>

#define uchar unsigned char
#define uint unsigned int

#define lcden P2_5
#define lcdrs P1_0
#define rw P1_1
#define dula P2_6
#define wela P2_7

uchar table[] = "Hello World!";
uchar num;

void delay(uint z) {
    uint x, y;
    for(x = z; x > 0; x--)
        for(y = 110; y > 0; y--);
}

void write_com(uchar com) {
    lcdrs = 0;
    P0 = com;
    delay(5);
    lcden = 1;
    delay(5);
    lcden = 0;
}

void write_data(uchar date) {
    lcdrs = 1;
    P0 = date;
    delay(5);
    lcden = 1;
    delay(5);
    lcden = 0;
}

void init() {	
    rw = 0;
    dula = 0;
    wela = 0;
    lcden = 0;
    write_com(0x38);
    write_com(0x0e);
    write_com(0x06);
    write_com(0x01);
    write_com(0x80);
}

void main() {
    init();
    for(num = 0; num < 12; num++) {
        write_data(table[num]);
        delay(100);
    }
    while(1);
}

然后编译:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sdcc helloword.c

成功执行后,生成了一堆文件,.asm、.ihx、.lk、.lst…,这里要下载到单片机ROM的只有.ihx文件

下载工具

stcgal

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip install git+https://github.com/grigorig/stcgal.git
$ pip install tqdm

先来看下设备信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ stcgal -P stc89 -p /dev/cu.wchusbserialfd130
Waiting for MCU, please cycle power: done
Target model:
  Name: STC89C52RC/LE52R
  Magic: F002
  Code flash: 8.0 KB
  EEPROM flash: 6.0 KB
Target frequency: 11.030 MHz
Target BSL version: 6.6C
Target options:
  cpu_6t_enabled=False
  bsl_pindetect_enabled=False
  eeprom_erase_enabled=False
  clock_gain=high
  ale_enabled=True
  xram_enabled=True
  watchdog_por_enabled=False
Disconnected!

OK了,注意在提示“Waiting for MCU, please cycle power:”的时候关掉电源再打开就可以了。

好啦,下载来试试烧录吧,就用上面生成的helloworld.ihx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ stcgal -P stc89 -p /dev/cu.wchusbserialfd130 helloworld.ihx
Waiting for MCU, please cycle power: done
Target model:
  Name: STC89C52RC/LE52R
  Magic: F002
  Code flash: 8.0 KB
  EEPROM flash: 6.0 KB
Target frequency: 11.030 MHz
Target BSL version: 6.6C
Target options:
  cpu_6t_enabled=False
  bsl_pindetect_enabled=False
  eeprom_erase_enabled=False
  clock_gain=high
  ale_enabled=True
  xram_enabled=True
  watchdog_por_enabled=False
Loading flash: 293 bytes (Intel HEX)
Switching to 19200 baud: checking setting testing done
Erasing 2 blocks: done
Writing flash: 640 Bytes [00:00, 1699.01 Bytes/s]
Setting options: done
Disconnected!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
51单片机在Ubuntu下程序开发和下载
这学期有51单片机课程,平时调试代码不用windows,查阅了一些资料,不太能用,现在将51单片机在ubuntu下(Linux通用)开发和下载说明一下:需要用到SDCC和stcgal。
zhangrelay
2020/09/09
1.7K0
单片机理论与实践融入机器人课程镜像
全功能免安装课程镜像制作一直是线上课程融入线下的抓手和核心。 目前正在紧张有序推进第4版镜像制作,前一版本镜像如下: 机器人实践课程镜像(https://blog.csdn.net/zhangrelay/article/details/103868465) 除了修正反馈bug,优化内容外,增加51系列全部课程内容。 主要涉及四款: mcu8051ide sdcc stcgal HML_FwLib_STC89 这些都在博客中详细介绍过,这里再简单说明一下: mcu8051ide 安装:sudo apt
zhangrelay
2021/03/03
3010
单片机实验说明<四>矩阵键盘与LCD基本使用
对4×4矩阵式键盘电路的键值进行编码,编程实现在LCD液晶显示器上显示每个按键的“0-F”序号
zhangrelay
2021/03/03
8220
单片机补充案例--I2C和AD使用PCF8591
上电位器:从大变小!(2.49-1.64-0.42-0.33)另一个不变(0.01附近)
zhangrelay
2021/03/03
4830
stc89c52在Linux或MacOS下使用sdcc和stcgal中断与LCD测试代码
使用说明参考:https://zhangrelay.blog.csdn.net/article/details/108449115
zhangrelay
2020/10/09
1.1K0
Mac下单片机开发环境的搭建
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。
緣來
2018/09/18
3.2K3
Mac下单片机开发环境的搭建
单片机补充案例--中断到底用不用
是否使用中断依据实际情况而定,并非是做题惯性,题目要求用就用,这种思想不适合工作。
zhangrelay
2021/03/03
2140
单片机补充案例--两只老虎
将led换成喇叭,通过编程实现音乐和电子琴功能也是非常容易的,单片机两只老虎的案例网上资料很多不再列举,查找即可:
zhangrelay
2021/03/03
2420
别怕!51 单片机从入门到应用,小白也能轻松吃透
这篇教程专为单片机小白打造,从 51 单片机基础讲起,带你搭建开发环境,学习汇编与 C 语言编程。通过 LED 灯闪烁、按键控制、数码管显示等基础实验,以及简易电子钟、温度检测系统等应用案例,结合代码实操,助你快速掌握 51 单片机开发。
羑悻的小杀马特.
2025/03/24
7030
单片机实验说明<一>数字口基本使用
机器人类单片机课程为突出专业特色,对实验作了大量补充和讲解,除了uno,cozmo和tianbotmini之外,加入了大量相关单片机案例,使课程紧密融合物联网和机器人工程,增加Linux下调试方式,作为windows之外的补充,补充esp8266,esp32等wifi单双核单片机,补充操作系统概念。相关内容在课程中已经测试过,但并未得到有效的批评和建议,现全部公开。
zhangrelay
2021/03/03
7100
单片机补充案例--数字IO口呼吸灯
说明:不使用PWM口,而是使用数字口和时延函数模拟,从而实现普通IO口对LED灯的亮度控制。
zhangrelay
2021/03/03
4270
51单片机linux环境LED、数码管、开关、循环、判断演示
示例程序如下,有bug,能运行但效果可提升: #include <8052.h> #define LSA P1_5 #define LSB P1_6 #define LSC P1_7 char SEG[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void init0(void) { LSA = 1; LSB = 0; LSC = 0; } void init1(void) { LS
zhangrelay
2021/12/02
3960
51单片机linux环境LED、数码管、开关、循环、判断演示
单片机补充案例--速度反馈控制LED亮度
说明:使用中断测速,速度快LED亮,速度慢LED暗。 设备: 码盘 接口 使用外部中断和定时器中断,实现里程计测速,从S到dS(V)的过程。 结合高等数学和离散时间系
zhangrelay
2021/03/03
4460
单片机补充案例--按键点灯
关于单片机程序,如果使用固件库一定要配置好环境,对于实验一,不配置正确就无法完成编译,报错无法找到xxx等:
zhangrelay
2021/03/03
2850
单片机实验1提示
以下程序仅供参考未必准确,请依据要求,修改符合。 #include<8052.h> #define LSA P1_5 #define LSB P1_6 #define LSC P1_7 void EXint_Init(void); void Delayms(unsigned int); void Down2Up(int); void Up2Down(int); void EXINT0() __interrupt 0; void EXINT1() __interrupt 2
zhangrelay
2021/12/02
2670
单片机实验1提示
单片机补充案例--入侵检测系统
说明:使用 STC89C52 设计入侵检测系统,给出方案和核心代码,需满足下列要求: 1. 发现入侵立刻开启 LED 闪烁警示 2. 入侵超过 5s 警报响起 3. 手动清除声光报警时,需输入安许可防密码
zhangrelay
2021/03/03
1.1K0
单片机红外传感器_基于51单片机的声音传感器
我们工作久了,久坐导致的毛病就显现出来了,腰酸背痛颈椎疼,最近看到利用番茄钟工作法挺好,工作25分钟,休息5分钟,既能调整工作节奏,避免精力过分消耗,也能避免久坐导致的身体问题。 我刚开始使用闹钟做提醒,后来尝试番茄钟软件,但是都要手动去操作手机,拿起手机看到信息,然后就会去处理手机上的事情了,起不到作用… 直到有一天收拾东西看到了我大学期间基于51单片机做的一个电子设计,激起了我的灵感,开始了基于51单片机的自动番茄钟,久坐提醒神器的设计和制作。 整体方案硬件部分继承了大学时焊接的电路板,更换了传感器部分,软件部分重新编写了控制部分的代码。 之前的软硬件设计方案可以参考这篇文章《基于51单片机的上下限可调的数字温度控制系统》,本文重点阐述差异部分。
全栈程序员站长
2022/11/15
7920
单片机红外传感器_基于51单片机的声音传感器
单片机补充案例--stc89c52的P4口使用
说明:头文件为8052.h默认情况下不能使用P4口,需要添加如下代码,如使用P4_4:
zhangrelay
2021/03/03
9500
单片机课堂思考题-2000秒倒计时?
99秒倒计时,改为2000(6666)秒倒计时。 #include<8052.h> #define LSC P1_7 //特殊功能寄存器的位定义, #define LSB P1_6 //3-8译码器的输入端, #define LSA P1_5 //控制三极管Q2~Q6的导通 unsigned char smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x0f8,0x80,
zhangrelay
2021/12/02
5330
单片机课堂思考题-2000秒倒计时?
STC 89C52 单片机引脚对应的功能以及实例讲解
学习单片机能够让你更加深刻的认识到我们身边中常用电器的工作方式,接下来我们以引脚来讲解一些单片机中常用引脚的功能
Gorit
2021/12/09
3.1K0
STC  89C52  单片机引脚对应的功能以及实例讲解
推荐阅读
相关推荐
51单片机在Ubuntu下程序开发和下载
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验