10天学会嵌入式技术之51单片机-day-1

嵌入式软件--51单片机 DAY 3 按键的作用相当于一个开关,按下时接通(或断开),松开后断开(或接通)。 阅读详情

第一章 单片机概述

1.1.51单片机简介

51 单片机原是指 20 世纪 80 年代早期由 Intel 公司推出的一种 8 位微控制器系列,其以
简单、稳定、功能丰富而广受欢迎,现在更多的指实现了 8051 指令集的一系列单片机。我
们目前使用的 51 单片机一般是宏晶 STC89 系列,这其中流传最广的版本,也是我们今天课
程的主角,就是 STC89C52RC。
我们的核心板采用的单片机型号是 STC89C52,LQFP44 封装,芯片的相关文档自行查询,也可找我领取。

1.2 封装

目前 STC89C52RC 有两种常见封装:LQFP44 和 PDIP40。

(1)LQFP44

(2)PDIP40

两种封装的芯片并无性能差异,只是外观不同,同时 LQFP44 比 PDIP40 多了四个 GPIO
引脚,具体选择哪一种需要看 PCB 板的设计要求。

1.3 命名规则

1.4 单片机最小应用系统

第 2 章 开发板简介

做单片机开发,除了要开发环境,还需要能运行代码的开发板。我们这门课使用的是 51
开发板,板子分为核心板和扩展版两个部分。核心板只包含 51 单片机运行的最小组成,外
设都放在了扩展版上,两个板通过标准插口连接。

2.1 开发板实物图

本人使用的开发板为尚硅谷公司的。

2.2 核心板原理图
 

2.3 扩展板原理图

第 3 章 开发环境与工具

3.1 Keil5 软件安装

51 单片机的开发使用的是定制的 C 语言(与标准 C 语言语法有一点点不同),所以配
套编译器不能再使用 gcc,而是要使用 armcc。armcc 是商业编译器,要使用需要商业授权。
Windows 下,armcc 被集成在 Keil 中。
Keil 是一个 Windows 环境下进行单片机开发的 IDE(集成式开发环境),可以在其中
编写代码,管理项目以及最重要的:仿真和调试代码。

(1)官网下载地址

Keil 主页:https://www.keil.com

(2)本地下载地址

通过网盘分享的文件:02_51_keil
链接: https://pan.baidu.com/s/1AEcChUNSiPSWkZN0WDOB0w?pwd=9uy9 提取码: 9uy9 
--来自百度网盘超级会员v1的分享

3.2 STC-isp软件安装

(1)官网安装

STC-isp 是 STC 公司专门为 STC 芯片准备的 USB 口刷写工具。

官方下载地址:http://www.stcmcudata.com/STCISP/stc-isp-15xx-v6.92A.zip

(2)本地下载

通过网盘分享的文件:03_isp程序下载工具
链接: https://pan.baidu.com/s/1QtrB5CCwpXUhJTEyXRG09g?pwd=vww6 提取码: vww6 
--来自百度网盘超级会员v1的分享

3.3 逻辑分析仪

单片机中“时序”是一个很重要的概念,简单来说,就是安排单片机做事情的顺序。当
单片机通过 GPIO 操作外设时,控制信号必须符合外设的要求。
以我们后面要用的超声模块为例,我们想使用这个模块,必须在 TRIG 引脚发射一个至
少 20us 的高位脉冲,然后等待一段时间,在 ECHO 引脚会收到超声模块的回复。在这个过
程中,可能出现以下问题:

(1)我们单片机发射的脉冲可能持续时间不到 20us。

(2)等待回复的时间不确定,如果等待时间不足,可能出现干扰信号。

关于这个超声模块,我们用 51 做小车的时候会详细讲解,但是通过上面的描述,大家
应该能看明白,单片机代码和外设通信的时序非常重要。而如果需要准确测量这个时序,我
们需要一个辅助设备:逻辑分析仪。

逻辑分析仪实物图如下所示:

3.4 VScode 软件安装

如果学习 c 语言过程中,没有安装 VScode 的同学,需要安装一下 VScode,方便后续代
码的编写。

第 4 章 点亮 LED

4.1 创建项目

4.2编写程序

编写代码

#include<STC89c5xRC.H>//包含STC89c52头文件

void main()
{
  //让P00引脚输出低电平
  P00=0;
//死循环卡住单片机,让他不要继续往下执行
 while(1);
}

4.3 编译程序

4.4烧录程序

4.5 案件解读

第五章 闪烁LED

5.1 需求描述

令 LED1 每秒钟闪烁一次,具体效果下图所示。

5.2 软件设计

5.2.1 实现思路

想让 LED1 闪烁,只需让 P00 的值不断地在 0 和 1 之间循环变化即可。

5.2.2 代码实现

(1)代码

#include<STC89C5xRC.H> //包含STC89C52的头文件
#include<INTRINS.H>

void Delay_1MS(unsigned int xms);//延时函数的声明

void main()
{
//让led变为低电平
P00=0;

//死循环卡住单片机,让他不要继续往下执行
    while(1)
    {
    //对led不断取反,取反就是亮灭转换
    P00=~P00;

    //延时500ms
    Delay_1MS(500);

    }
}

void Delay_1MS(unsigned int count) //@11.0592MHz
{
unsigned char data i, j;
    while (count > 0) {
    _nop_();
    i = 2;
    j = 199;
    do {
        while (--j):
    
    } while (--i);
   count--;
    }
}

(2)代码解读

        1)延时函数说明
这段代码中,LED 闪烁的部分其实相当简单,就是对 P00 不断取反。亮灭的节奏主要
取决于延时函数的实现。那我们如何实现一个 1ms 的延时函数呢?这里,我们可以使用
STC-ISP 自带的软件延时计算器。

        2)延时的原理
在 51 单片机中,执行每条指令都需要特定的时间,因此只需知道每条指令执行多长时
间,再令其循环执行特定的次数就能实现延时。
关于每条指令的执行时间,需要搞清楚时钟周期、机器周期和指令周期三个概念,具
体内容如下

3)_nop_函数说明
由于生成的延时函数中调用了_nop_( ) 系统函数,该函数作用是执行一个空操作,延
时 函 数 调 用 _nop_( ) 的 作 用 目 的 仅 仅 是 为 了 使 延 时 更 加 精 准 。 由 于 该 函 数 定 义 在
<INTRINS.H>文件中,因此需要引入该文件。

第六章 流水灯

6.1 需求描述

令 P00 到 P07 的 LED 依次亮起,间隔 100ms,不断循环。

6.2软件设计

6.2.1 代码实现

#include <STC89C5xRC.H>
#include <INTRINS.H>
#define LED P0

//增加自定义类型,简化代码编写
typedef unsigned char u8;
typedef unsigned int u16;

//声明延时函数
void Delay1ms(u16 count);

void main()
{
      //声明临时变量
    u8 temp=1;

    //temp是8个bit,对于8个led,1代表亮,正好和P0相反
    //之后我们只要对temp做左位移,就可以实现流水灯
    while(1)
    {
        //P0是temp取反;0000 0001取反1111 1110
        LED=~temp;
        //左移位次数为:0000 0001,0000 0010,0000 0100 ... 1000 0000
        LED<<=1;
        //temp是char类型8位,如果等于1000 0000,再左移一位就变成0000 0000,所以如果temp等                           
       //于0时,需要将temp在设置为1;
        if(temp==0)
        {
            temp=1;
        }
        //延时函数100ms
        Delay1ms(100);
        
    }

}

void Delay1ms(u16 count) //@11.0592MHz
{
    unsigned char data i, j;

    while (count > 0) {
        count--;
        _nop_();
        i = 2;
        j = 199;
        do {
            while (--j);

        } while (--i);
    }
}

嵌入式软件--51单片机 DAY 1 是一个运行在Windows系统中的单片机集成开发环境(Integrated Development Environment),其提供了代码编辑、代码编译、仿真和调试等功能。8位指的是寄存器的位数和数据总线的位数,内部的ALU也是8位的,一次操作能处理8位的数据。32位指的是寄存器是32位的,也是同样的道理。用STC(用typeC线连接电脑与单片机芯片),打开程序烧录进单片机芯片,便可以使用了。即可读取外部数据,也可输出。,可以理解为电脑的硬盘,存放用户数据,断电不丢失。(单片机的“语言”)的一系列单片机。 阅读详情

相关推荐

vscode+keil嵌入式软件开发全流程

vscode+keil嵌入式软件开发全流程

AspringQ的博客 6783

10天学会嵌入式技术之51单片机-day-8

手把手入行嵌入式之10天学会51单片机day-8

2301_80748708的博客 2210

day01 51单片机

目前使用的51单片机一般是宏晶STC89系列,这其中流传最广的版本,也是我们课程的主角,就是STC89C52RC。

路小飞 1314

嵌入式学习之练气期——第二层51单片机入门常识

51单片机学习笔记

YunYa_771的博客 1308

51单片机基础入门教程及实操程序包

本文还有配套的精品资源,点击获取 简介:51单片机作为嵌入式系统和电子工程的入门平台,本资源包提供了全面的学习材料和实践程序。内容涵盖单片机基础、汇编语言编程、硬件接口连接、基本程序设计、数码管显示、定时器/计数器应用、中断系统、串行通信以及实验指导。教程旨在帮助初学者掌握51单片机的基本操作和应用,通过实例代码和电路图提供完整的实践环境,为更复杂项目打基础。 1...

weixin_35509395的博客 2750

stc-isp-15xx-v6.92.zip

stc-isp-15xx-v6.92

10天学会嵌入式技术之51单片机-day-7

手把手入行嵌入式之10天学会51单片机day-7

2301_80748708的博客 1339

stc-isp:用于 Linux 的命令行 STC 8051 ISP 编程器

用于 linux的 STC 8051 ISP 编程器有关更多信息,请使用 -h help 这是 gSTCISP 的一个 hack,我将 gtk(2.0) 版本转换为命令版本,也许有人正在寻找......试试这个工具...... 只是:做~ 限制: 1. 使用TTL转USB下载(PL2303芯片)如果你的开发板有,更好 2.不知什么原因,TTL转RS232无法下载,所以如果你知道,就破解我的代码。 bash 外壳函数: 你可以把这两个func添加到你的~/.bashrc中,一键下载: # ####################################################### # 一键编译, 完成后在当前目录下生成build文件夹 # one key compile, after this operation, the build dir will gen

10天学会嵌入式技术之51单片机-day-3

手把手入行嵌入式之10天学会51单片机day-3

2301_80748708的博客 1393

stc-isp-下载及驱动.zip

单片机下载程序,stc-isp,包括我本人在内的多个人使用过或者正在使用这个包里的stc-isp .

STC-USER-IAP-ISP 程序

STC-USER-IAP-ISP 程序STC-USER-IAP-ISP 程序STC-USER-IAP-ISP 程序

十天学会嵌入式技术之51单片机—day-10

手把手入行嵌入式之10天学会51单片机day-10

2301_80748708的博客 2477

51单片机:打飞机游戏机8051MCU-game-console.zip

这个C#实现的小游戏是一个简单的猜数字游戏,让玩家猜一个1到100之间的随机生成的数字。以下是对这个小游戏的分析: Random 类的使用:游戏开始时,使用 Random 类生成一个1到100之间的随机数作为要猜的数字。 循环结构:游戏使用 while 循环,直到玩家猜对为止。玩家每次猜测后,根据猜测的数字与目标数字的大小关系,给出相应的提示,并根据猜测结果决定下一步的操作。 用户输入处理:通过 Console.ReadLine() 获取用户输入,并使用 int.TryParse() 方法将输入转换为整数。如果用户输入无效,会提示用户输入有效的数字。 游戏逻辑:根据玩家猜测的数字与目标数字的大小关系,给出相应的提示,提示玩家猜的数字是太高了还是太低了。 【引流】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes

10天学会嵌入式技术之51单片机-day-4

手把手入行嵌入式之10天学会51单片机day-4

2301_80748708的博客 1453

郭天祥十天学会单片机完整版.pptx

郭天祥十天学会单片机完整版.pptx

解决 TensorFlow 和 Keras 的 Python 版本兼容问题:详细技术指南

本文提供了TensorFlow和Keras与Python版本不兼容问题的完整解决方案。通过版本对照表指出不同TensorFlow版本对应的Python支持范围,强调2.13.x仅支持Python 3.9-3.11,且不兼容Python 3.12+。给出最佳实践建议:使用虚拟环境管理项目依赖,推荐venv或conda创建独立环境;指导正确安装TensorFlow和Keras版本,建议优先使用tf.keras避免冲突;针对常见报错如DLL加载失败、模块导入错误等提供具体解决方法。最后给出一个在兼容环境中运行的M

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1664

10天学会嵌入式技术之51单片机-day-5

手把手入行嵌入式之10天学会51单片机-day5

2301_80748708的博客 1048

arcgis导出自身相交数据

今天接到一个客户需求,一份面文件,里面有好多元素是两两相交甚至是三个相交的,现在要把这些重叠部分提取出来,并且把相交部分的原始要素的名称也保留在字段中,也就是说名称这个会有好多个名称字段,如果两个要素相交那就是前两个名称字段有值,后面的为空,如果是三个要素相交,那么输出的这个要素就是前三个名称字段有值,后面的为空,嗯,这里也不太确定会出现多少个名称字段,这个需要依照数据来定。 这是原始数据,...

miaowumi92的博客 6789

10天学会嵌入式技术之51单片机-day-2

手把手入行嵌入式之10天学会51单片机day-2

2301_80748708的博客 705

FastDDS之共享内存

transport层负责为DDS用户数据收发和服务发现提供通信。包含UDP,TCP,SHM。

u010378559的博客 3087

【推荐100个unity插件】Unity URP(通用渲染管线)的基于物理的天地和预计算大气散射——UnityPhysicallyBasedSkyURP

本文介绍了Unity URP(通用渲染管线)中基于物理的天地和预计算大气散射的实现方法。该插件提供物理天空、大气散射、高度雾效、动态天空反射和环境光等功能,要求Unity 2022.3及以上版本,支持着色器模型3.5+。使用步骤包括:添加渲染器功能、配置Volume组件(天空、雾效等),并建议太阳强度设为3、曝光为0作为初始设置。插件已在GitHub和Gitee开源,附带详细配置截图和效果展示。文末推荐了多个Unity开发相关专栏,涵盖游戏开发全领域知识。作者向宇提供了博客链接,欢迎交流学习问题。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1228

嵌入式—51单片机day1

嵌入式:以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统。

2301_77373031的博客 644

duilib入门基础一 容器之 BOX、VBOX、HBOX布局及其子控件align排列方式

序 容器 duilib有以下主要布局容器 Box(自由布局容器) VBox(垂直布局容器) HBox(水平布局容器) TabBox(多标签布局容器) TileBox(格子布局容器) ChildBox(子布局容器) ScrollableBox(可滚动容器) 一、Box容器布局 Box容器及其扩展VBox HBox是其中最常用的容器。 相对Box来说,HBox, VBox更好理解些 1.1 VBox HBox VBox下的各个控件垂...

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 3083
上一篇: 10天学会嵌入式技术之c语言-Day-10
下一篇: 10天学会嵌入式技术之51单片机-day-2
昊昊昊昊昊明
博客等级 码龄3年 285粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值