- 博客(41)
- 收藏
- 关注
原创 51单片机学习笔记17-红外遥控(外部中断)
实现 51 单片机接收红外遥控信号,在 LCD1602 上实时显示红外地址码、命令码,并响应 “音量加 / 减” 按键修改计数变量并显示。因为红外信号的电平变化是 “瞬间的”,用中断可以及时捕捉引导码的下降沿,避免数据丢失。上(抗干扰),接收头会自动解调,输出 “去载波” 后的高低电平信号,单片机只需解析电平的时间长短即可。上(抗干扰),接收头会自动解调,输出 “去载波” 后的高低电平信号,单片机只需解析电平的时间长短即可。两种方式控制电机转速,同时在数码管上实时显示当前速度档位(0-3 档)
2026-01-28 08:58:21
722
原创 51单片机学习笔记16-AD/DA转换
include <REGX52.H> // 51单片机寄存器定义头文件,包含P3口等寄存器的定义// 定义XPT2046触摸屏控制器的硬件引脚(连接到51单片机P3口)// CS引脚:片选信号,低电平有效,选中XPT2046进行通信// DIN引脚:数据输入,向XPT2046发送控制命令// DOUT引脚:数据输出,从XPT2046读取AD转换结果// DCLK引脚:时钟信号,同步数据的输入输出/*** @brief 读取XPT2046的AD转换值。
2026-01-28 08:57:25
252
原创 51单片机学习笔记14-DS18B20(单总线)
单次传输 8 位数据(0x00~0xFF),是单总线与从机交互的实际数据单元(如发送 DS18B20 指令、读取温度数据)。引脚2 (DQ) :单总线数据引脚,接51单片机任意一个IO口(如P3_7)引脚3 (VCC) :电源引脚,接5V/3.3V(51单片机直接接5V即可)主机向从机发送 1 位数据(0/1),从机在主机定义的「位窗口」内读取电平。主机触发从机输出 1 位数据,主机在「读取窗口」内捕获从机的电平。单总线没有时钟线,所有的通信时序、读写操作,都由。,一端接 DQ 引脚,一端接 5V 电源;
2026-01-27 11:00:39
664
原创 51单片机学习笔记13-AT24C02(I2C)
主机在发起起始信号 + 发送从机地址后,切换为接收模式,通过 SDA 引脚逐位读取8 位二进制数据,配合 SCL 时钟的高低电平完成数据接收,固定先收最高位 (bit7),最后收最低位 (bit0),无任何例外。① 置 SDA = 1 (释放数据线,主机改为输入模式,由从机控制SDA电平)② 置 SCL = 1 (拉高时钟,主机在此时采样SDA电平,读取当前位)① 置 SDA = 1 (释放数据线,主机转为输入,由从机控制SDA电平)④ 置 SCL = 1 (拉高时钟,从机采样SDA电平,读取应答位)
2026-01-27 11:00:14
1156
原创 51单片机学习笔记12-蜂鸣器
51 单片机的 IO 口的输出电流很小(约 10mA),而蜂鸣器的工作电流需要 20~30mA,如果直接把蜂鸣器接在单片机 IO 口和 GND 之间,IO 口的电流不足以驱动蜂鸣器,会出现「蜂鸣器不响 / 声音极小」的问题。✅ 解决方案:常用 NPN 三极管做电流放大(最常用:S8050 三极管),单片机 IO 口控制三极管的导通 / 截止,三极管再给蜂鸣器提供足够的工作电流。✨ 接线说明:限流电阻(1kΩ)必须加,作用是保护单片机 IO 口,防止三极管导通时,大电流倒灌烧毁 IO 口;
2026-01-27 10:59:53
442
原创 51单片机学习笔记11-DS1302实时时钟(RTC)
比如:你想设置分钟为 12,直接写入十进制 12,DS1302 会识别为 BCD 码 0x12,显示的分钟是「18」,直接错了!例:BCD 码 0x28 → 十进制 = (28/16)*10 + 28%16 = 210+8 = 28。例:十进制 23 → BCD 码 = (23/10)16 + 23%10 = 216+3 = 0x23。,专为 51 单片机设计,性价比极高,是 51 单片机做电子钟 / 万年历的标配芯片。❗ 致命坑点:如果读写 DS1302 时,不做 BCD 码转换,时间会完全错误!
2026-01-27 10:59:23
793
原创 51单片机学习笔记9-串口UART
串口传输一个字节的数据,遵循固定的帧格式,默认使用:1 位起始位 + 8 位数据位 + 1 位停止位,无校验位;,适合需要同时处理多个任务的场景(比如串口接收 + LED 显示 + 按键扫描),是实际开发的首选方式。一个字节(8 位)的串口数据,实际传输需要 10 位,这是串口的基础,波特率计算也基于此。串口波特率的精准度,取决于定时器 1 的配置,这是串口通信的核心关联点。(唯一的串口专属中断),串口的「发送完成、接收完成」都会触发串口中断,中断号为 4;的数值,发送完成后数值自增 1,循环往复;
2026-01-26 09:03:18
765
原创 51单片机学习笔记8-定时器
基于定时器0中断实现精准的24小时制电子钟,初始化时间为23:59:56,LCD1602显示时钟标题和实时时分秒,定时器1ms中断累计实现秒进位,分、时逐级进位且满24小时自动归0。即可完成,无其他多余配置,这是定时器编程的核心,所有代码都围绕这两个寄存器编写,必须熟记!即可完成所有功能,全部支持位寻址,可单独操作某一位,编程极其灵活,✔ 0 = 关闭定时器 0 ✔ 1 = 启动定时器 0。✔ 0 = 定时器模式(内部晶振脉冲,定时功能)✔ 1 = 计数器模式(外部引脚脉冲,计数功能)
2026-01-26 09:02:52
921
原创 51单片机学习笔记7-矩阵键盘
单片机初始化 LCD1602 并显示密码提示文字,循环扫描矩阵键盘实现最多 4 位数字密码输入,按下确认键校验密码(正确密码 1234),正确显示 OK、错误显示 ERR,按下取消键清空密码,全程密码在 LCD 上可视化显示。每次置行后,检测所有列线的电平状态,根据列线的电平变化判断是否有按键按下、以及具体是哪个按键。原理:行线为低,按键按下→行列导通→列线被行线拉低,列线电平从高变低。,所有行线置低电平,检测列线,记录电平变低的。,所有列线置低电平,检测行线,记录电平变低的。先扫行、再扫列,两次反转。
2026-01-26 09:02:25
730
原创 51单片机学习笔记6-LCD1602液晶显示屏
✔ 核心:写数据和写指令的唯一区别,仅为 RS 引脚电平不同(数据 = 1,指令 = 0)✔ 核心:4 位模式仅用 D4-D7,所有指令必须拆分高低 4 位分两次发送。两种连接方式,4 位模式更常用(节省 IO 口)。例:显示到第二行第 5 列 → 指令码 =LCD1602 的所有操作都需通过。逐个发送字符对应的 ASCII 码。显示开关控制指令(0x0C)输入模式设置指令(0x06)显示开关控制指令 0x0C。输入模式设置指令 0x06。LCD1602 的核心是。功能设置指令(0x38)
2026-01-26 09:02:00
694
原创 51单片机学习笔记5-模块化编程
✅ 传统编程:所有代码(主函数、功能函数、变量定义)全部堆砌在 main.c 一个文件中,代码量一多就杂乱无章,可读性、维护性极差;✅ 模块化编程:功能拆分、分文件存放 —— 把 LED、按键、延时、串口等不同功能的代码,分别放到独立的 .c 文件中,通过 .h 头文件做声明,在 main.c 中只需 #include "xxx.h" 引入即可调用,完美解决了传统编程的痛点,
2026-01-23 10:26:50
287
1
原创 51单片机学习笔记4-数码管
原理:显示第1位→显示第2位→显示第3位→......,然后快速循环这个过程,最终实现所有数码管同时显示的效果。程序上电后,数码管123位循环显示数字 123。,其余 1-6、8 位数码管全部熄灭。仅点亮第 7 位数码管。
2026-01-23 10:21:04
357
原创 51单片机学习笔记3-独立按键
检测到按键按下(P3_1=0) → 第一步延时20ms → 松手检测 → 第二步延时。按下按键1,LED点亮;松开按键1,LED熄灭。8 个 LED 灯会逐次多点亮 1 个。:未外接电路时,I/O 口默认为。按一次按键1,LED 状态切换一次。二进制位向左移动指定的位数。51 单片机引脚电平规则。,低位补 0,高位舍弃。,按键按下接地则变为。
2026-01-23 10:11:39
386
原创 51单片机学习笔记1-基础知识碎碎念
单片机工作原理 :单片机通过配置寄存器来控制内部线路的连接,不同内部连接形成不同的电路,不同的电路完成不同的功能。单片机的作用 :信息采集(依靠传感器)、处理(依靠CPU)和硬件设备(例如电机,LED等)的控制。MCU :单片机简称MCU,内部集成CPU、RAM、ROM、定时器、中断系统、通讯接口等。RAM :随机存取存储器,相当于电脑的内存条,掉电数据易丢失。ROM :只读存储器,相当于电脑的硬盘。
2026-01-23 10:03:34
170
原创 1.4 定点数和浮点数
(1)定点数定点数是指小数点位置固定不变的数。在计算机中,定点数通常有两种表示形式:定点整数(纯整数):小数点固定在最低有效数值位之后;定点小数(纯小数):小数点固定在最高有效数值位之前。当机器字长为n时,定点数的补码和移码可表示2ⁿ个数,而原码和反码只能表示2ⁿ-1个数(因为0占用了两个编码)。因此,定点数的数值表示范围较小,运算中容易因结果超出范围而溢出。
2026-01-06 08:51:59
973
原创 1.2 进位计数制及转换
十进制 0.25 → 0.25×2=0.5 取 0→0.5×2=1.0 取 1 → 顺序得 01 → 完整二进制 1010.01。十进制 10 → 整数除 2:10→5 余 0→2 余 1→1 余 0→0 余 1 → 逆序得 1010(整数部分);二进制 110101 → 0011 0101(分组)→ 35(十六进制)二进制 10110 → 010 110(分组)→ 26(八进制)方法 1:十进制→二进制→八 / 十六进制(推荐,减少错误);八→二:1 位八进制 = 3 位二进制;
2026-01-05 16:17:36
310
原创 20-VGA控制器
定义:VGA即视频图形陈列,具有高分辨率、显示速率快、颜色丰富等特点,VGA接口广泛应用于CRT和LCD液晶显示设备,具有广泛的应用范围////////CLK_33M,Reset_n,Data_in,h_count, //行扫描位置v_count, //场扫描位置VGA_CLK,VGA_BLK, //行数据输出有效数据VGA_HS, //VGA行同步信号VGA_VS, //VGA场同步信号VGA_DATA //输出RGB颜色//端口定义//参数定义。
2025-12-23 08:59:45
728
原创 19-IP核-DDS数据合成器
DDS数据合成器是一种新型的频率合成技术,具有相对带宽大,频率转换时间短,分辨率高和相位连续性好等优点。较容易进行时间频率,相位以及幅度的数控调制,广泛应用于通信领域。
2025-12-23 08:59:24
409
原创 18-IP核-clock时钟管理单元
通过FPGA内部逻辑可实现时钟,但是出来的时钟信号较差时钟管理单元CMT优化时钟质量支持频率合成,通过PLL/MMCM硬件电路实现精准时钟生成与相位同步每个芯片的MMCM的硬件资源是有限的,例如xc7a35tfgg484-2,MMCN资源为5个reg rst;reg clk_in;rst = 1'b0;#201;rst = 1'b1;#20000;$stop;
2025-12-18 09:44:38
366
原创 17-IP核-FIFO先进先出
FIFO(First In First Out),也就是先进先出。FPGA或者ASIC中使用到的FIFO一般指的是对数据的存储具有先进先出特性的一个缓存器,常被用于数据的缓存或者高速异步数据的交互。reg srst;reg wr_en;reg rd_en;wire full;wire empty;wire valid;#21;//写操作,从0到255,共256个数据#1;end。
2025-12-18 09:44:11
1062
原创 16-IP核-RAM随机存取存储器
RAM(Random Access Memory,随机获取存储器,可读可写存储器)是一种临时存储器,用于存储计算机正在运行的程序和数据。它具有快速的读写速度和随机访问的特点,其读写速度由时钟频率决定。数据存储位宽16位最接近的RAM资源配置为2k*18,一共有50个RAM块,计算可得最大容量为100k*18reg clka;reg ena;reg wea;reg clkb;reg enb;ena = 0;wea = 0;addra = 0;dina = 0;
2025-12-17 09:01:54
606
原创 14-基于SPI的DAC芯片驱动
Digital-to-Analog Converter,数字模拟转换器。是指将离散的数字信号转换为连续变量的模拟信号的器件,这些模拟信号通常以电流、电压或电荷的形式输出。常见的数字模拟转换器通常用来将一定比例电压值的数字信号转换为模拟信号。
2025-12-16 08:54:04
408
原创 12-74HC595驱动数码管
FPGA的IO直接驱动数码管需要16个引脚资源,为了节约FPGA管脚资源,介绍另外一种数码驱动方式,如下图所示:通过74HC595芯片,将16位控制信号转换为三根信号线,驱动数码管,这种并转串方式直接节约13个FPGA管脚资源,但需要额外芯片和并转串逻辑资源一、74HC595芯片简介74HC595芯片是八位串行移位寄存器,用于将串行数据转换为并行数据以四位移位寄存器为例:四个D触发器串联,每个clk时钟上升沿,数据逐位存储并输出经过一个时钟周期,DFF0存储值为1;
2025-12-15 09:13:52
452
原创 9-亚稳态原理危害及解决方法
在D触发器中,数据在时钟上升沿前Tsu时间和上升沿之后的Th时间内发生变化导致输出不能快速稳定(由于元器件本身所决定),最终稳定下来的状态是随机的,有可能是0,有可能是1。信号的发送方和信号的接收方不是由同一个时钟信号驱动的,输入信号发生变化的时刻是未知的,有一定概率在D触发器数据窗口发生变化。D端口的数据在时钟上升沿前Tsu时间和上升沿之后的Th时间内必须保持稳定。在时钟信号的上升沿时刻,D触发器将D端口的数据存储并输出在Q端口。亚稳态可以在D触发器之间传播,影响其他逻辑对信号值的判断,导致结果错乱。
2025-12-12 08:49:37
245
原创 7-串口通信-发送
设计一个串口发送模块,发送用户输入的数据给电脑,要求:波特率为9600,8位数据位,1位停止位,无效验位,无流控功能,每1s发送一次当前8位拨码开关的值,每次发送完成后将LED的状态翻转。思路:设计一个1s计数器,不断计数,当计数到1s时,让串口发送一次数据思路:防止发送数据过程中8位拨码开关的值被改变,导致发送错误,使用8位D触发器进行数据缓存封装一个通用串口发送模块实例化调用封装好的串口模块。
2025-12-11 08:52:59
651
原创 6-从计数器到可控线性序列机
让LED灯按照亮0.25秒,灭0.75秒的状态循环亮灭让LED灯按照亮0.25秒,灭0.5秒,亮0.75秒,灭1秒的状态循环亮灭让LED灯按照指定的亮灭模式亮灭,亮灭模式未知,由用户随机指定。以0.25秒为一个变化周期,8个变化状态为一个循环。让LED灯按照指定的亮灭模式亮灭,亮灭模式未知,由用户随机指定。8个变化状态为 一个循环,每个变化状态的时间值可以根据不同的应用场景选择。让多个LED灯按照设置的模式各自在一个变化循环内独立亮灭变化。
2025-12-10 12:57:44
400
原创 5-跑马灯(不同频率循环点亮)
8个Led灯分别以不同频率循环闪烁,led[0]0.1ms亮一次;led[1]0.2ms亮一次;led[2]0.3ms亮一次依次类推2 、代码编写2.1 设计文件。
2025-12-10 12:57:23
387
原创 3-计数器-LED闪烁
设计一个计数器,使开发板上的 LED 状态每 500ms 翻转一次。开发板的时钟频率为50MHz,在 50MHz 的时钟频率下,计算到 500ms 需要的计数值步骤如下:时钟周期。
2025-12-09 08:50:58
227
原创 2-三八译码器
译码器(Decoder)是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等),功能与编码器相反。译码器一般分为通用译码器和数字显示译码器两大类。本设计的是通用译码器。三八译码器,即是 3 种输入状态翻译成 8 种输出状态。在always块内被赋值的信号,都要声明为reg类型。
2025-12-08 14:03:40
257
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅