目录
写在前面
本博客基于宋雪松老师的《手把手教你学51单片机》教学视频及教程,使用的也是视频配套的KST-51开发板。但是本博客所包含的大部分代码均为博主自己学习思考之后,独立写出。可能会与教程例程所给代码有所出入。同样的该博客可以看作本人在学习51单片机的学习笔记。
同时,欢迎大家指正、并在讨论群留言。
一、单片机最小系统解析
单片机的最小系统由电源、晶振和复位电路组成。
1.1电源
可以查找我们使用单片机的数据手册获得,我所使用的STC89C52单片机工作电压为5.5~3.4V,为5V单片机。同时还有一种常用的工作电压范围为2.7~3.6V、典型值是3.3V的单片机,我们称之为3.3V单片机。
1.2晶振
晶振通常分为有源晶振和无源晶振两种。其中有源晶振我们需要给它供电才可以产生震荡频率,并且可以提供高精度的频率基准,信号质量也比无源信号要好。而无源晶振自身无法振荡起来,它需要芯片内部的振荡电路一起工作才能振荡,它允许不同的电压,但是信号质量和精度较有源晶振差一些。
1.3复位电路
如图所示为KST-51单片机上的复位电路,该单片机RST引脚高电位复位,低电位正常,我们来简单的分析一下其工作原理。
电路稳态时:电容隔绝电流,RST接地,此时为低电平正常工作。
上电复位:电容充电,此时可以把电容看作一根导线,RST高电平。在电容充电过程中,电流减小,RST电压逐渐减小至0。
按键复位:按下RESET按键,电路导通,电容放电,RST高电平。松开RESET按键,该过程类似于上电复位过程,RST电压逐渐减小至0。
二、C语言——函数
函数的使用可以使我们的程序条理清晰,避免大块的代码重复。
2.1函数的调用
函数的调用一般形式为:函数名(实参列表)。
这里我们需要注意几点:
1.函数在调用时,不需要加函数类型。
2.函数在调用之前,必须先定义或声明。也就是说要么被调用函数应写在调用函数之前,要么我们在调用函数之前在文件开头进行声明。在这里宋老师推荐以“函数声明——main函数——功能函数——中断函数”的顺序编写程序。
3.函数声明时必须加函数类型。
2.2函数的形参和实参
在定义函数时,括号中的参数为形式参数。在调用函数时,括号里的参数为实际参数。
在这里我们也需要注意几点,可能刚开始不了解,不必过分纠结,先学会使用再对其进行深入理解。
1.函数定义中指定的形参,在未发生函数调用时不占内存,只有函数调用时,函数中的形参才被分配内存单元。
2.实参必须有确定的值。
3.形参必须指定数据类型。
4.实参向形参的数据传递是单向传递,不能由形参再回传给实参。
在这里,书中给了一个小例子,大家可以好好体会一下函数的使用、定义和注意事项。
unsigned char add(unsigned char x, unsigned char y); //函数声明
void main()
{
unsigned char a = 1;
unsigned char b = 2;
unsigned char c = 0;
c = add(a, b); //调用时,a 和 b 就是实参,把函数的返回值赋给 c
//执行完后,c 的值就是 3
while(1);
}
unsigned char add(unsigned char x, unsigned char y) //函数定义,括号中的 x 和 y 就是形参
{
unsigned char z = 0;
z = x + y;
return z; //返回值 z 的类型就是函数 add 的类型
}
三、按键
3.1独立按键
如图所示为独立按键的原理图,当按键松开时,KeyIn与+5V电位相同,二者同为高电平。而按键按下时,电流如图中红色线所示流向GND,此时KeyIn的GND电位相同,为低电平。
所以当按键发生改变时,KeyIn会发生高低电平的