AutoLeaders控制组——51单片机学习笔记(一)
1.基础介绍
单片机(Microcontroller)是一种集成了处理器核心、存储器、输入/输出接口和定时器等功能的微型计算机系统。它通常被用于控制电子设备和系统,包括家用电器、汽车电子系统、医疗设备、工业自动化设备等。单片机通常比个人计算机和嵌入式系统中使用的微处理器更简单、更便宜
单片机型号有很多种,而我使用的则是STC89C52RCz这款,因此写的代码可能一样,但是实际结果可能不太相同
要想使用单片机,我们得先安装两个东西,一个是Kevil5,它可以理解为是我们的编程软件,我们的代码都是在这里进行编写和编译运行,另一个是stc-isp,它可以理解为是我们的工具箱,负责把我们写好的代码转换成单片机的命令,让其工作,同时也能为我们提供不少的便利
2.小试牛刀
关于如何安装,初始新建文件的过程这里略过不谈,我们直接着手开始尝试编写一个简单的代码,让LED模块动起来
LED,发光二极管,我们并不陌生,生活中处处是它的身影,因此把它选择我们的第一个对象,能更加让我们了解单片机的功能和各种操作
首先,让我们知道一些基础运算符号,学过c语言的我们不难理解其中的大部分符号,只有少部分是新知识,因此这里直接放出来:
-
算术运算符:
- 加法:+
- 减法:-
- 乘法:*
- 除法:/
- 取余:%
-
关系运算符:
- 相等:==
- 不等:!=
- 大于:>
- 小于:<
- 大于等于:>=
- 小于等于:<=
-
逻辑运算符:
- 逻辑与:&&
- 逻辑或:||
- 逻辑非:!
-
位运算符:
- 按位与:&
- 按位或:|
- 按位异或:^
- 按位左移:<<
- 右移:>>
这里的按位左移右移看似很难理解,然而,要是我举下面这一个例子,阁下又该如何应对?
1100 0011 >> 1 == 1110 0001
1100 0011 << 2 == 0000 1111
显而易见,这一对运算符就是移位,并无神秘感
在Kevil5中,如果我们想让一个灯亮,根据计算机基础知识,二进制是关键,1意味着关,0意味着开,而通过单片机的原理图我们发现P2这个“东西”正是控制LED模块的,因此,我们将围绕着P2来做功夫
单片机有八个led灯,而查阅资料我们得知每一个数字对应着每一盏灯的状态,因此我们想让第一个灯亮,显然我们得让其他灯灭
写成1111 1110是我们的第一个想法,然后单片机也是有脾气的,我们这样写进Kevil里面,它会把这串当成10进制,从而不能达到我们的目的,这时,简单的做法就是进制转换,方便起见我们把它转成16进制
于是,它就变成了 P2=0xFE
仅仅有这么一行代码是不够的,因为这样写,就等于空中楼阁,没有地基,一切白搭。类似于我们编写c语言代码,我们得写一个主函数,形成一定的框架,让这串代码能正常工作,同时,引入库的文件是我们的任务之一
因此,代码可以写成这样:
#include <REGX52.H>
void main()
{
P2=0xFE;
}
写好后,使用stc-isp下载,烧录进单片机中,运行的结果就是D1亮。由此,我们的第一个任务完成了。
2.延时函数的运用
通过对第一个任务的理解,我们自然不费吹灰之力就能举一反三,可以让很多灯都亮起来,但我们不该就在此止步,我们得学有意思的,而灯的闪烁看起来挺简单而且有趣,于是让LED以一定的间隔间断性的闪烁就是我们的下一个任务
身为小白的我们,这时得把目光放在stc-isp上了,通过右方一大群功能的查找,我们看到了这么个功能:“软件延时计算器”,其中我的单片机可以使用11.0592的频率,我进行了改造,使其能造成任意时长的延时,代码如下:
void delay(unsigned int xms) //@11.0592MHz
{while(xms--){
unsigned char i, j;
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}