在学习51单片机之前,要先安装两个软件,一个是keil5,而另一个是stc-isp,stc-isp的安装的可以直接通过安装包来进行安装。而我们keil5安装,我们要注意几个步骤:
链接:https://pan.baidu.com/s/1hLp9jToYBGD24DKlReJctA
提取码:1111
上面是安装keil5与stc-isp的安装包
第一部分:安装Keil uVision5
第一步:安装串口驱动:首先,我们打开CH341SER,就会出现下面驱动安装的界面,点击安装,安装成功会提示安装成功,若失败则点击卸载再安装;(第一张图)
第二步:打开c51v959.exe:我们打开keil5文档,我们将c51v959.exe安装到目标路径(该路径不能含有中文,否则会导致乱码),然后按next,next的下一页内容(First Name,Company Name,E-mail)可以随便填写;(第二张图)
第三步:破译keil uVision5:以管理员身份打开keil uVision5与keil 5文件中的keygen_new,打开keil uVision5后点击左上角file,找到License Managment,并且找到其的CID,后面复制到keygen_new的CID再点击Generate会得到解译的密码,把这个密码复制到刚刚打开的License Management的New License ID Code(LIC),点击Add LIC;(第三张图)
第二部分:添加单片机型号
第一步:打开下载好的stc-isp-15xx-v6.82.exe;
第二步:打开该界面,找到单片机型号以及串口号,再在右边找Keil仿真设置,在那个界面左上角找添加型号, 点击,找文件keil,然后添加,确定,最后重新启动;
第三部分:创建新项目
在D盘,我们建一个文件夹,打开keil uVision中的project(在file右边的,而不是file自身的),点击,并找到New uVision Project,点击我们新建的文件夹,点进去,然后按确定,按如下的操作;
当我们把代码打好之后,我们要开始编译,就相当于检查你的代码是否正确,可不可以运行,而编译的之前呢,我们要点击options(很像仙女棒的东西)(第一张图),找到outputs,并打开,然后找到Creat hex file(第二张图),打勾,然后找Build编译,这样会在我们编译成功之后生成hex文件,这个是我们要得到的东西。
若出现下图所示,意味着你的编码是正确的,可以运行的,如果不是,这是意味着出现错误。
后面,我们打开stc,找到文件,找到打开程序文件,找到你要的hex文件,然后下载,若显示操作成功,且单片机有按你编写的程序运行,那意味着你的编码是正确的。
认识部分元器件
排针的作用:主要作用是将两个电路板之间的信号传输线连接起来。排针通常具有一定 的弹性,这样就能在接触面产生良好的压力,并保证电信号的质量。
晶振的作用:产生稳定的时钟信号。在许多电子设备中,晶振电路被广泛应用,以确保 设备的正常运行。
DC电源座的作用:就是直流供电的插座,它主要就是直流供电专用的插座。在生活中 我们也经常看到,比如像MP3以及数码相机遥控器上面基本上都有 这种电源插座,通常有专用的直流电源供电。
排阻的作用:相当于把若干个电阻串联在一起。
温度传感器的作用:是一种 测量物体冷热程度 的设备,以可读的形式 通过电信号提供 温度测量
开关:分为单刀单掷开关与单刀双掷开关
为单刀单掷开关
为单刀双掷开关
二极管:分为普通二极管,发光二极管与光电二极管
为普通二极管
为发光二极管
为光电二极管
点灯:
原理:通过1与0控制led灯的开关,发送给电脑,电脑再发送信号给单片机,单片机再控制led灯。 在电路图当左边是正极、右边是负极
高低电平的作用:高低电平是指电信号的电压状态,通常用数字1表示高电平,数字0表示低电平。高低电平在数字电路中具有多种作用,其中之一就是控制LED灯的亮灭。在数字电路中,高电平通常表示逻辑上的1,而低电平表示逻辑上的0。LED灯通常被连接到数字电路中的输出引脚上。当输出引脚处于高电平时,电路会提供足够的电流流过LED,使其发光。相反,当输出引脚处于低电平时,电路不提供足够的电流,LED就不会发光。
但我们在学习点灯第一步,要学会看原理图,接下来我们来看我们工程中心的51单片机的最小系统板,找到哪个接口连接我们的led灯,这里是我们的P1连接我们的led(每一个51单片机最小系统板虽说构造结构相同,但所用的接口可能不同,所以我们要特别注意原理图,会看图是学好51单片机必须要掌握的知识点喔)。对了,还有共阳共阴的问题,可以看到正极的公共极是连在一起的,所以称为共阳,共阴则公共极相反。像我们这个呢,就是共阳(左边为正极连在同一条线上)
共阳与共阴的影响:共阳是当给发光二极管的阴极为低电平时,相应发光二极管就亮,当某一字段的阴极为高电平 时,相应字段就不亮。共阴则相反。
点亮第一个发光二极管:
#include <STC89C5xRC.H>
int main()
{
while(1)//死循环
{
P10=0;//置P1.0引脚为低电平,第一个LED灯亮
//P1=0xfe; 位操作法,低位在前高位在后:11111110
}
}
首先看原理图,我们规定8盏led灯分别对应八个引脚P10,P11,P12,P13,P14,P15,P16,P17,如果按照对半分的话,会变成XXXXXXXX,因为只存在有电和没电两种情况,X只能为1为没电或者0为有电。1或者0本来就是二进制,XXXXXXXX只是更好的转化为16进制。例如0xff,为11111111,8盏led灯都不亮。
解释一下,P1与P10的区别,P1是一个总地址,而P10是一个总地址里面的一部分。
如何实现流水灯:
流水灯,顾名思义就是从上到下依次点亮一遍(或者让它从下往上点亮都可以),并且循环这个过程。那我们先回忆一下如何点亮一个led灯,再用相同的方法点亮其他led灯就可以了,但由于这个亮的时间是很短的,我们要让一个亮的时间更长,可以使得我们的流水灯更明显,所以我们要往两个led灯之间加上时间函数,目的就是延长上一个led灯亮的时间,然后就能完成我们的流水灯。
如何自定义延时函数:
什么叫延时函数呢,我们可以这样理解,相当于我们吃饭排队那样子,等到前面的都点完餐,才会到自己点餐,就是等代码一段时间再执行我们下一个代码的过程。
如何实现呢,我们常用for或while来进行进行一些无用的代码,达到延时目的(这节课最主要要学会的),还有一种方法是用我们的自带的定时器来计时(在我们讲定时器内容会涉及到)
我们可以从stc的软件延时计算器来进行设定,并且要注意晶振的大小,按我们以下的设定来调整,注意是要找到软件延时计算器在右边。(设一毫秒)
void Delay1ms() //@11.0592MHz 延时1毫秒
{
unsigned char i, j; //无定义字符(整型)i,j
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);//循环内部每循环一次为1ms
}
若我们延时xms的话,自定义延时函数,我们可以把这个语句改成
void delay(unsigned char xms)
{
while(xms--)
{
_nop_();
i=2;
j=199;
do
{
while(--j);
}while(--i);
}
}
若是500ms,则把x改成500,就可以了,以下面流水灯为例子
流水灯程序:
#include <STC89C5xRC.H>
#include <INTRINS.H>
void delay(unsigned char xms) //@11.0592MHz
{
while(xms--)
{
unsigned char i, j;
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void main()
{
P1=0xFE;//1111 1110第一个led灯亮,其他灯灭
delay(500);//延时500毫秒
P1=0xFD;//1111 1101第二个led灯亮,其他灯灭
delay(500);//延时500毫秒
P1=0xFB;//1111 1011第三个led灯亮,其他灯灭
delay(500);//延时500毫秒
P1=0xF7;//1111 0111第四个led灯亮,其他灯灭
delay(500);//延时500毫秒
P1=0xEF;//1110 1111第五个led灯亮,其他灯灭
delay(500);//延时500毫秒
P1=0xDF;//1101 1111第六个led灯亮,其他灯灭
delay(500);//延时500毫秒
P1=0xBF;//1011 1111第七个led灯亮,其他灯灭
delay(500);//延时500毫秒
P1=0x7F;//0111 1111第八个led灯亮,其他灯灭
delay(500);//延时500毫秒
}