当前位置: 首页 > backend >正文

硬件(一)51单片机

一、核心概念

  1. CPU(Central Processing Unit,中央处理单元)
    计算机的核心部件,负责执行指令和处理数据,是运算和控制的核心。

  2. MCU(Microcontroller Unit,微控制单元)
    将 CPU、内存、I/O 接口等集成在单一芯片上的微型计算机系统,侧重于对外设的控制而非高效数据处理。

  3. MPU(Microprocessor Unit,微处理器单元)
    集成了 CPU、内存、外设控制器和总线接口的芯片,是构成计算机系统的核心器件。

  4. GPU(Graphics Processing Unit,图形处理单元)
    专门设计用于快速处理图像和视频数据的处理器,擅长并行计算。

  5. SoC(System on Chip,系统级芯片)
    将微处理器、模拟 IP 核、数字 IP 核、存储器及接口电路等集成在单一芯片上的先进系统,可视为功能高度集成的特殊 CPU。

  6. GPIO(General Purpose Input/Output,通用输入输出端口)
    是MCU/MPU上的“通用引脚接口”,是一组可灵活配置的“多功能引脚”,能通过软件配置为输入、输出或复用功能,实现与外部设备的“简单交互”。

二、51 单片机

(一)8051 内核

基于 8051 内核的单片机是经典的 8 位微控制器,实际开发中需结合具体硬件手册和电路图(如 HC6800-MS 原理图)进行设计。

(二)LED 模块

  1. 原理图说明

    • 硬件连接中,网络编号(如 P20/SDA)表示原理上相连的引脚。
    • LED 模块通常通过 GPIO 端口(如 P2 口)控制,高低电平决定 LED 的亮灭状态。
  2. 控制代码

    跑马灯代码:操作P2端口(注意是大写)

    #include <reg52.h>void delay(unsigned int n)
    {while(n--);
    }void led_all_on(void)
    {P2 = 0;
    }void led_all_off(void)
    {P2 = 0xFF;
    }void led_on(unsigned char n)
    {P2 = n;
    }int main(void)
    {led_all_off();while(1){int i;for(i = 0;i < 8;++i){led_on(~(1 << i));delay(30000);	}for(i = 6;i > 0;--i){led_on(~(1 << i));delay(30000);}}
    }

(三)位运算应用

位运算是单片机控制硬件的核心手段,通过操作寄存器的特定位实现精准控制:

  1. 指定位清零

reg &= ~(1 << n);               // reg寄存器第n位清零
reg &= ~((1 << n) | (1 << m));  // reg寄存器第n、m位同时清零
reg &= ~(0x0F << 2);            // reg寄存器从第2位开始,连续4位清零(0x0F为4位1)


     2.指定位置 1

  1. 公式:

            reg |= (1<<n)   //reg寄存器第n位置1

            reg |= (1<<n) | (1<<m)  //reg寄存器第m位和n位置1  

      3. 指定位翻转

^:指定位翻转,其他位不变(相同为0不同为1)

reg ^= (1 << n);                // 第n位翻转(0变1,1变0)
reg ^= (1 << n) | (1 << m);     // 第n、m位同时翻转

  1. 位运算规则

    • &(与):一假则假,用于清零。
    • |(或):一真则真,用于置 1。
    • ^(异或):相同为 0,不同为 1,用于翻转。
    • ~(取反):单目运算,0 变 1、1 变 0。
    • <<(左移):高位丢弃,低位补 0,等价于乘 2ⁿ。
    • >>(右移):无符号数补 0,有符号数补符号位,等价于除 2ⁿ。

(四)寄存器

  1. 定义在数字电路中,用来存放二进制数据或代码的电路称为寄存器。
  2. 什么是外设寄存器?

    是指能够操作硬件的,具有固定地址的内存空间

  3. 本质
    • 51 单片机中通过特殊功能寄存器(SFR)访问硬件,如:

      #define P2 *((unsigned char *)(0xA0))  // 地址0xA0强转为指针
      sfr P2 = 0xA0;  // 直接定义SFR,0xA0为地址

    • 可视为系统预定义的全局变量(如unsigned char P2;,占 1 字节 8 位)。

(六)数码管控制

共阴极数码管 (共负极,负极是连接在一起的);

共阳极数码管 (共阳极,阳极是连接在一起的);

  1. 核心概念

    • 段选:控制数码管各段(a~g、dp)的亮灭,通常由 P0 口控制。
    • 位选:选择哪个数码管显示,由控制引脚(如 LEDS1~LEDS4)控制。
  2. 原理图说明

    • 共阴极数码管:位选引脚为低电平时选中(如 P10 置 1 时,LEDS1即为0被选中)。
  3. 点亮4个数码管(eg:显示1234)
#include "delay.h"
#include <reg52.h>void delay(unsigned int n)
{while(n--);
}#include "digiter.h"
#include "delay.h"
#include <reg52.h>void bit_select(int n)	 //位选,即控制第几个数码管亮
{P1 &= ~(0x0F << 0);P1 |= (1 << n);
}void segment_select(int n)	   //段选,控制显示(0~9)的数字
{unsigned char t[] = {0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};P0 = t[n];delay(300);	  //保证二极管导通P0 = 0;delay(300);    //消影
}void show_number(int n)	   //显示数码管的数字(eg: 1234)
{int t = 0;if(n > 9999){return ;}else if(0 == n) {bit_select(0);segment_select(0);	}while(n){bit_select(t++);segment_select(n % 10);n /= 10; }
}#include <reg52.h>
#include "led.h"
#include "digiter.h"
#include "delay.h"int main(void)
{while(1){  		show_number(1234);}}

http://www.xdnf.cn/news/19779.html

相关文章:

  • 阿里开源首个图像生成基础模型——Qwen-Image本地部署教程,中文渲染能力刷新SOTA
  • HTTP 协议核心组件与安全扩展深度解析
  • 机器学习与深度学习的 Python 基础之 NumPy(2)
  • uniapp+vue3 微信小程序全屏广告组件功能
  • AI IDE+AI 辅助编程,真能让程序员 “告别 996” 吗?
  • 【LeetCode_283】移动零
  • 技术小白如何快速的了解opentenbase?--把握四大特色
  • XE 旧版本 JSON 处理
  • 使用 Uni-app 打包 外链地址APK 及 iOS 注意事项
  • K8S-基础架构
  • 离开职场2个月,后知后觉的反思。
  • 素材合集!直播间带货音乐BGM合集,抖音直播间常用热门音乐合集,根据中文分类,方便查找
  • 力扣hot100:矩阵置零(73)(原地算法)
  • 【Python语法基础学习笔记】类的定义和使用
  • WSL + VSCode + Git + Node.js 开发环境配置文档
  • python数据分析 与spark、hive数据分析对比
  • 使用pyspark对上百亿行的hive表生成稀疏向量
  • 2025年COR IOTJ SCI2区,灾后通信无人机基站位置优化和移动充电无人机路径规划,深度解析+性能实测
  • Android aoap开发常见问题之package_allowed_list.txt导致的编译报错
  • 深度学习------模型的保存和使用
  • 深度学习篇---Adam优化器
  • Docker Pull 代理配置方法
  • 【正则表达式】 正则表达式有哪些语法?
  • Low-Light Image Enhancement via Structure Modeling and Guidance 论文阅读
  • AP5414:高效灵活的LED驱动解决方案,点亮创意生活
  • go大厂真实的面试经历与总结
  • 心路历程-初识Linux用户
  • EasyExcel 基础用法
  • 如何在FastAPI中巧妙隔离依赖项,让单元测试不再头疼?
  • 一文吃透 `protoc` 安装与落地