嵌入式学习 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 小时前
al+大数据每日学习笔记35
大数据·笔记·学习
zcmodeltech1 小时前
冷链物流沙盘模型控制系统设计——基于STM32与Modbus RTU的冷藏车、冷库全流程动态展示方案
数据结构·stm32·单片机·嵌入式硬件·物联网·能源
智闲电子设计1 小时前
RS485 总线实战:终端电阻、差分信号、半双工方向控制,工程里最容易翻车的几处
c语言·stm32·单片机·嵌入式硬件
kyrie_sakura2 小时前
MySQL学习笔记4 -- select的7大子句,子查询
笔记·学习·mysql
UIU1142 小时前
补码运算与整数溢出(上
学习·c#·补码·补码运算
词却3 小时前
OpenCV学习:人脸识别
人工智能·opencv·学习
xqqxqxxq3 小时前
AI Agent学习:第四章小结及八道思考题(李博杰《深入理解 AI Agent》第四章观后总结)
大数据·人工智能·学习
Willliam_william3 小时前
QEMU学习之路(13)— 在BusyBox中安装pciutils
学习
小白的后端世界4 小时前
数据分析基础学习
人工智能·学习·数据分析