嵌入式学习 day44:51单片机入门

一、51单片机简介

51单片机是Intel 8051系列的统称,是一种经典的8位微控制器(MCU)。它内部集成了CPU、RAM、ROM、定时器、I/O接口等功能,适合用于嵌入式控制场景。虽然性能不如ARM,但胜在结构简单、资料丰富,是学习硬件开发的绝佳入门选择。

学习方法:通过C语言编写程序,控制单片机的I/O口输出高低电平,从而驱动LED灯、蜂鸣器、数码管等外设。

二、开发环境

  • 开发板:51单片机开发板(如STC89C52)

  • 编程语言:C51(标准C的扩展)

  • 寄存器头文件:reg52.h

三、位运算基础

在单片机编程中,位运算是最常用的操作方式。因为单片机的寄存器只有8位,每一位控制一个引脚,通过位运算可以精准地操作某一位而不影响其他位。

运算符 含义 在单片机中的典型用法
` ` 按位或
& ~ 按位与取反 将指定位清0(输出低电平)
^ 按位异或 翻转指定位(取反)
<< 左移 配合循环生成 (1<<n) 掩码
~ 取反 全部翻转,用于 P2 = ~P2

四、核心设计思路

4.1 P2端口与LED的对应关系

51单片机的P2端口有8个引脚(P2.0 ~ P2.7),每个引脚控制一个LED。写入 P2 = 0xFF(二进制 1111 1111)全部输出高电平,LED熄灭;写入 P2 = 0x00(二进制 0000 0000)全部输出低电平,LED点亮。开发板采用低电平点亮 设计,所以 0 代表亮,1 代表灭。

4.2 函数封装思路

将LED操作封装成独立模块,提高代码复用性:

  • led_init():P2全部置1,关闭所有LED

  • led_on(mask):P2 &= ~mask,将指定位清零点亮

  • led_off(mask):P2 |= mask,将指定位置1熄灭

  • led_nor(mask):P2 ^= mask,翻转指定位状态

  • led_on_all():P2=0x00,全部点亮

  • led_off_all():P2=0xFF,全部熄灭

  • led_nor_all():P2 = ~P2,全部翻转

4.3 流水灯实现思路

  1. 用 delay() 函数实现软件延时(通过循环消耗CPU时间)

  2. 循环执行 led_on(1 << i),逐个点亮LED

  3. 先正向(0→7)再反向(7→0),形成往返流动效果

  4. 每次点亮后调用 delay() 保持可见时间,然后用 led_init() 全部熄灭再点亮下一个

五、今日总结

今天学了51单片机LED控制,核心要点如下:

  1. 单片机编程本质:通过C语言操作寄存器控制硬件引脚的电平状态

  2. 位运算是硬件控制的基石 :\| 置1、& ~ 清0、^ 翻转、<< 移位

  3. P2端口控制:8个引脚对应8个LED,0x00全部点亮,0xFF全部熄灭(低电平点亮)

  4. 软件延时:通过循环计数实现可见的时间延迟

  5. 流水灯逻辑:循环移位 + 延时,逐个点亮LED形成流动效果

相关推荐
创界工坊工作室1 小时前
38-基于单片机的老人健康监测系统
单片机·嵌入式硬件·51单片机·proteus
撩得Android一次心动2 小时前
Jetpack Compose 知识点整理2【个人用】
android·笔记·学习·kotlin·compose
dadaobusi3 小时前
学习:灵犀指令集
学习
三佛科技-134163842123 小时前
20W~200W副边反馈SSR隔离方案HN1562+碳化硅MOS(含光耦817,431)
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
xhyu614 小时前
【学习笔记】图像质量评估方法 (5.生成图像是否符合用户要求)
笔记·学习·计算机视觉
恒锐丰科技林技术员5 小时前
EG2103 高压 MOS/IGBT 驱动芯片解析:半桥驱动的高性价比之选
经验分享·嵌入式硬件·硬件工程
卿卿的产品经理日记6 小时前
【AI产品经理实战】Day 38|try-except 踩坑实录:报错是数据
人工智能·笔记·python·学习·产品经理
keyipatience6 小时前
TypeScript学习(1)
前端·javascript·学习·typescript·html·css3
_Ningye7 小时前
STM32 — 11.5 硬件SPI读写W25Q64
stm32·单片机·嵌入式硬件
lazy H7 小时前
【计算机网络】第 2 篇:一条数据如何穿过网络?彻底理解数据封装与解封装
网络·经验分享·后端·学习·计算机网络