1.嵌入式

        嵌入式(Embedded)指的是一种专用计算机系统,它被"嵌入"或内建到一个更大的设备、产品或系统中,作为其核心控制部分,专门用于执行特定的任务或功能。通俗来讲就是以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统。

2.51单片机

        51单片机是指由Intel公司于1980年推出的MCS-51系列单片机及其所有兼容产品。它不是某一个芯片,而是一个架构家族的统称。虽然Intel早已停产,但众多厂商(如STC、Atmel、NXP等)生产的兼容芯片至今仍被广泛使用。

                

核心特征

  1. 经典架构:基于Intel的MCS-51指令集(CISC架构)

  2. 8位处理器:一次处理8位数据

  3. 哈佛结构:程序存储器和数据存储器分开

  4. 资源精简

    • 4KB-64KB Flash程序存储器

    • 128B-1KB RAM数据存储器

    • 32个I/O口(4组8位口:P0、P1、P2、P3)

3.基础概念

        CPU:Central Processing Unit(中央处理器)数据运算、指令处理,CPU性能越高,完成指令处理和数据运算的速度越快

        MCU:Micro Ctronller Unit(微控制器),集成度比较高,将所有功能集成到芯片中(CPU、RAM、ROM、定时器、UART、IO),简单控制, 成本低

        MPU:Micro Processing Unit(微处理器),集成度低,只有一块单独的CPU,需外接外设、存储模块,复杂应用领域,跑Linux操作系统,成本高

        GPU:Graphics Processing Unit(图形处理器),图形处理、图形渲染(GPU性能越好,图形显示的质量越好)

        NPU:Neural Processing Unit(神经网络处理器),AI推理、硬件加速,神经网络处理(卷积运算)-> 华为Mate60 达芬奇NPU AI自动优化照片

        FPU:Floating Point Unit(浮点数运算单元),完成浮点数的运算和处理(完全遵循IEEE 754),大部分集成在CPU内部

        SOC:System On Chip(片上系统),集成度比较高,将多个芯片集成到一块芯片上(存储芯片、外设芯片)


4.单片机芯片内部结构

        1. 中央处理单元 (CPU):执行指令、进行算术和逻辑运算、控制整个系统。

        2.存储器系统(ROM只读存储器&RAM随机存储器):

                Read-Only Memory,只读存储器,存放单片机程序,指令,掉电数据不丢失。

                Random  Access Memory,随机访问存储器,存放临时变量、临时数据,掉电数据丢失。

        3.并行I/O端口 (32个引脚):

                分为P0(8位,开漏输出,可作为数据/地址总线复用口),P1(8位,准双向I/O口,最常用的通用I/O口),P2(8位,准双向I/O口,可作为高8位地址总线),P3口(8位,准双向I/O口,具有第二功能:其中P3.0:RXD(串行输入),P3.1:TXD(串行输出),P3.2:INT0(外部中断0),P3.3:INT1(外部中断1),P3.4:T0(定时器0输入),P3.5:T1(定时器1输入),P3.6:WR(外部数据存储器写选通),P3.7:RD(外部数据存储器读选通)

        4.定时器/计数器

                计数功能:对外部脉冲计数

                定时功能:对内部时钟脉冲计数

        5.串行通信口 (UART)
全双工异步串行通信,与PC、传感器、其他单片机通信。

        6.中断系统

        7.时钟电路

                由外部晶振或时钟源产生。

        8.特殊功能寄存器 (SFR)

        9.三大总线

                地址总线:用来寻找RAM中的地址,所能寻址的最大范围2^8,256byte,单向。

                数据总线:通过地址总线去获取数据,数据交互双向。

                控制总线:时序控制、IO控制、中断。

5.原理图

MCU单片机芯片:
STC89C52RC、DIP40 封装:双列直插式,40个引脚,划分成4组(端口 寄存器 unsigned char P2;)

    网络编号(如图写在cpu上的,如P1.0):在实际电路中的一个编号,避免物理连线,相同网络的编号的引脚在实际电路中是彼此互通;

    引脚号(1-40)

6.位运算

        6.1 |

将二进制中的对应位的bit进行比较,如果有一个bit为1,结果为1;如果都为0,结果为0;

        应用场景:指定位置1
unsigned char t = 0x64;

        将bit0和bit7置1:

                        t |= (1 << 0) | (1 << 7);

        6.2 &

将二进制中的对应位的bit进行比较,如果全为1,结果为1;如果有一个0,结果为0;

        应用场景:指定位清0
unsigned char t = 0xFF;

       将bit 0 和 bit7 清0: 
t &= ~(1 << 0);
t &= ~ (1 << 7);


7.LED模块

P20-P27分别控制8个LED灯,低有效

因此我们可以写一些控制LED灯的函数:

#include <reg51.h>
void LED_INIT(void)//初始化
{P2 = 0xff;
}
void LED_AllOn(void)//全亮
{P2 = 0;
}
void LED_AllOff(void)//全灭
{P2 = 0xff;
}
void LED_Nor(void)//翻转
// 使用异或运算实现按位取反
// 异或运算规则:0 ^ 1 = 1, 1 ^ 1 = 0
{P2 = P2 ^ 0xff;
}
void LED_Show(unsigned int n)//指定某个灯亮
{P2 = ~n;// 对参数n按位取反后赋值给P2口// 假设n的二进制位代表LED状态:1表示要点亮,0表示要熄灭// 取反是因为:如果LED是低电平有效,需要将逻辑1转换为低电平// 例如:n = 0x01 (0000 0001) → 取反后为 0xFE (1111 1110)// 表示只点亮最低位的LED,其他熄灭
}

控制8个灯亮灭反转

#include <reg51.h>
#include <led.h>
#include <dalay.h>
int main(void)
{int i = 0;LED_INIT();while(1){LED_Nor();delay(10000);}return 0;
}

控制1~8,8~1实现流水灯

#include <reg51.h>
#include <led.h>
#include <dalay.h>
int main(void)
{int i = 0;LED_INIT();while(1){for(i = 0;i < 8; i++){LED_Show(1<<i);delay(1000);LED_AllOff();delay(1000);}for(i = 7;i > 0;i--){LED_Show(1<<i);delay(1000);LED_AllOff();delay(1000);}}return 0;
}

8.数码管模块

P10~P13控制那个数码管工作,称为位选

P00~P07控制数码管那个管子工作,称为段选

因此我们可以封装一些控制数码管的函数:

#include <reg51.h>
#include <delay.h>
//段码表
unsigned int Seg[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
//位选
void Select_Bit(unsigned int n)
{P1 &=~(0x0f << 0);//p1寄存器低四位清零P1 |= (1 << n);
}
//段选
void Select_Seg(unsigned int n)
{P0 = Seg[n];
}
// 数码管动态显示
void Digiter_Show(unsigned int n)	  // 例如传入 1234
{int m = 0;        // 用于存储每一位的数字(0-9)int t = 0;        // 用于记录当前显示的数码管位置(位选索引)// 循环直到所有位数都处理完毕while (n != 0){m = n % 10;	  // 取n的个位数,例如:1234 % 10 = 4P0 = 0;        // 清空段选数据,先熄灭所有段,消除残影Select_Bit(t++); // 选择要显示的数码管位置(位选)// t++ 表示先使用当前t的值,然后t自增1// 第一次调用:t=0,选择第0位数码管// 第二次调用:t=1,选择第1位数码管,以此类推Select_Seg(m);   // 在选定的数码管上显示数字m(段选)// 例如:m=4时,显示数字"4"delay(100);      // 延时一段时间,让当前数字稳定显示// 延时时间影响显示亮度和闪烁频率n /= 10;        // 去掉已经处理的个位数,准备处理下一位// 例如:1234 / 10 = 123}

控制单个数码管显示:

#include <reg51.h>
#include <digiter.h>
#include <delay.h>
int main(void)
{int i = 0;while(1){for(i = 0;i < 10;i++){Select_Bit(0);Select_Seg(i);delay(100000);}}return 0;
}

控制四个数码管动态显示:0~9999

#include <reg51.h>
#include <digiter.h>
#include <delay.h>
int main(void)
{int i = 0;while(1){for (i = 0; i <= 9999; i++){Digiter_Show(i);}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/98103.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/98103.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/98103.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Aerobits-用于 sUAS 和 UTM/U-Space 的微型 ADS-B 技术(收发器/接收器)和无人机跟踪应答器

Aerobits-用于 sUAS 和 UTM/U-Space 的微型 ADS-B 技术&#xff08;收发器/接收器&#xff09;和无人机跟踪应答器Aerobits 是一家专门为无人机 (UAV) 和无人驾驶飞机开发微型应答器和航空电子系统的公司。我们的硬件和软件解决方案基于专利技术&#xff0c;采用极低 SWaP 封装…

Spring Security资源服务器在高并发场景下的认证性能优化实践指南

Spring Security资源服务器在高并发场景下的认证性能优化实践指南 摘要&#xff1a;本文从原理与实践两个层面&#xff0c;深入解析Spring Security资源服务器在高并发场景下的认证性能优化策略&#xff0c;通过关键源码解读与实际示例&#xff0c;帮助开发者有效提升系统吞吐与…

SQL Server事务隔离级别

SQL Server 提供了多个事务隔离级别&#xff0c;用于控制并发事务如何访问和修改数据时的可见性、锁定行为以及可能遇到的并发问题&#xff08;如脏读、不可重复读、幻读&#xff09;。这些级别在数据一致性、并发性能和锁定开销之间进行权衡。 以下是 SQL Server 支持的主要隔…

DeepSeek R1大模型微调实战-llama-factory的安装与使用

文章目录概要1.安装必要的环境2.安装 PyTorch3.安装 Transformers 和 Datasets4.克隆 LLaMA Factory 仓库和安装LLaMA Factory5.准备数据和模型配置6.运行 LLaMA Factory7.监控和调整8.后续步骤概要 LLaMA Factory 是一个简单易用且高效的大型语言模型训练与微调平台。通过它&…

IDE mac M芯片安装报错:如何解决“InsCode.app 已损坏”,无法打开

IDE mac M芯片安装报错&#xff1a;如何解决“InsCode.app 已损坏”&#xff0c;无法打开 摘要 在 macOS 上安装并运行 InsCode IDE 时&#xff0c;不少开发者会遇到这样的报错&#xff1a; “InsCode.app 已损坏&#xff0c;无法打开。您应该将它移到废纸篓。” 这种情况在 …

EasyExcel:阿里开源的高效 Excel 处理工具,轻松解决 POI 内存溢出问题

在日常开发中&#xff0c;Excel 文件的导入导出是非常常见的需求。无论是数据批量导入、报表生成还是数据备份&#xff0c;我们都离不开对 Excel 的操作。但传统的 POI 框架在处理大数据量 Excel 时&#xff0c;常常会遇到内存溢出的问题&#xff0c;让开发者头疼不已。 今天给…

软件启动时加配置文件 vs 不加配置文件

一、基本概念不加配置文件启动直接执行启动命令&#xff0c;使用软件自带的默认参数。方便、快速&#xff0c;适合测试环境。缺点&#xff1a;灵活性差、配置不可控、不安全。redis-server zookeeper-server-start.sh kafka-server-start.sh指定配置文件启动启动时加载外部配置…

[ubuntu][C++]onnxruntime安装cpu版本后测试代码

下载官方预编译包后&#xff0c;怎么用呢。可以参考这个源码跑测试环境&#xff1a;ubuntu22.04onnxruntime1.18.0测试代码&#xff1a;CMakeLists.txtcmake_minimum_required(VERSION 3.12) project(onnx_test)# 设置C标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD…

栈:有效的括号

题目描述&#xff1a;给定一个只包含‘[’,{,(,),},]的字符串&#xff0c;判断该字符串是否括号有效。 括号有效的要求是&#xff1a; 每个左括号都有对应的右括号。每个右括号都有对应的左括号。左括号必须以正确的顺序闭合。 示例 1&#xff1a; 输入&#xff1a;s "…

微前端架构:解构前端巨石应用的艺术

在数字化转型浪潮中&#xff0c;企业级前端应用正变得日益复杂。微前端架构作为一种创新的解决方案&#xff0c;正在重新定义大型前端应用的构建方式&#xff0c;使多个团队能够独立开发和部署功能模块一、微前端架构的核心价值理念微前端架构的本质是将后端微服务理念扩展到前…

《LangChain从入门到精通》系统学习教材大纲

&#x1f4da; 《LangChain从入门到精通》系统学习教材大纲 目标&#xff1a;帮助你系统掌握LangChain理论与实践&#xff0c;成为具备独立开发能力的AI应用开发者。 学习周期建议&#xff1a;8~12周&#xff08;每天2~3小时&#xff09;&#xff0c;配合项目实战可加速成长。 …

Redis 的相关文件作用

Java 项目中使用 Redis 的相关文件&#xff0c;下面我来逐一解释它们的作用&#xff1a;1. RedisDemoApplicationTests.java 作用&#xff1a;这是 Spring Boot 项目的测试类。用途&#xff1a; 通常用于写单元测试或集成测试。测试 Redis 功能是否正常&#xff0c;比如连接、读…

【React】性能提升方案:Reat.memo, useMemo,useCallback用法详解

前言&#xff1a;Reat.memo, useMemo,useCallback是React中用于性能优化的三个核心API&#xff0c;它们分别针对组件渲染&#xff0c;计算缓存和函数引用进行优化。一、React.memo作用&#xff1a;缓存组件&#xff0c;当父组件重新渲染时&#xff0c;若子组件的props未变化&am…

Alibaba Cloud Linux 3 安装Docker

Alibaba Cloud Linux 3 基于 Red Hat Enterprise Linux (RHEL) 兼容内核&#xff0c;安装 Docker 的步骤与 RHEL/CentOS 系列类似&#xff0c;以下是具体操作&#xff1a; 1. 卸载旧版本&#xff08;如有&#xff09; sudo dnf remove docker docker-client docker-client-la…

每日一练001.pm

题目详情&#xff1a; P5705 【深基2.例7】数字反转 - 洛谷 题目描述 输入一个不小于 100 且小于 1000&#xff0c;同时包括小数点后一位的一个浮点数&#xff0c; 例如 123.4 &#xff0c;要求把这个数字翻转过来&#xff0c;变成 4.321 并输出。 #include<iostream&g…

AI智能优化SEO关键词策略实战

本文聚焦AI如何智能优化SEO关键词策略&#xff0c;通过实战案例分享高效技巧&#xff0c;帮助提升网站搜索排名和流量转化效果。内容涵盖AI革新关键词策略的原理、智能优化技巧的实际应用、高效关键词布局方法、避免常见错误的实战指南&#xff0c;以及综合策略推动排名飞跃的路…

360° 拖动旋转的角度计算原理

360 拖动旋转的角度计算原理 简化的 正方形 div demo 专注讲清楚「点击 / 拖动如何计算角度」这个原理&#xff0c;没有精美 UI哦 中间标注中心点鼠标点击或拖动时&#xff0c;计算当前位置相对于中心的角度在页面上实时显示角度代码示例&#xff08;原生 HTML JS&#xff09;…

五分钟XML速成

原文链接&#xff1a; XML - Dive Into Python 3 深入探讨 本书几乎所有章节都围绕一段示例代码展开&#xff0c;但 XML 并非关于代码&#xff0c;而是关于数据。 XML 的一个常见用途是 “聚合提要”&#xff08;syndication feeds&#xff09;&#xff0c;用于列出博客、论坛…

如何直接访问docker容器中的端口服务而不需要改端口映射

查看docker容器对于宿主服务器的ip地址 docker inspect -f {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}} $容器名 # 替换$容器名 为自己的启动docker内的服务&#xff0c;监听端口是否用信息 curl http://172.17.0.2:90有信息就可以直接通过该ip访问docker容器端口…

《Istio故障溯源:从流量劫持异常到服务网格的底层博弈》

服务网格常被企业视为微服务通信复杂性的“终极方案”。不少团队在部署Istio时,往往满足于“控制面启动、Sidecar注入成功”的表层验证,却忽视了底层机制与业务场景的深度适配—这种“重部署轻调优”的心态,往往为后续的生产故障埋下隐患。某大型金融机构的核心交易中台在接…