51单片机学习指南
文章平均质量分 51
在本专栏,我会分享我学习51单片机时总结的核心知识点和代码,供大家参考学习
爱写代码的倒霉蛋
致力于分享agent学习,后端学习知识
正在不断学习成为更好的个人创作者
积极学习,多多分享
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C51:使用PWM波调节LED灯的亮度
脉冲宽度调制):是一种通过调整信号的脉冲宽度来控制电力输出的技术。在一个PWM信号周期内,信号会在高电平和低电平之间切换,通过改变高电平持续的时间(即脉冲宽度),可以模拟出不同的电压水平。例如一个PWM波,周期为10ms,高点平的时间为4ms,那么它的占空比就是40%在该程序中LED的亮度是普通亮度的一半。就是高电平所占整个周期的时间。原创 2025-07-28 20:22:37 · 497 阅读 · 0 评论 -
C51:使用NE555方波发生器测量频率
3.注意,这里频率变量应该定义为unsigned int类型,因为频率的取值范围超出了unsigned char(0~255)的最大范围。如果使用unsigned char类型也会出现频率读取错误的情况。1.TH0储存了频率值的高8位数据,TL0储存的是低8位数据,所以在计算频率的时候需要先将TH0左移8位,再使用 | 运算符。NE555的配置模式主要为单稳态模式:若被测信号是随机脉冲,NE555可输出固定频率的方波。2.在得到频率值之后,需要将之前的计数(TH0,TL0)清零,才能进行下一次的测量。原创 2025-07-28 20:00:22 · 462 阅读 · 0 评论 -
C51:用DS1302时钟读取和设置时间
因为在ds1302.c文件中包含了写ds1302(51向ds1302写数据)和读ds1302(51从ds1302读数据)的两个函数,我们根据文件中提供的函数来写读取时间和设置时间的函数即可。:当WP位(寄存器的第七位)为1时,写保护功能开启,禁止对任何寄存器进行写操作,防止误改寄存器中的时间,日期或者其他数据。如果要对时钟进行写操作,需要将WP位设置为0,关闭写保护功能。用处:1.我们在读取时间的时候,因为Read_DS1302_Byte()函数返回的是BCD码,所以在读取时需要转换为十进制。原创 2025-07-25 22:56:40 · 475 阅读 · 0 评论 -
C51:使用PCF8591读取ADC,写DAC
通过PCF8591芯片,可以读取旋转电位器和光敏电阻的电压值 ,如图的左边第一部分,就是光敏电阻的电路图,第二部分就是旋转电位器的电路原理图。链接: https://pan.baidu.com/s/1oQTP0uyjfqiRZ4PnahcX-A?注意:这个函数与ADC_Read_process()函数不同,传入函数的参数的取值范围为(0~255),转换为电压值就是(0~5.00)因为ADC_Read_process()函数返回的是。那么本应该读取旋转电位器的AD值时读到的确实光敏电阻的AD值,原创 2025-07-25 09:00:00 · 1041 阅读 · 0 评论 -
DS18B20扩展:在数码管上显示温度时包含小数部分
上一篇博客的例子中,讲解了用DS18B20读取温度时保留整数部分,现在讲解一下,如何保留小数部分,并在数码管上显示出来。2.因为在读取温度时将温度*10,所以在计算的时候需要 /100,才能得到温度的十位数字,后面的数字同理。1.要让数码管某位显示小数,在smg_code[位数]后面 |0x80即可。大家可以参考一下我之前讲的数码管那一篇博文。修改后的代码如下:(以保留一位小数为例)原创 2025-07-24 21:56:20 · 544 阅读 · 0 评论 -
C51:用DS18B20传感器读取温度
在onewire.c文件中,已经包含了init_DS18B20(DS18B20设备初始化),Write_DS18B20(向DS18B20写一个字节)和,Read_DS18B20(从DS18B20读取一个字节)函数了,我们要做的就是根据这些函数,编写一个读取温度的函数。读取温度函数原型如下,注意:需要把Read_Temperature()函数放在onewire.c文件中。工作原理:51单片机是通过DS18B20温度传感器,并且基于onewire协议来读取温度数据的。原创 2025-07-24 18:08:00 · 438 阅读 · 0 评论 -
C51:矩阵键盘(三行按键法)
例如 :S7按下,那么P30,P44为0,其他的位都是1,所以P44_P42_P35_P34_P33_P32_P31_P30为0111 1110,也可以表示为0x7f,其它的按键同理。那么分别进行行扫描和列扫描,在进行行扫描的时候对key_io赋值,列扫描的时候进行 | 操作,就可以得到最后的字节数据,并返回该值。首先要进行和列扫描,读取键值,原理与上一篇博客的状态机法相同,先给高四位赋值为0,再给低四位赋值为0,来判断按键所在的行和列。在执行操作函数里我们是通过Trg的值来判断按下的是哪一个键。原创 2025-07-23 09:00:00 · 439 阅读 · 0 评论 -
C51:矩阵键盘(状态机法)
最后,用状态机法写矩阵键盘还是有点繁琐的。同样的,三行按键法也可以用来写矩阵键盘,只需要三行,可以大大减少代码量。与独立按键同理,KBD_Read_State()函数也需要放在。2.矩阵键盘(状态机法)原创 2025-07-21 22:49:19 · 821 阅读 · 0 评论 -
C51:独立按键(三行按键法)
上一篇博客介绍了状态机法,但是程序代码量巨大,不便于记忆,接下来给大家介绍三行按键法,不仅方便记忆,还可以在考场上领先别人一大步。以下是三行按键法的读取函数,这个函数理解起来比较复杂,大家也没有必要硬要理解,能把代码背下来就好了。注意:vBTN_ThreeLine_Process()函数需要放到while(1)循环里执行。解释:把cnt_key放在定时器中,每过1ms加一,每10ms读取一次键值。定义一个count变量,根据按下的键值可以对count的值进行加减操作。原创 2025-07-21 09:00:00 · 352 阅读 · 0 评论 -
C51:独立按键(状态机法)
程序案例:(每隔10ms读取一次键值,并把读到的键值赋值给key_val,可以利用读到的键值进行各种操作)状态机法比较好理解,但是程序过于冗杂,不便于记忆。,顾名思义,就是只需要写三行程序,解放双手,简单又便于记忆。原创 2025-07-20 21:06:13 · 313 阅读 · 0 评论 -
C51:数码管的动态显示
由于数码管需要循环显示1-8位,所以需要编写一个数码管显示程序,并放在中断函数里。STC-ISP软件程序中的数码表包含了0-9的数字和大部分字母的大小写,非常方便。来对这两个口进行控制,方便后续的使用。STC-ISP->右上角的范例程序 ->如图红色荧光笔标注选项->向下查找即可。1.P0输出数据(期望显示的数字/英文),选通Y7C段选,关闭锁存器。2.P0输出数据(期望点亮的位),选通Y6C位选,关闭锁存器。为了更方便的去控制P0口和P2口,我们可以创建一个单独的函数。原创 2025-07-20 20:21:47 · 576 阅读 · 0 评论 -
定时器与中断
当中央处理机 CPU 正在处理某件事的时候外界发生了紧急事件请求,要求 CPU 暂停当前的工作,转而去处理紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为。微型机的中断系统一般允许多个中断源,当几个中断源同时向 CPU 请求中断,要求为它服务的时候,这就存在。哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,注意:每个函数都有自己的中断优先级,CPU优先处理优先级高的中断函数。实现这种功能的部件称为中断系统,请示 CPU 中断的请求源称为。原创 2025-07-08 22:34:33 · 467 阅读 · 0 评论 -
C51:LED的控制
虽然一般板子上是 L1-L8排列的,但是给P0赋值时从P07-P00赋值的,所以考虑点亮LED时,按L8-L1来思考。当然,这上面只是一个非常简单的程序范例,你可以根据LED的控制原理,写一下LED流水灯等一些其它的简单程序。原创 2025-06-29 20:21:18 · 189 阅读 · 0 评论 -
C51:蜂鸣器和继电器
看左图的最右边,荧光笔标注部分,从上往下看(从0开始数),delay(继电器)在第四位,buzz(蜂鸣器)在第六位,所以通过对P0口第四位和第六位赋值0或1就可以控制继电器和蜂鸣器的开关。2.打开锁存器,这个时候需要给P2口赋值,我们需要让Y5C打开,如图右半部分所示,那么P27=1,P26=0,P25=1,对P2字节赋值,P2=0xa0。P0输出——>打开锁存器(P27 P26 P25输出控制)——>关闭锁存器(让控制外设的数据稳定)1.其实是因为板子上外设多,有LED,数码管,蜂鸣器,继电器等,原创 2025-06-29 19:56:34 · 414 阅读 · 0 评论 -
C51:Delay软件延时
事实上,我们不需要亲自写这些延时函数,我们只需要会用stc-isp这个软件,它会自动帮我们生成延时函数,我们只需要复制粘贴就好了。1.打开stc-isp软件,在右上方找到软件延时计算器(红色圆圈圈出来的部分)Delay软件延时是让单片机”原地等待一段时间“后,进行接下来的操作。【注意】也就是说,在等待期间,单片机不能做任何事情,除非碰到。短时间的软件延时可用,一般10ms以内,长时间的就会降低效率。它可以让单片机等待固定的时间,但是它有个致命的缺点,就是。长时间的延时,推荐使用定时器做任务分配。原创 2025-06-29 09:00:00 · 802 阅读 · 1 评论
分享