嵌入式硬件-51单片机

嵌入式硬件从小工到专家:51单片机电路设计之路 51单片机(也称为8051单片机)由Intel公司于1980年推出,至今仍然是许多嵌入式系统应用中的首选微控制器。8位处理器:支持8位数据总线,适合小型、低功耗应用。丰富的外设支持:如定时器、串口通信、I/O端口等,适合多种嵌入式系统需求。内存结构:包括内部RAM、ROM、I/O口以及可扩展的外部存储器接口。简洁的指令集:使用汇编语言或C语言编程,能够有效控制硬件资源。51单片机的这些优点使其成为嵌入式硬件开发中最受欢迎的平台之一。 阅读详情

本系列博客以STC98552RC芯片为示例学习。

一.基本概念

1.单片机基础

2.CPU与内存交互

3.位运算

示例(操作 P2.1)
把某位置 1P2 |= (1 << 1);
把某位清 0P2 &= ~(1 << 1);
翻转某位P2 ^= (1 << 1);
判断某位是否为1if (P2 & (1 << 1))
判断某位是否为0if (!(P2 & (1 << 1)))
同时操作多位

同时置位 P2.0 和 P2.1:

P2 |= (1 << 0) | (1 << 1)

同时清零 P2.0 和 P2.1:

P2 &= ~((1 << 0) | (1 << 1))

定时器高低位赋值    TL0 = num;
    TH0 = num >> 8;

4.逻辑分析仪

  1. 共地(最重要)
    逻辑分析仪的 GND 必须和单片机的 GND 连在一起,否则电平没有参考点,抓出来的波形全是乱码或噪声。

  2. 电压匹配
    51 单片机一般是 5V 电平,大多数廉价逻辑分析仪支持 5V 输入(但有些只支持 3.3V)。接之前最好确认一下你的逻辑分析仪输入电压范围,避免烧坏。

  3. 不要接错电源
    逻辑分析仪的通道输入是高阻抗的,只测信号,不会给单片机供电。千万别把 VCC 接到逻辑分析仪的通道上,只接信号线和 GND。

二.硬件详解

1.led

共阳极二极管,低电平导通

void led_init(void)
{
	P2 = 0xFF;
}

void led_all_on(void)
{
	P2 = 0;
}

void led_all_off(void)
{
	P2 = 0xFF;
}

void led_nor(void)
{
	P2 ^= 0xFF;    
}

void led_on(unsigned int n)   
{
	P2 = ~n;	  
}

2.数码管,三极管

四个NPN共阴极三极管控制位选,P0寄存器引脚控制段选

// 共阴极段码表
unsigned char seg_table[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
//0-9
// 位选
void Select_Bit(unsigned int n)
{
	// P1寄存器低四位清零
	P1 &= ~(0x0F << 0);
	// 选中第n位数码管
	P1 |= (1 << n);
}

// 段选
void Select_Seg(unsigned int n)
{
	 P0 = seg_table[n];
}

// 数码管动态显示
void Digiter_show(unsigned int n)  // 1234  
{
	  int m = 0;
	  int t = 0; 

	  while (n != 0)
	  {
	  	 m = n % 10;
		 P0 = 0;
		 Select_Bit(t++);
		 Select_Seg(m);
		 delay(100);
		 n /= 10;
	  }	
}

3.按键

初始化:

P1 |= (0x0F << 4);   // 把 P1.4、P1.5、P1.6、P1.7 置 1
P3 |= (1 << 5);      // 把 P3.5 置 1

//硬件本应实现下拉电阻,将按键初始为高电平状态,但本芯片硬件无实现,故通过软件置1.

按键的“初始化”只是把引脚设为输入状态,之后引脚电平变化是硬件自动完成的,不需要再调用初始化函数。

状态引脚电平原因
按键松开高电平(1)引脚内部有弱上拉(或外接上拉电阻),把电平拉到 VCC
按键按下低电平(0)按键把引脚直接短接到 GND,强行拉低

检测按键:

	if ((P1 & (1 << 4)) == 0)  // 检测到第一个按键被按下
	{
	   ret = 1;
	}
	else if ((P1 & (1 <<5)) == 0)
	{
	   ret = 2;
	}
	else if ((P1 & (1 << 6)) == 0)
	{
		ret = 3;
	}
	else if ((P1 & (1 << 7)) == 0)
	{
		ret = 4;
	}
	else if ((P3 & (1 << 5)) == 0)
	{
		ret = 5;
	}

4.中断

以外部中断0为例:

// 外部中断0 中断服务函数
void int0_handler(void)		interrupt 0
{
   	g_i++;				  //由于硬件存在一定误差,会出现中断触发不稳定,不会按照理想情况一次次触发
}
// 外部中断0初始化
void int0_init(void)
{
	// 1. int0:P3_2引脚拉高
	P3 |= (1 << 2);

	// 2. 外部中断0子开关 + CPU中断开关
	IE |= (1 << 0) | (1 << 7);

	// 3. 外部中断0引脚中断触发方式:下降沿触发
	TCON |= (1 << 0);
}

5.定时器

// 定时器0中断服务函数
void timer0_handle(void) 	interrupt 1
{
	TL0 = g_x;
	TH0 = g_x >> 8;

	P2 ^= (1 << 1);	   
}

// 定时器0初始化
void timer0_init(void)
{
	// 1. 配置定时器0模式:16位定时器
	TMOD &= ~(0x0F << 0);  
	TMOD |= (1 << 0);

	// 2. 设置定时器初值	 11.0592MHZ:64626  12MHZ:64535
	TL0 = g_x;
	TH0 = g_x >> 8;

	// 3. 开启定时器0,开始计数
	TCON |= (1 << 4);

	// 4. 开启定时器0中断 + CPU总中断
	IE |= (1 << 1) | (1 <<7);
}

6.蜂鸣器

  1. 单片机引脚 P21(P2.1)通过电阻 R22 (1kΩ) 连到了 NPN 三极管 Q5 的基极(B)。

  2. 三极管 Q5 的发射极(E)直接接了 GND(地)。

  3. 跳线帽的作用,就是把 P21 和这个三极管基极“连在一起”。

  4.  为什么连在一起,P21 就是低电平了?(核心原理)

    在 NPN 三极管内部,基极(B)和发射极(E)之间,相当于一个二极管(PN结)。

    当单片机程序想把 P21 输出高电平(1),用来关掉 D2 灯时,电流会顺着 P21 → R22 → 三极管基极。
    由于三极管的发射极是接地的,这个电流会直接通过基极-发射极这个“二极管”流向 GND。

    结果:这个 PN结会把 P21 的电压死死“钳位”在约 0.7V,而不是希望的 5V。
    在数字电路里,0.7V 被判定为逻辑低电平(0)。所以,跳线帽插着的时候,P21 永远无法维持高电平,D2 灯(低电平点亮)就永远亮着。

  5. 这个电路设计其实是“高电平驱动”的 NPN 蜂鸣器。也就是给 P21 高电平,蜂鸣器才响。但之前 D2 灯是“低电平亮”。这就导致两个功能完全冲突:灯亮意味着低电平,蜂鸣器不响;蜂鸣器响意味着高电平,灯灭。这就是硬件复用的坑,所以只能用跳线帽物理隔离。

蜂鸣器发声原理:根据发声频率与单片机工作频率计算定时器初值,发声频率越高,单次发声间隔越短,定时器初值越高(越接近溢出值),中断执行越频繁,蜂鸣器发声频率也就变高,实现了不同频率发声。

无源蜂鸣器一个震荡发声一次:

  • 每次定时器中断 → 引脚电平翻转一次

  • 两次中断 → 电平翻转两次 (一个完整周期)。

  • 每秒发生多少个完整周期 → 就是发声频率(Hz)。

#define HZ_200	63035
#define HZ_400	64285
#define HZ_600  64702
#define HZ_800	64910
#define HZ_1000	65035
蜂鸣器类型P2.1 持续高电平的结果原因
有源蜂鸣器✅ 一直响内部自带振荡电路,只要通电就发声
无源蜂鸣器❌ 不响(或只“嗒”一声)内部没有振荡电路,必须靠外部不断翻转电平(方波)驱动
// 定时器0中断服务函数
void timer0_handle(void) 	interrupt 1
{
	TL0 = g_x;
	TH0 = g_x >> 8;

	P2 ^= (1 << 1);	   
}//P2.1引脚连接蜂鸣器与led的D2灯,通过不断对P2电平翻转实现蜂鸣器工作

嵌入式硬件与51单片机:演变、挑战与未来 嵌入式硬件及其代表之一的51单片机在电子领域扮演着至关重要的角色。本文将深入剖析这一领域的发展历程,包括初期的崛起、面临的挑战、重大公关危机、核心业务、当前研究方向、采用的技术、实际应用场景、未来展望,并提供相关链接,为读者呈现一幅全面的图景。 阅读详情

相关推荐

嵌入式硬件选型指南:从51到STM32、ESP32主流单片机对比与实战

在嵌入式系统开发中,单片机选型是决定项目成败的关键环节。从8位51内核到32位ARM Cortex-M,再到集成无线功能的ESP32,不同架构在性能、外设、功耗及生态上差异显著。理解内核架构、存储容量、通信接口与封装形式等基础概念,掌握从需求反推参数的选型方法,能有效规避资源不足、封装不匹配及供货风险。无论是智能小车、物联网节点还是教学实验,合理的芯片选型都能提升开发效率、降低成本并保障量产可行性。本文系统梳理主流单片机型号与选型决策流程,助你做出更优的硬件方案。

weixin_34208185的博客 495

嵌入式硬件第二弹——51单片机(2)

(续接上篇)

2601_94959901的博客 876

51单片机红外循迹小车:嵌入式硬件入门实战指南

红外循迹小车是嵌入式系统入门的经典载体,其本质是基于光电传感器的闭环控制实践。它涉及传感器物理特性、模拟信号调理、定时器资源调度、PID控制算法及PCB硬件设计等核心原理。技术价值在于以极低成本(<10元BOM)锤炼真实世界的确定性控制能力——这正是工业现场对实时性、稳定性和资源约束的底层要求。典型应用场景包括AGV导航、传送带纠偏、智能仓储巡检等,而51单片机凭借毫秒级中断确定性、零OS依赖和极致资源利用率,成为验证控制逻辑与硬件协同的黄金平台。本文聚焦红外循迹小车与51单片机两大热词,拆解从传感器阈值漂

weixin_28744613的博客 309

嵌入式硬件选型指南:从51到STM32的单片机型号对比与实战

在嵌入式系统开发中,单片机选型是硬件设计的关键环节,直接影响项目成本、开发周期和稳定性。其核心原理在于根据功能需求匹配处理器资源,如IO口、Flash、RAM、定时器和通信接口等。合理选型能显著降低开发风险,避免资源浪费或性能瓶颈。典型应用场景包括智能家居、小车测速、密码锁、电子秤和水位监测等。从8位51单片机到32位STM32及国产替代型号,不同系列各有适用领域。通过系统化选型方法,可快速圈定候选型号,提升工程效率。

weixin_34161083的博客 403

跨越移植陷阱:ESP-IDF下LVGL与ILI9341的组件化集成与常见避坑指南

本文详细解析了在ESP-IDF环境下将LVGL图形库与ILI9341显示屏驱动进行组件化集成的完整流程。重点介绍了移植过程中的关键配置策略、内存管理优化技巧以及常见问题解决方案,帮助开发者有效规避内存溢出、显示异常等典型陷阱,实现高效稳定的嵌入式GUI开发。

yhn456789的博客 623

CentOS8静默安装Oracle11.2.0.1

背景 新安装oracle,用静默安装方式就不需要安装图形界面了,省时省力。 前期准备工作与图形化安装一样,如创建用户|用户组、环境变量、内核参数、创建目录等. 可参考图形化安装,链接:https://blog.youkuaiyun.com/heroicpoem/article/details/104229369 环境 平台 版本 操作系统 centOS 8 Oracle 11gR2 1.响应文件 响应文件的内容就是图形化安装时手工设置的选项内容。 解压后,database/response/db

heroicpoem的专栏 4518

☆嵌入式硬件的学习 :51单片机 知识总结

本文摘要:介绍了CPU、MCU等处理器的基本概念,区分了RAM和ROM的区别。讲解了外设寄存器、GPIO功能及中断相关知识,包括51单片机的5个中断源。阐述了定时器类型、PWM原理及其周期/占空比,对比了有源/无源蜂鸣器特性,并提及串口通信基础概念。

2301_77695365的博客 391

LSTM预测股票数据---数据预处理

# 导入相应的模块 import pandas as pd import numpy as np import matplotlib.pyplot as plt import tensorflow as tf # 获取训练集 def get_train_data(data,batch_size = 60 ,time_step = 20,train_begin = 0,train_end = 58...

qq_35358021的博客 3360

嵌入式硬件51单片机day4

以上操作是如何通过51单片机进行贮存器的操作以及如何将上位读到的温度从十六进制转换成10进制。学习了51单片机的温度传感器读取当前文温度。

lc66_的博客 185

VBA中如何使用Edge内核Browser?

在微软宣布停止对IE的支持后,许多使用VBA中Web Browser的用户遇到了困境,因为Web Browser使用的IE内核。然而微软并没有给出支持Edge的新版Web Browser,网上许多第三方的库也不够完善。经过调研,libEdge可以较好的和VBA集成,实现在Excel中打开Browser,甚至能够通过执行js代码,获取web页面的信息。项目需要WebView2Loader.dll和LibEdge.dll两个库,区分x86和x64版本。

金木AI 2398

阿里天池新闻推荐实战:多路召回策略解析与优化

本文深入解析阿里天池新闻推荐项目中的多路召回策略,包括ItemCF、UserCF、YouTubeDNN等五种召回模型的协同应用与优化技巧。通过实战案例展示如何提升推荐系统效果,特别针对冷启动问题提出创新解决方案,帮助开发者构建高效的新闻推荐系统。

weixin_26918763的博客 415

嵌入式硬件第一弹——51单片机(1)

能够使单片机工作所需要最少器件。

2601_94959901的博客 1040

基于FME—三调篇—尖锐角及小缝隙处理

1 问题分析: 该功能实现在FME较为简单,相对ARCGIS模型构建器以及ARCGIS ENGINE,FME更适合无代码基础的人群。在三调内业数据处理要求中,尖锐角是不允许存在的。本文基于FME实现了对尖锐角的自动查询与消除以及自动处理在消除尖锐角过程中产生的缝隙,并进行了拓扑检查,实现自动化批量处理尖锐角的功能,提高工作效率。 2 总体思路: 2.1 实现功能分析: 1.找出小于指定角度的尖锐角...

qq_33315579的博客 9181

嵌入式硬件——51单片机

第一位数码管显示数字 → 快速切换,第二位显示数字 → 高速循环轮询。:对应 bit 位,相同为 0,相异为 1,常用于电平翻转。最小系统:能够让单片机正常运行工作,需要的最少元器件集合。周期:T = 1/(2.1*10^9)≈0.5ns。:对应 bit 位,有 1 则 1,全 0 才 0。:对应 bit 位,全 1 才 1,有 0 则 0。,高速轮询每一位数码管,人眼视觉上看到多位同时点亮。频率和周期互为倒数关系:\(T=\frac1f\):二进制每一位全部翻转,0 变 1,1 变 0。

weixin_57202813的博客 377

【Zephyr 系列 29】低功耗调试指南:电流测量、系统睡眠与功耗分析

Zephyr低功耗调试指南(150字摘要) 针对物联网设备续航需求,本文解析Zephyr低功耗调试方法:1️⃣ 机制:启用PM子系统和tickless idle,配置睡眠策略;2️⃣ 测量:推荐功耗分析仪捕捉μA级电流波动;3️⃣ 优化:管理唤醒源(如GPIO/RTC)、调整BLE广播/连接参数,挂起闲置外设;4️⃣ 分析:建立功耗文档,对比不同模式电流(如待机0.6mA vs广播3.2mA)。强调低功耗需系统性设计,初期即需纳入测试流程。下期将探讨Zephyr OTA升级实现。

hemoparrot的专栏 1180

无法将“choco”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的解决方案

本文主要介绍了无法将“choco”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的解决方案,希望能对使用wIndows的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 12万+

STM32和51单片机还有哪些可选的用于嵌入式的硬件

STM32和51单片机作为嵌入式系统的核心,通常还会与其他硬件组件一起使用,以构建完整的嵌入式系统。

xie__jin__cheng的博客 834

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

嵌入式之硬件学习(一)51单片机

在数字电路中,用来存放二进制数据或代码的电路称为寄存器。

weixin_63557265的博客 1343

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

嵌入式硬件从小工到专家(51单片机电路设计)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】         嵌入式电路和传统电路最大的区别,就是它可以用软件的方法来处理信息。不管是51单片机,或者说stm32,又或者是soc,这里面只要存在cpu,那就代表可以跑软件。至于这些软件是只处理外设,还是说会带算法,都是和具体的应用场景相结合的。         和今天的51单片机电路加在一起,我们学习了三个电路,即降压电路、串口电路,以及即将学习的51单片机。经过这三个电路之后,我们就可以真实

嵌入式-老费,一个分享专业嵌入式知识的blog 932

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

51单片机原理图

51单片机

weixin_43008737的博客 903

51单片机—音乐篇

51单片机51单片机 音乐部分源码 51单片机 音乐部分源码

shengsi879的博客 709

【51单片机篇】超声波测距

超声波测距

m0_66492811的博客 802

用51单片机做简易音乐播放器—《晴天》周杰伦

用蜂鸣器做简易音乐播放器—《晴天》周杰伦

m0_64944622的博客 1573

AT24C02密码锁,LCD1602显示,51单片机。

【代码】AT24C02密码锁,51单片机。

m0_73849363的博客 340

用汇编实现51单片机矩阵式键盘(扫描法+键盘编码)

【代码】用汇编实现51单片机矩阵式键盘(扫描法+键盘编码)

2301_81382481的博客 459
上一篇: Linux网络编程-sqlite数据库
下一篇: ARM裸机开发-汇编基础
剑指offer.
博客等级 码龄3年 15粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值