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

从零到一:KUKA机械臂与ROS的工业级通讯协议深度解析

本文深度解析KUKA机械臂与ROS的工业级通讯协议,重点对比EKI与RSI两种核心接口的技术特点与应用场景。详细介绍了网络架构设计、数据包解析机制及ROS-I集成方法,并提供实时性能优化与故障排除策略,为工程师实现高可靠性工业自动化集成提供完整解决方案。

2a4s6d8f0g的博客 296

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

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

2301_80748708的博客 1048

如何优雅地进行频谱分析—— 一行代码实现绘制MATLAB频谱、功率谱图

之前的文章里讲了关于信号频谱、能量谱的相关理论和MATLAB编程实现方法: Mr.看海:信号频域分析方法的理解(频谱、能量谱、功率谱、倒频谱、小波分析) Mr.看海:频域特征值提取的MATLAB代码实现(频谱、功率谱、倒频谱) 不过对于刚刚开始进行这方面研究,或者对MATLAB不甚熟悉,抑或者不想花太多时间用在编程这件事上的同学,目前缺少一种足够便捷、高效、可靠的代码。 所以笔者想做这样一件事:编写一个函数,同学们只需要导入自己要分析的数据,并按照自己的需求设置部分选项,调用一行代码就可以实现绘制频

fengzhuqiaoqiu的博客 2万+

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

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

2301_80748708的博客 705

ChromeOS安装教程

ChromeOS,是基于Linux内核研发的ChromiumOS开源系统的闭源系统,最大的特色就是内置了Chrome浏览器,早期主要以Web云端应用程序为主,后来逐渐引入了Android子系统和Linux子系统。本文主要简述摸索的家用笔记本安装ChromeOS安装方法,供各位玩机朋友参考。

weixin_45751495的博客 8114

JDK8升级JDK17过程中遇到的那些坑

JDK8虽然非常好,但是JDK版本已经发布到JDK20了,且JDK8后的版本升级了很多新的特性,如模块化、ZGC以及虚拟线程、结构性并发等,也是非常有吸引力的,所以决定将基于JDK8的项目升级到最近的LTS版本JDK17。

BASK2312的博客 6685

嵌入式—51单片机day1

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

2301_77373031的博客 644

保姆级教程:在RK3588开发板上用MPP库实现H.264硬编码(附完整代码)

本文详细介绍了在RK3588开发板上使用MPP库实现H.264硬编码的全流程,包括环境准备、MPP库编译、编码器初始化与配置、数据输入与编码流程以及高级性能优化技巧。通过实战案例和完整代码,帮助开发者充分利用RK3588的VPU硬件加速能力,提升视频编码效率和质量。

weixin_28716769的博客 414
上一篇: 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、付费专栏及课程。

余额充值