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

硬件(一)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.dtcms.com/a/365654.html

相关文章:

  • 【和春笋一起学C++】(三十九)类作用域
  • [鸿蒙心迹]带新人学鸿蒙的悲欢离合
  • “企业版维基百科”Confluence
  • Docker实战指南:从安装到架构解析
  • 【QT特性技术讲解】QPrinter、QPdf
  • leetcode 38 外观数列
  • 联想开天X7:携手海光,开启信创PC高性能新时代
  • Java中 String、StringBuilder 和 StringBuffer 的区别?
  • WHAT - 协程及 JavaScript 具体代码示例
  • PgManage:一款免费开源、跨平台的数据库管理工具
  • Packet Radio Network,PRNET
  • 从发现到恢复,看瑞数信息如何构建“抗毁重构”实战路径
  • VR节约用水模拟体验系统:沉浸式体验如何改变我们的用水习惯
  • 全员0门槛数据分析:纷享销客BI Agent,让数据价值直抵业务
  • 实现信号的小波分解和重构
  • 自动化仓库托盘搬运减少错误和损坏的方法有哪些?实操案例解读
  • 12、Docker基本概念 容器与镜像与安装
  • MyBatis xml配置文件
  • 借助Aspose.ZIP SDK,在 C# 中压缩和提取 LZIP 文件
  • ubuntu的2T新硬盘分区、格式化并挂载
  • Linux学习:生产者消费者模型
  • 明远智睿 3568 核心板:四核 Cortex - A55 架构驱动的性能新标杆
  • C++中cdecl、stdcall、fastcall、thiscall异同——10分钟弄清
  • linux0.12 head.s代码解析
  • Alpha World赞助Hello Blockchain Thailand,AWT成为全球共识焦点
  • 袋鼠云产品功能更新报告14期|实时开发,效率再升级!
  • 【IQA技术专题】NIQE代码讲解
  • VMWare上搭建分布式Hadoop集群
  • STM32F103按钮实验
  • 大语言模型领域最新进展