
51单片机
ICipher_
华电 智科大二在读 有空给学弟学妹们更新资料
展开
-
2024/5/21 PID算法基础理论
补充:实际情况中,如果Kd过大,会产生一种高频率小幅度的震荡,就像在抽搐一样。拿无人机来说,空气对它的轻微扰动,或者系统自身的一点抖动等影响,都会引起d算法的强烈响应,从而产生这种高频率小幅度震荡,这是需要避免的。:只要存在误差,不管误差多小,I输出也会越来越大。I的作用是消除稳态误差,当系统误差接近于0,P的输出会很小,不能继续减小误差,使得误差始终不能减小到0.此时使用I算法让误差值不断累加,并输出累加值。假如系统误差大或者P参数较大,那么P的输出会很大,出现过冲现象。:误差越大,P输出也越大。原创 2024-05-21 23:31:40 · 279 阅读 · 0 评论 -
2024/4/25 红外遥控代码
这块如果IR听不懂可以看看那个状态机的相关视频。原创 2024-04-25 22:55:21 · 353 阅读 · 0 评论 -
2024/4/21 红外遥控器
红外遥控是利用红外光进行通信的设备,由红外LED将调制后的信号发出,由专用的红外接收头进行解调输出。发送低电平:红外LED以38KHz频率闪烁发光,接收头输出低电平。因为波形的上升沿下降沿变化很快,需要外部中断进行中断处理。发送高电平:红外LED不亮,接收头输出高电平。空闲状态:红外LED不亮,接收头输出高电平。(可以直接滤掉不需要的波,输出需要的波)STC89C52有4个外部中断。红外LED波长:940nm。通信协议标准:NEC标准。下降沿触发和低电平触发。通信方式:单工,异步。原创 2024-04-21 20:34:05 · 207 阅读 · 0 评论 -
2024/4/15 AD/DA
AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号AD/DA转换打开了计算机与模拟信号的大门,极大的提高了计算机系统的应用范围,也为模拟信号数字化处理提供了可能AD转换通常有多个输入通道,用多路选择开关连接至AD转换器,以实现AD多路复用的目的,提高硬件利用率AD/DA与单片机数据传送可使用并口(速度快、原理简单),也可使用串口(接线少、使用方便)原创 2024-04-15 00:19:40 · 560 阅读 · 0 评论 -
2024/4/11 直流电机调速/PWM
直流电机是一种将电能转换为机械能的装置。原创 2024-04-14 00:27:04 · 1262 阅读 · 0 评论 -
2024/4/11 LCD1602
发送指令0x80|AC //设置光标位置(首位为1,表示设置光标,后面是地址)发送指令0x06 //数据读写操作后,光标自动加一,画面不动。发送指令0x38 //八位数据接口,两行显示,5*7点阵。发送指令0x0C //显示开,光标关,闪烁关。发送数据 //发送要显示的字符数据。发送数据 //发送要显示的字符数据。CGRAM+CGROM(字模库)发送指令0x01 //清屏。写数据or指令的时序结构。原创 2024-04-11 20:56:11 · 256 阅读 · 0 评论 -
2024/4/9 DS18B20温度报警器
【代码】2024/4/9 DS18B20温度报警器。原创 2024-04-09 20:13:49 · 160 阅读 · 0 评论 -
2024/4/6 DS18B20温度传感器
DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器,具有功能强大、硬件简单、易扩展、抗干扰性强等特点测温范围:-55°C 到 +125°C通信接口:1-Wire(单总线)其它特征:可形成总线结构、内置温度报警功能、可寄生供电64-BIT ROM:作为器件地址,用于总线通信的寻址SCRATCHPAD(暂存器):用于总线的数据交互EEPROM:用于保存温度触发阈值和配置参数一根通信线:DQ,Q是queue的缩写,DQ表示数据队列。原创 2024-04-07 13:09:05 · 605 阅读 · 0 评论 -
2024/4/5 AT24C02数据存储+ 秒表(定时器扫描按键数码管)
话不多说,先上代码,讲解在后面。原创 2024-04-05 22:17:11 · 798 阅读 · 1 评论 -
2024/4/5 AT24C02 总线(I²C总线)
将数据位依次放到SDA线上(高位在前),然后拉高SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA,也就是置1)在下面每个设备引出的两条线都设一个开关,开漏输出模式输出1意思就是开关全部断开,也就是电阻无限大,又称高阻态,毫无驱动能力。接收应答:在发送完一个字节之后,主机在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)原创 2024-04-05 16:23:29 · 775 阅读 · 1 评论 -
2024/3/31 蜂鸣器(2)
【代码】2024/3/31 蜂鸣器(2)原创 2024-03-31 20:28:41 · 157 阅读 · 0 评论 -
2024/3/31 蜂鸣器(1)
不同的音符代表不同的长度。例如四分音符500ms,二分音符1s,全分2s。白键音高对应简谱行的12345678(升高一个八度在上方加一个点,下降一个在下方加一个点),而黑键需要升音和降音符(#,b),例如#1就是1(do)升高半音。高阻态是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样。NPN:相当于用电阻那路的较为微弱的信号,让VCC那路能与GND连通。给R1那路高电平,VCC(实际的驱动)与GND连通。原创 2024-03-31 12:32:08 · 338 阅读 · 0 评论 -
2024/3/30 DS1302可调时钟
【代码】2024/3/30 DS1302可调时钟。原创 2024-03-30 12:09:40 · 164 阅读 · 0 评论 -
2024/3/28 DS1302实时时钟
SCLK上升沿数据进入时钟芯片,下降沿数据进入单片机。前8位告诉单片机你是要读出还是写入,然后地址A0-A4就是告诉你要读/写的是哪块儿的数据。RTC(Real Time Clock):实时时钟,是一种集成电路,通常称为时钟芯片。会发现数字由9直接跳到16之类的。原因:BCD码(就那个一个四位一起表示一位数的)使用LCD_ShowHexNum即可解决问题。DS1302的代码,根据时序图为参照。各个模式对应的命令字(16进制)这时候的main如果是这样。原创 2024-03-28 21:06:00 · 394 阅读 · 0 评论 -
2024/3/24 LED点阵屏
74HC595是串行 寄存器 感觉就是三转八寄存器。先配置74HC595,重新进行位声明。类似矩阵键盘,逐行or逐列扫描。原创 2024-03-24 16:28:13 · 272 阅读 · 0 评论 -
2024/3/14 定时器时钟
感觉和之前自己写的那个差不太多,只是用了定时器。贴一下代码.原创 2024-03-14 19:10:03 · 426 阅读 · 0 评论 -
2023/11/23 定时器 独立按键控制LED流水灯
(1)用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作(2)替代长时间的Delay,提高CPU的运行效率和处理速度(…)(相当于cpu可以在原本delay的时候同时进行其他任务)发出脉冲,进行计数,当计数值达到时,产生一个TF0(T0溢出中断标志),让产生中断,执行定时任务。时钟,即晶振周期;引脚,从外界接受脉冲:使CPU具有对外界紧急事件的实时处理能力而设置,要求CPU正在处理某件事发生紧急事件请求后,去转而处理这个事件,处理完后再回去继续处理原来的工作。原创 2023-11-23 16:52:35 · 457 阅读 · 0 评论 -
2023/11/21 矩阵键盘密码锁
上面的代码是用来读取键盘上输入的按键状态数据。矩阵扫描先分列,再扫描每列每个按键状态。输入到一半,按s12取消。后续的代码用来判断数据。原创 2023-11-21 13:46:29 · 85 阅读 · 1 评论 -
2023/11/19 LCD1602调试工具+倒计时
其实感觉这串代码有的地方逻辑还不是很通畅(挠头),但是结果显示很不错(也不知道咋回事)。算了,效果好就是真的好(使用上面的LCD函数时必须在项目文件夹下添加LCD1602.h/LCD1602.c,比如。突然想到了可以做一个倒计时(C4的灵感(雾))然后看了老师写的代码。原创 2023-11-19 23:06:29 · 307 阅读 · 1 评论 -
2023/11/18 模块化编程
(#ifndef,#if,#else,#elif,#endef)首先创建例如Delay.c一样的源文件,里面写上所需的代码。然后创建对应的头文件,格式为。最后在主函数(用的到这个函数的地方开头写上例如。#endif(如果定义了AAA才进行编译)原创 2023-11-18 18:37:47 · 56 阅读 · 1 评论 -
2023/11/16 动态数码管显示
显示会有位选 段选 位选 段选....由于单片机速度很快,这样就会导致上一位的数据串位到下一位数据。先Delay1ms(不然数码管会变暗)原创 2023-11-16 09:20:06 · 98 阅读 · 1 评论 -
2023/11/15 静态数码管显示
也就是DIG1那玩意,由于二极管的作用,只要流向和电势差存在,能够单向导电,那么那一位就会亮起。比如最上面的如果接1101,那么由于1代表高电势,而二极管的电流方向是向上的,那么就使那一位不会亮起。1.使用子函数来控制位选,这样我们只需要输入想要让其亮起的数字位置,就可以实现,简化代码结构。而这两样就决定了,由于共用引脚的存在,不可能使其在同一时刻显示多个不同的数字,但是,给我个人的感觉就是,它接受一个较为微弱的信号,然后他自己能够控制信号并在自己的电源上输出电流,增强驱动。期待明天能学到怎么解决。原创 2023-11-15 18:09:10 · 149 阅读 · 0 评论 -
2023/11/14 51单片机 独立按键显示二进制
版权声明:本文为优快云博主「unique_pursuit」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。由于P2默认为1111 1111,P2++直接变为0000 0000,再++就变成0000 0001。默认全上高电频1111 1111,若再加1变为0000 0000,取反变1111 1111,陷入循环。定义一个新的变量lednum,让它初始默认为0,即可解决问题。这样就导致和我们想象中的效果正好相反:该亮的不亮,不该亮的亮。二进制常与位运算相关。原创 2023-11-14 16:45:05 · 102 阅读 · 1 评论 -
2023/11/14 51单片机 独立按键控制led状态
【代码】2023/11/14 51单片机 独立按键控制led状态。原创 2023-11-14 15:40:33 · 65 阅读 · 0 评论 -
2023/11/14 51单片机 流水灯
【代码】2023/11/14 51单片机 流水灯。原创 2023-11-14 15:24:02 · 65 阅读 · 0 评论 -
2023/11/14 51单片机 闪烁led
首先就是学会如何使用STC-ISP的延时计算器生成代码(记得要调成Y5!其次就是添加#include其余的倒是应该没什么了...就这样吧。原创 2023-11-14 15:14:25 · 62 阅读 · 0 评论 -
2023/11/14 51单片机 点亮第一颗led
P2是指led模块全体。一开始默认均为1111 1111,1代表高电压,而如果想让电流流通必须一端高一端低,那么我们指定第一盏灯亮,就让P2整体为1111 1110,转换成十六进制也就是0xFE。这里贴一张常用的进制转换图。原创 2023-11-14 15:01:58 · 63 阅读 · 0 评论