51单片机学习日常
闲来垂钓碧溪上。这个学习周期安排了51单片机,记录一下学习日常咯(注意本文不是详细的学习笔记,只为记录一下心得体会和相关知识):
2021.9.21
首先我选用的是QX-MCS51开发板,今天下载了开发板资料,把该配的环境都配了,该安装的都安装完了,具体流程我就不介绍了
2021.9.22
一、心得:
今天遇到了1个死bug,花了我足足一小时(关于该bug的解释有误,在2021.9.24中已更新)
开发板配套学习视频中讲明的单片机型号是STC89C52,开发板配套芯片型号也是STC89C52,尴尬的是我的单片机型号却是IAP15F2K61S2。这里介绍一个解决“单片机型号选择错误”的有效方法:打开烧录软件后,直接点击“检测MCU选项”,会自动检测单片机相关参数
自动匹配成功后界面如下:
二、知识:
- 压降:
- 流水灯模块原理图(跳线帽):
- 点亮LED灯原理:
- 单片机工作的基本时序:
三、源码展示:
//点亮第一个LED灯 #include <reg52.h> //引入51头文件 sbit LED1 = P1^0; //sbit表示位定义关键字,P1^0表示串口P10 sbit LED8 = P1^7; void main() { //点亮LED1和LED8 LED1 = 0; LED8 = 0; }
2021.9.23
一、知识:
软件延时:
在需要添加延时的两个事件之间,使CPU进行一些无用的加减运算,达到延时效果。
软件延时的好处是:实现简单;坏处是:浪费CPU资源
IO口与一个字节位的对应关系:
二、源码展示:
//LED灯闪烁 #include <reg52.h> unsigned int i; //注意:main函数会自动进行循环,在本实验中的现象是如果没有写软件延时,则八个LED灯处于极其快速的亮灭切换中,人眼无法识别,而且LED灯亮度降低 void main() { while(1) { // //同时操作P1的八个串口P10-P17 // P1 = 0; //点亮八个LED // i = 65535; // while(i--); // P1 = 0xff; //熄灭八个LED(注意默认为十进制,可写为255,也可写为0xff,表示二进制 11111111;但不能写为1) // i = 65535; // while(i--); //同时操作P1的四个串口P10/P12/P14/P16 P1 = 0xaa; //点亮LED0/LED2/LED4/LED6 i = 65535; while(i--); P1 = 0xff; //熄灭LED0/LED2/LED4/LED6 i = 65535; while(i--); } }
2021.9.24
一、心得:
关于2021.9.22提到的bug,这里作出正确的解释:
购买C51单片机的芯片型号是STC89C52,但是在线仿真器也可以实现芯片功能,而且在线仿真器接入后芯片型号会变成IAP15F2K61S2,因此在烧录软件中的单片机型号选择时一定要选择对应的型号(接STC89C52芯片时,选择STC89C52;接在线仿真器时,选择IAP15F2K61S2),否则就会报错:单片机型号选择错误(见下图)
当然实操过程中有一个万能方法:在烧录软件中,先点击“检测MCU选项”,再点击“下载/编程”
二、知识:
- 循环移位函数与左移右移运算符:
三、源码展示:
//流水灯 #include <reg52.h> #include <intrins.h> //C51单片机字符循环移位头文件 #define uint unsigned int #define uchar unsigned char uchar temp; //流水灯相关变量 //毫秒级延时函数(z=a表示延时a ms) void delay(uint z) { uint x,y; for (x=z;x>0;x--) for (y=114;y>0;y--); } void main() { temp = 0xfe; P1 = temp; delay(1000); while(1) { //_crol_()为字符型循环左移函数 //_cror_()为字符型循环右移函数 temp = _crol_(temp,1); P1 = temp; delay(1000); } }
博主记录了51单片机学习的过程,从环境配置到遇到的型号选择错误问题的解决,涉及到压降原理、流水灯模块、软件延时等知识点,并分享了源码和相关知识点的解析。









1万+

被折叠的 条评论
为什么被折叠?



