硬件(一)51单片机

发布于:2025-09-05 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、核心概念

  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);
	}

}


网站公告

今日签到

点亮在社区的每一天
去签到