51单片机入门:硬件基础、位运算、数码管动态显示完整梳理

一、频率与时间基础单位

频率描述信号每秒震荡多少次,时间与频率互为倒数:T=1fT=\frac1fT=f1

单位 换算关系
HZ(赫兹) 基础单位,1HZ = 1次/秒
KHZ(千赫兹) 1KHZ=103HZ1\mathrm{KHZ}=10^3\mathrm{HZ}1KHZ=103HZ
MHZ(兆赫兹) 1MHZ=103KHZ=106HZ1\mathrm{MHZ}=10^3\mathrm{KHZ}=10^6\mathrm{HZ}1MHZ=103KHZ=106HZ
GHZ(吉赫兹) 1GHZ=103MHZ=109HZ1\mathrm{GHZ}=10^3\mathrm{MHZ}=10^9\mathrm{HZ}1GHZ=103MHZ=109HZ

示例:2.1GHZ,代表每秒震荡 2.1×1092.1\times10^92.1×109 次;

周期 T=12.1×109≈0.5nsT=\frac{1}{2.1\times10^9} \approx0.5\mathrm{ns}T=2.1×1091≈0.5ns。
💡51单片机常用晶振:11.0592MHZ,专门适配串口波特率;还有12MHZ,方便做精确延时计算。

二、C51位运算(单片机最核心操作)

单片机IO口操作几乎全部依靠位运算,5种基础运算符:

运算符 名称 运算规则 典型业务场景
` ` 按位或 对应位有1则为1,全0才是0
& 按位与 对应位全1才为1,有0则为0 指定位清0,其余位保持不变
~ 按位取反 每一位0变1,1变0 配合按位与,生成清零掩码
^ 按位异或 对应位相同为0,相异为1 指定位翻转(取反)
<< 左移 二进制整体向左移动,低位补0 生成掩码,1<<n快速得到第n位为1的数
>> 右移 二进制整体向右移动;有无符号分为逻辑右移、算术右移 拆分多位数高低字节

✨代码实操示例

复制代码
#include <reg51.h>

void bit_op_demo(void)
{
    unsigned char t = 0xF4;   // 1111 0100
    unsigned char n = 0x32;   // 0011 0010

    unsigned char res_or  = t | n;   // 1111 0110 = 0xF6
    unsigned char res_and = t & n;   // 0011 0000 = 0x30
    unsigned char res_xor = t ^ n;   // 1100 0110 = 0xC6
    unsigned char res_not = ~(t&n);  // 1100 1111 = 0xCF

    // ========= IO口经典用法 =========
    unsigned char P2 = 0x00;
    P2 |= (1 << 0);          // bit0置1,其余不变
    P2 |= (1 << 7);          // bit7置1,其余不变
    P2 |= (1<<2) | (1<<3);   // bit2、bit3同时置1

    P2 = 0xFF;
    P2 &= ~(1 << 0);         // bit0清0,其余不变
    P2 &= ~(1 << 6);         // bit6清0,其余不变
}

重点记忆两个模板,写项目天天用:

  1. 某一位置1:寄存器 |= (1 << n);
  2. 某一位清0:寄存器 &= ~(1 << n);

三、三极管开关原理(数码管位选驱动)

三极管在数字电路充当电子开关 ;模拟电路用于电流放大。

分为两大类型:NPN、PNP;通过箭头区分:

  • NPN:箭头朝外;基极高电平 → 导通(饱和区);基极低电平 → 关断(截止区)
  • PNP:箭头朝内;基极低电平 → 导通(饱和区);基极高电平 → 关断(截止区)

📌本课程硬件:4位共阴极数码管位选由NPN三极管驱动。

P1低4位输出高电平,三极管导通,对应数码管被选通。

四、各类处理器概念区分

器件 核心说明
CPU 中央处理器,负责指令运算、处理
MCU 微控制器,单片机;CPU+RAM+ROM+外设全部集成一块芯片;成本低,做简单控制,51单片机就属于MCU
MPU 微处理器;只有独立CPU芯片,需要外接内存、外设;适合复杂操作系统,如手机主处理器
GPU 图形处理器,专门做图像渲染、图形计算
NPU 神经网络处理器;AI推理、卷积运算,AI拍照
FPU 浮点运算单元,专门处理小数浮点数运算,一般集成在CPU内部
SOC 片上系统;把CPU、GPU、NPU、内存控制器等多个芯片集成一块芯片;体积小功耗低,手机、开发板大量使用

五、存储器概念:内存 vs 外存;RAM与ROM

内存与外存

  1. 内存 :程序运行时存放临时变量;掉电数据丢失;读写速度快,价格贵;电脑内存条。
  2. 外存 :存放代码、文件;掉电数据保留;读写速度慢,价格便宜;电脑硬盘。

51单片机内部 RAM / ROM

  • RAM(随机存取存储器):相当于单片机的内存,存放运行变量,断电丢失。标准8051内部RAM大小:128字节。
  • ROM(只读存储器/程序存储器):存放编译好的程序代码,掉电不会丢失;标准8051 ROM大小:4KB。

CPU工作流程:

1.CPU完成运算;

2.通过地址总线 找到RAM变量地址;

3.通过数据总线 ,读写RAM里面的数据;

4.控制总线完成外设读写控制。

三大总线:地址总线、数据总线、控制总线

外设寄存器:单片机片上外设(IO、定时器、串口)对应的特殊寄存器地址;操作寄存器,就可以控制硬件外设,例如P0、P1、P2、P3。
📚作业问题回顾:操作LED、数码管用到哪些寄存器?

LED一般操作P2;4位数码管:P1做位选,P0做段选

六、4位共阴极数码管原理与动态显示

硬件基础

  • 共阴极 :公共脚COM接GND;段引脚输出高电平点亮段
  • 段选:P0口输出段码,控制每一段LED亮灭;
  • 位选:P1低4位输出电平,通过NPN三极管,选择哪一个数码管工作。

⚡动态显示核心思想:人眼视觉暂留效应

同一时刻只点亮1位数码管,快速轮流刷新每一位,人眼看不出闪烁,以为4个同时亮。
静态显示:一个数码管独占一套硬件资源,多位硬件成本高;动态扫描节省硬件,项目更常用。

共阴极段码(dp g f e d c b a

复制代码
//共阴极0‑9段码表
unsigned char code seg_table[10]={
    0x3F, //0
    0x06, //1
    0x5B, //2
    0x4F, //3
    0x66, //4
    0x6D, //5
    0x7D, //6
    0x07, //7
    0x7F, //8
    0x6F  //9
};

digister.c完整驱动代码

复制代码
#include <reg51.h>
#include "digister.h"

//共阴极段码表 0~9
unsigned char seg_table[10] = {
    0x3F, //0
    0x06, //1
    0x5B, //2
    0x4F, //3
    0x66, //4
    0x6D, //5
    0x7D, //6
    0x07, //7
    0x7F, //8
    0x6F  //9
};

//位选:P1低4位,NPN三极管高电平选通,n范围0~3
void Select_Bit(unsigned char n)
{
	P1 &= ~0x0F;    //清空P1低四位
	P1 |= (1 << n); //选中第n位数码管
}

//段选输出到P0口
void Select_Seg(unsigned char num)
{
	P0 = seg_table[num];
}

//毫秒延时,防止编译器优化空循环
void delay_ms(unsigned int t)
{
	unsigned int i,j;
	for(i = t; i > 0; i--)
		for(j = 110; j > 0; j--);
}

//动态扫描一轮:不要写while(1)死循环!交给main主循环调用
void Digiter_show(unsigned int n)
{
	unsigned char ge,shi,bai,qian;
	ge  = n % 10;
	shi = n / 10 % 10;
	bai = n / 100 % 10;
	qian= n / 1000;

	if(n >= 0 && n <= 9999)
	{
		//显示个位
		Select_Bit(0);
		Select_Seg(ge);
		delay_ms(1);
		Select_Bit(0); //消隐,关闭位选,消除鬼影重影

		//显示十位
		Select_Bit(1);
		Select_Seg(shi);
		delay_ms(1);
		Select_Bit(0);

		//显示百位
		Select_Bit(2);
		Select_Seg(bai);
		delay_ms(1);
		Select_Bit(0);

		//显示千位
		Select_Bit(3);
		Select_Seg(qian);
		delay_ms(1);
		Select_Bit(0);
	}
}

digister.h头文件

复制代码
#ifndef __DIGISTER_H
#define __DIGISTER_H

extern unsigned char seg_table[10];
void Select_Bit(unsigned char n);
void Select_Seg(unsigned char num);
void delay_ms(unsigned int t);
void Digiter_show(unsigned int n);

#endif

main.c测试调用

复制代码
#include <reg51.h>
#include "digister.h"

void main(void)
{
	while(1)
	{
		Digiter_show(1234); //数码管显示数字1234
	}
}
  1. C141语法错误:一般是上一行大括号、数组闭合、分号缺失,报错行不一定是错误行,向上查找 ;注释不能把 } 大括号吃掉;
  2. L104多重定义:函数实现写在.h头文件,多个文件include后重复定义;头文件只写声明,.c写函数实现;
  3. L16警告:定义了函数但是没有调用,属于警告不影响运行,可以删除未使用函数消除;
  4. 数码管鬼影:增加消隐,切换数字前关闭位选三极管。

📎名词缩写全称对照表

缩写 英文全称 中文释义
HZ Hertz 赫兹,频率单位
KHZ Kilo Hertz 千赫兹
MHZ Mega Hertz 兆赫兹
GHZ Giga Hertz 吉赫兹
CPU Central Processing Unit 中央处理器
MCU Micro Controller Unit 微控制器(单片机)
MPU Micro Processor Unit 微处理器
GPU Graphics Processing Unit 图形处理器
NPU Neural‑network Processing Unit 神经网络处理器
FPU Floating‑Point Unit 浮点运算单元
SOC System On Chip 片上系统
RAM Random Access Memory 随机存取存储器(内存)
ROM Read‑Only Memory 只读存储器(程序存储器)

课后复习思考题(来源于学习文档)

  1. 什么是CPU、MCU、MPU、GPU、NPU、FPU、SOC?
  2. RAM和ROM区别?51单片机芯片内部的RAM和ROM大小?
  3. 什么是外设寄存器?
  4. 操作LED和数码管用到了哪些寄存器?
  5. NPN型三极管和PNP型三极管的区别?
  6. 数码管显示数值的操作流程?
  7. C语言如何实现指定位清0和指定位置1?

本篇全部代码可以直接复制到Keil C51工程编译,适合普中51开发板运行。

相关推荐
三佛科技-187366133972 小时前
24W-48W隔离双绕组非标自供电芯片LP3718CD(电路原理图)
单片机·嵌入式硬件
糖糖单片机设计4 小时前
基于 STM32 的小型鸟类宠物繁殖系统
stm32·嵌入式硬件·宠物
电子元器件选型哥5 小时前
一文讲清LLC谐振电路工作原理
单片机·嵌入式硬件·硬件工程师·电子元器件·器件选型
HUI-4746 小时前
EG1162|SOP‑16 高压同步整流降压控制器,最高 600V 输入,大电流 5V 输出优选
嵌入式硬件·硬件工程
POMAGTOR6 小时前
【5G 通讯 POGOPIN 弹簧顶针连接器解决方案】
网络·嵌入式硬件·5g
ZLG_zhiyuan6 小时前
测试方案 | 从“000”到“111”,高效完成100BASE-TX以太网眼图测试
单片机·嵌入式硬件
恒锐丰科技林技术员6 小时前
EG1198:120V 宽压内置 MOS 降压 DC‑DC 电源芯片解析
经验分享·嵌入式硬件·硬件工程
数字新视界7 小时前
能耗管理系统的综合方案与优化实战解析
嵌入式硬件·物联网·数据中心·数据中心基础设施管理·dcim管理系统
深圳市恒锐丰科技杨生7 小时前
EG3525S 推挽 / 半桥 PWM 控制器|屹晶 EGmicro
嵌入式硬件·硬件工程