51单片机学习日常

博主记录了51单片机学习的过程,从环境配置到遇到的型号选择错误问题的解决,涉及到压降原理、流水灯模块、软件延时等知识点,并分享了源码和相关知识点的解析。

51单片机学习日常

闲来垂钓碧溪上。这个学习周期安排了51单片机,记录一下学习日常咯(注意本文不是详细的学习笔记,只为记录一下心得体会和相关知识):

2021.9.21

首先我选用的是QX-MCS51开发板,今天下载了开发板资料,把该配的环境都配了,该安装的都安装完了,具体流程我就不介绍了

2021.9.22

一、心得:

​ 今天遇到了1个死bug,花了我足足一小时(关于该bug的解释有误,在2021.9.24中已更新)

01

开发板配套学习视频中讲明的单片机型号是STC89C52,开发板配套芯片型号也是STC89C52,尴尬的是我的单片机型号却是IAP15F2K61S2。这里介绍一个解决“单片机型号选择错误”的有效方法:打开烧录软件后,直接点击“检测MCU选项”,会自动检测单片机相关参数

02

自动匹配成功后界面如下:

03

二、知识:

  1. 压降:

04

  1. 流水灯模块原理图(跳线帽):

05

  1. 点亮LED灯原理:

06

  1. 单片机工作的基本时序:

07

三、源码展示:

//点亮第一个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

一、知识:

  1. 软件延时:

    在需要添加延时的两个事件之间,使CPU进行一些无用的加减运算,达到延时效果。

    软件延时的好处是:实现简单;坏处是:浪费CPU资源

  2. IO口与一个字节位的对应关系:

08

二、源码展示:

//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),否则就会报错:单片机型号选择错误(见下图)

01

当然实操过程中有一个万能方法:在烧录软件中,先点击“检测MCU选项”,再点击“下载/编程”

二、知识:

  1. 循环移位函数与左移右移运算符:

09

三、源码展示:

//流水灯
#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);
	 }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值