
51单片机
51单片机
闪烁shimmer
学无止境!
展开
-
为什么我的keil5写中文的时候是问号?
按照如图设置即可。按照如图设置即可。按照如图设置即可。按照如图设置即可。原创 2022-03-22 14:48:10 · 5952 阅读 · 1 评论 -
User\main.c(13): error: #165: too few arguments in function call
这个问题就是说函数缺少形参,加上就行了。原创 2022-03-22 22:56:48 · 7630 阅读 · 0 评论 -
User\main.c(2): error: #5: cannot open source input file “fmq.h“: No such file or directory
出现这种问题是因为添加的头文件,也就是.h所在的文件没有添加进来按照图示操作即可按照图示操作即可按照图示操作即可原创 2022-03-22 17:31:13 · 7044 阅读 · 0 评论 -
基于51单片机实现红外循迹
红外循迹外观:红外循迹原理:红外循迹模块原理还是很简单的,和许多光电传感器原理一样,当发射器发射出去的光被接收器接收到后,模块上对应的LED灯点亮,此时相应的输出引脚输出低电平;如果发射器发射的光没有被接收器接收到的话,那么LED灯不点亮,此时相应的输出引脚输出高电平。PWM调速:这里必须要有PWM来控制小车的速度,不然的话太快容易脱离轨道,具体多少速度还是需要看硬件和软件的配合,需要多次实验试错。PWM可以参考我前面写的关于舵机的代码,原理是一样的,只需要加些变量即...原创 2021-11-01 22:09:45 · 11580 阅读 · 4 评论 -
用51单片机让LED闪烁——学习I/O的使用
写此文章目的:方便我的复习,和你的参考。1.LED发光原理LED 即发光二极管。它具有单向导电性,通过 5mA 左右电流即可发光,电流 越大,其亮度越强,但若电流过大, 会烧毁二极管,一般我们控制在 3 mA-20mA 之间,通常我们会在 LED 管脚上串联一个电阻,目的就是为了限制通过发光二极 管的电流不要太大,因此这些电阻又可以称为“限流电阻”。当发光二极管发光 时,测量它两端电压约为 1.7V,这个电压又叫做发光二极管的“导通压降”。 下图左右分别为直插式发光二极管和贴片式发光二极管实物图。原创 2021-08-19 15:18:50 · 1502 阅读 · 0 评论 -
关于AT24c02(EEPROM)芯片如何使用
用法:AT24C02 器件地址为 7 位,高 4 位固定为 1010,低 3 位由 A0/A1/A2 信号线的电平决定。因为传输地址或数据是以字节为单位传送的,当传送地址时,器件地址占 7 位,还有最后一位(最低位 R/W)用来选择读写方向,它与地址无关。原创 2023-02-17 23:25:33 · 748 阅读 · 0 评论 -
关于IIC通讯协议的有关问题
当SCL为1的时候,SDA从0变成1,这个就是终止信号,说明传输停止。当传输完一个字节的数据的时候,如果还需要继续继续传输数据,那么从机需要给主机发送对应的信号,当还要继续传输的时候,SDA从1变成0;注意:当SCL为0的时候,SDA状态可以变,用于传输数据,SCL为1的时候,SDA状态不能变,只能读。另外:应答的时候,SDA=0,SCL需要等于1,非应答的时候,SDA=1,SCL也需要等于1。一般而言,从机的设备地址为七位,剩下的一位表示读写,0表示写,1表示读.这样接即可,需要接上拉电阻。原创 2023-02-17 22:45:50 · 3174 阅读 · 2 评论 -
关于51单片机串口中断UART的问题
从图中我们可以看出,我们需要配置ES=1,EA=1,从第二个图可以看出,我们需要定时器1,这里我们用定时器1的工作方式2,8位自动重装,此外SBUF是一个串行数据缓存寄存器,用于串口中断的发送数据和接收数据。我们选择串行工作方式1,可以自己设置波特率,十位串行输入,另外通过设置SMOD实现倍频。就是说,例如9600,那么9600=方式1的波特率,根据上面的公式求得TH1即可。当然REN也要置1,作用是允许接收。原创 2023-02-16 23:59:42 · 1491 阅读 · 0 评论 -
关于51定时器T0和T1的使用问题
这里是定时器模式,计数器模式尝试多次,我暂时还不知道如何使用,知道的也可以私我。从图中看,配置ET,EA,TR,还有设置初始值就可以了,这里取十六进制。直接看M0M1即可,操作比较简单。原创 2023-02-16 13:45:39 · 2900 阅读 · 2 评论 -
关于CPU时序的有关问题
什么是时钟周期,状态周期,机器周期,指令周期?为单片机提供定时信号的振荡源的周期,例如1Mhz,1Mhz=1,000Khz=1,000,000hz,也就是一秒钟振荡一百万次。原创 2023-02-16 10:40:42 · 862 阅读 · 0 评论 -
关于51单片机的外部中断INT0和INT1
直接看第一个INT0,这就是外部中断0,从左往右,一共需要配置三个地方,分别是IT0,这里可以填写0/1,区别就是触发方式的差异,0的时候是低电平触发,1的时候是下降沿触发;再次是EX0要置1,这是中断允许控制位,,最后是IE0,也要置1,是CPU中断允许,也称之为总允许位。到此外部中断0就配置完成,外部中断1和外部中断0同理。注意:外部中断0和1,有两个区别,一个是中断号,分别是0和2,其次就是IT0和IT1名字的区别。原创 2023-02-16 10:22:37 · 11624 阅读 · 3 评论 -
关于74HC595芯片的用法
想要用它必备条件是GND、VCC、OE口接GND,然后将需要传输的数据送入DS口,此时SHCP要给一个上升沿,因为只能串行输入,所以必须一位一位的输入,一位一位的移动,循环执行八次,为一字节,输出的时候,STCP口给一个上升沿,Q0-Q7口便并行输出8位。一行一行看,Q0-Q7,并行输出,这个就是输出口,GND不用说,Q7是串行输出,MR复位不用管它,SHCP移位寄存器时钟,STCP存储寄存器时钟,OE输出低电平有效,DS串行输入,VCC。原创 2023-02-15 22:08:27 · 769 阅读 · 0 评论 -
关于c51如何使用左移_crol_、右移_cror_函数
例如:a=a>>2 将a的二进制位右移2位,左补0 或者 左补1得看被移数是正还是负。操作数每右移一位,相当于该数除以2。,如果是左移,那么最高位就被移到最低位了,次高位变为最高位,依次类推。右移运算符(>>)将一个数的各二进制位全部右移若干位,用法:该移位函数实现的移位功能就相当于。左边超出的位数将会被清除,右边将会补零。) 将第一个操作数向左移动指定位数,正数左补0,负数左补1,右边丢弃。原创 2023-02-14 14:17:18 · 10077 阅读 · 2 评论 -
关于keil5如何将注释改成中文格式
刚开始安装的keil,写注释的时候因为写的是中文,所以会导致写不出来,写英文就不会出现。如图所示操作就可以正确输入中文。原创 2023-02-14 13:26:42 · 4421 阅读 · 0 评论 -
关于KeilC51如何安装芯片包的问题
当你出现这样的提示:*** Error: Project 'main' requires 'C51' Toolchain which is not installed.意味着你没有安装C51的芯片,这个时候需要安装。最好的办法就是下一个keil5,包含c51。原创 2023-02-14 13:22:13 · 7586 阅读 · 1 评论 -
51单片机基础之DS18B20温度传感器
外型:代码:main.c 文件#include "smg.h"#include "ds18b20.h"/******************************************************************************** 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无***********************************.原创 2022-04-20 22:48:22 · 4789 阅读 · 2 评论 -
51单片机基础之继电器
继电器:简单的说继电器就是小电流、小电压控制大电流、大电压。这就是常见的继电器,这个是一路的。工作参数:这里的控制端输入电压最少需要5V,最大24V,以及相应参数可见。接线:有两种方式,一种是常开,另一种是常闭。触发方式:有高电平触发,还有低电平触发方式。继电器上面有跳线帽,可以自己换。注意:上面说了继电器是小电流小电压控制大电压,所以就必须接两个电源,一端接的是继电器输入,另一端就是大电流大电压电源,我们需要通过控制引脚来让负载工作或者停止工作。如图:按照这个图连线..原创 2022-04-13 21:55:58 · 11419 阅读 · 2 评论 -
51单片机基础之DS1302
代码:main.c 文件/*DS1302时钟*/#include "smg.h"#include "ds1302.h"void main(){ u8 time_buf[8]; //这个数组用来存储需要现实的内容 ds1302_init();//初始化DS1302 while(1) { ds1302_read_time(); //虽然不知道这个是干嘛的,但是知道怎么改。 time_buf[0]=gsmg_code[gDS1302_TIME[2]/原创 2022-04-12 14:34:10 · 2396 阅读 · 0 评论 -
51单片机基础之DHT11温湿度传感器
接线:代码:main.c文件/*使用DHT11模块,检测温湿度,在lcd1602上面显示,因为1602显示不是每次都能出来,所以加了串口打印,会更加直观。*/#include <reg51.h>#include "lcd.h"#include <intrins.h>#include <stdio.h>sbit Temp_data=P3^6; //信号引脚unsigned int rec_dat[4];unsigned char.原创 2022-04-10 17:42:50 · 14387 阅读 · 23 评论 -
51单片机基础之串口通信
原理:这里需要解释一下,串口通信是需要占用定时器1的,所以使用了串口通信就不能使用定时器1,除非是代码优化。这个需要配置几个寄存器,都比较简单,TMOD寄存器设置定时器计数器的工作方式,SCON则是设置串口通信的工作方式,PCON则是波特率加倍操作,都是比较简单的。计时器初始值的设置有专门的工具链接:https://pan.baidu.com/s/1BSi8YCaRWtBGLaV2gslpSw提取码:1234使用方法:设置定时器工作方式,单片...原创 2022-04-10 00:00:18 · 1941 阅读 · 0 评论 -
51单片机基础之五线四相步进电机
原理:我采用单双8拍法驱动方式,发现效果很好,其次通过定时器来让步进电机速度逐步加快,当速度最大的时候,保持最快速度。接线:我这个开发板有驱动模块,直接接线即可。代码:#include <reg52.h>#include <intrins.h>unsigned char code F_Rotation[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};//正转,单双8拍法驱动...原创 2022-04-09 18:06:27 · 4865 阅读 · 12 评论 -
51单片机基础之1602显示器
代码:main.c文件#include "public.h"#include "lcd1602.h"/******************************************************************************** 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无********************************************原创 2022-04-07 23:51:55 · 2625 阅读 · 0 评论 -
51单片机基础之点阵LED8X8
原理:他这个图是由问题的,大家不要被误导,例如我显示一个箭头,按照这个原理图来,那么中间那一根直线0xff,表示高电平有效,但是按照这个图来说P0是低电平有效,所以我觉得发光二极管反一下才符合代码的意思,希望不要被误导。字模提取:软件获取:链接:https://pan.baidu.com/s/1OFAR8a2CnTg6Nle2WDmIRA提取码:1234代码:#include <reg51.h>typedef unsigned int ...原创 2022-04-07 22:43:52 · 2807 阅读 · 0 评论 -
51单片机基础之定时器中断(二)
TMOD寄存器:这里讲一下TMOD寄存器,这个寄存器可以选择开启定时器0还是1,还有可以决定定时器以什么方式工作。如图:代码:#include <reg51.h>sbit LED=P2^0;typedef unsigned char u8;typedef unsigned int u16;void time1_init(void){ TMOD|=0x10; //TMOD是一个寄存器,用来决定定时器的工作方式,高四位决定定时器1...原创 2022-04-06 14:26:00 · 1307 阅读 · 0 评论 -
51单片机基础之定时器中断(一)
TH和TL定时换算:定时器说白了倒数的,时间到了触发一次中断,那么必须设置倒数时间,TH0和TL0就是高八位和第八位假设定时1ms一次,那么2的16次方等于65536,定时1ms,就等于65536-1000=64536,再把十进制换成十六进制,如下图的例子。代码:#include <reg51.h>sbit LED=P2^0; //等下要用到,会看到LED闪烁,闪烁一次说明定时器中断触发了100次typedef unsigned char u...原创 2022-04-06 13:59:53 · 4159 阅读 · 0 评论 -
51单片机基础之矩阵键盘4X4
原理:16个键盘,通过八个引脚就可以控制,高四位控制行,低四位控制列。代码:#include <reg51.h>#define SMG P0 //宏定义数码管#define KEY P1 //宏定义矩阵键盘typedef unsigned char u8;typedef unsigned int u16;u8 sum; //定义一个全局变量,用来保存按键的值u8 SMG_Code[17]={0x3f,0x06,0x5b,0x4f,0x66.原创 2022-04-06 13:32:25 · 17442 阅读 · 3 评论 -
51单片机基础之外部中断(二)
代码:#include <reg51.h>typedef unsigned char u8;typedef unsigned int u16;sbit LED=P2^0;sbit KEY=P3^3;void delay(u16 i){ while(i--);}void EXIT1_Init(void) //外部中断初始化{ IT1=1;//跳变沿触发方式(下降沿),低电平触发 EX1=1;//打开INT0的中断允许,打开外部中断0允许 EA=1;原创 2022-04-05 23:44:22 · 948 阅读 · 0 评论 -
51单片机基础之外部中断(一)
代码:#include <reg51.h>typedef unsigned char u8;typedef unsigned int u16;sbit LED=P2^0;sbit KEY=P3^2;void delay(u16 i){ while(i--);}void EXIT0_Init(void) //外部中断初始化{ IT0=1;//跳变沿触发方式(下降沿),低电平触发 EX0=1;//打开INT...原创 2022-04-05 23:39:45 · 1783 阅读 · 0 评论 -
51单片机基础之OLED
取模软件的配置:百度网盘 获取链接:代码:main.c文件#include "reg51.h"#include "oled.h"void main(void){ unsigned int t=1; OLED_Init(); //初始化OLED OLED_Clear(); //清屏函数 while(1) { //这个函数显示中文 OLED_ShowCHinese(0,0,0);//陈 //第一个形参是列,第二个是行,原创 2022-04-05 23:06:48 · 9462 阅读 · 12 评论 -
51单片机基础之LCD1602
外观:原理:LCD1602是一种工业字符型液晶,能够同时显示16x2即32个字符。 LCD1602液晶显示原理 LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。基本接线:读状态:输入:RS=L,RW=H,E=H----输出:D0~D7=状态字写指令:输入:RS=L,RW=L,D0~D7=指令码----输...原创 2021-10-31 21:26:35 · 4504 阅读 · 1 评论 -
51单片机基础之数码管(二)
原理:因为数码管有8个,我们必须采用38译码器来节省单片机的资源,这里先简单介绍一下38译码器的原理,之后会慢慢补充常用芯片的原理和工作方法。功能:38译码器有三个信号输入端,2的3次方就是8,有八种输出情况,每种情况对应一个输出,八个数码管分别连接八个输出,三个输入就可以实现八个数码管的动态显示。真值表:代码:#include <reg52.h>#define SMG P0typedef unsigned int u16; //对系统默认数据...原创 2022-04-05 16:20:09 · 2151 阅读 · 0 评论 -
51单片机基础之数码管(一)
代码:#include <reg52.h>#define SMG P0 //宏定义数码管void main(void){ SMG=0x06; //相当于P0=0000 0110,显示数字一,这里要去了解一下数码管发光原理,说白了就是八个LED灯 while(1) { }}运行结果:数码管显示数字一...原创 2022-04-05 15:38:44 · 1416 阅读 · 0 评论 -
51单片机基础之蜂鸣器
代码:#include <reg52.h>sbit BEEP=P2^5; //定义蜂鸣器引脚void delay(unsigned int u16){ while(u16--);}void main(void){ BEEP=0; while(1) { BEEP=!BEEP; //之所以取反,高低电平切换,是因为蜂鸣器的工作需要高低脉冲。...原创 2022-04-05 15:07:18 · 6574 阅读 · 1 评论 -
基础概念之开发软件
1.常见的单片机开发软件有哪些?chen:keil iar gcckeil软件: 科普中国:Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WI...原创 2022-04-04 23:34:12 · 198 阅读 · 0 评论 -
51单片机基础之流水灯(二)
代码:#include <reg52.h>#include <intrins.h> //这个头文件里包含所需左移右移函数#define LED P2 //宏定义端口P2void delay(unsigned int u16) //不再赘述{ while(u16--);}void main(void){ unsigned int i; LED=0x7f; ...原创 2022-04-04 23:31:40 · 1638 阅读 · 0 评论 -
51单片机基础之流水灯(一)
代码:#include <reg52.h> //不再赘述#define LED P2 //宏定义P2端口,偏于直接操作void delay(unsigned int u16) //不再赘述{ while(u16--);}void main(void){ int i; //定义一个变量 while(1) { ...原创 2022-04-04 23:14:12 · 1096 阅读 · 0 评论 -
51单片机基础之GPIO输入
代码:#include <reg52.h> //引入头文件sbit KEY=P3^1; //定义一个按键sbit LED=P2^0; //定义一个LED灯void delay(unsigned int u16) //延时函数,0.6秒以内的延时{ while(u16--);}void main(void) ...原创 2022-04-04 22:38:43 · 1372 阅读 · 0 评论 -
51单片机基础之GPIO输出
代码:#include <reg52.h> //引用51单片机的头文件,包含寄存器等操作sbit LED=P2^0; //定义P2^0引脚,这属于位操作,等下用于输出高低电平,以便于点亮LED灯void delay(unsigned int u16)//unsigned是无符号类型,也就是非负数,这个函数可以实现0.6秒内的延时,本质上就是让CPU等待{ while(u16--);}void main(voi...原创 2022-04-04 22:08:29 · 1214 阅读 · 0 评论 -
基础概念之单片机的时钟周期和机器周期概念
1.什么是51单片机的时钟周期? 科普中国:时钟周期,又称为震荡周期,是为单片机提供定时信号的震荡源的周期,是单片机最基本的时间单位。谈到时钟周期就必须说晶体振荡器即即晶振,晶振可以说是单片机的心脏,它为单片机提供一个时钟频率 fosc(震荡频率)。而所谓的震荡频率(时钟频率)自然是晶振一秒钟震荡的次数。时钟频率越高,单片机运行速度越快,就如电脑的CPU什么可以加速到多少GHz一样。自然时钟周期Tosc=1/fosc.例如 震荡频率为12MHz的单片机即 fosc = 12MHz,那么...原创 2022-04-04 17:25:58 · 5674 阅读 · 0 评论 -
基础概念之程序(固件)的概念
1.什么是程序?chen:说白了你编写的代码就是程序,我们实现特定的功能,例如控制单片机输出高低电平都需要编写对应的程序。2.什么是固件?chen:固件就是相关程序编写好了之后,生成hex文件,然后下载到单片机,供单片机执行的文件。...原创 2022-04-03 14:07:59 · 1637 阅读 · 0 评论