单片机基础教程叁点亮LED

前期,我们完成了开发环境的配置等等,今天我们学习自己写程序,来控制单片机流水灯模块!

创建程序文件

我们打开Kil软件,准备给单片机写程序。大家可以按照下面的步骤进行(这里以Kiluv2英文版为例进行说明。我们以此为例正是因为介绍KiluVision2的图书资料较多,方便出现异常问题的时候查阅资料解决。如果你使用的是Kil其他版本,操作方式基本相同)。

一、新建并配置工程1、首先新建工程:点击菜单中的Projct-NwProjct。

2、然后我们在电脑上为我们的工程新建一个文件夹,这里我用的是HlloWorld,大家可以自行命名,但最好是英文名。3、打开文件夹,输入工程的名称,点击保存。这里我输入的是Hllo。4、然后弹出一个窗口,让我们选择单片机的型号。我们用到的是STC89C52RC,而这里面可能没有STC单片机,我们只需要选择完全兼容STC的Atml系列AT89C52单片机,点击OK确认即可。可以看到右边的方框内有相应的内部资源描述,编译器默认的AT89C52型号单片机有8KFLASH空间以及B的片上RAM。我们可以从STC的芯片手册中查到我们所用的STC89C52RC型号的FLASH大小为8K,RAM大小为B,比AT89C52型号大。这里的FLASH大小和能够烧录程序的大小有关,对于初学者来说8K的FLASH就够用了。5、随后会弹出一个窗口,提示我们是否需要添加的启动代码到工程中,点击否即可(如果我们需要使用自定义的启动代码,则可以点是,然后修改启动代码。而我们编程用的是C语言,一般情况下不需要修改启动代码。至于启动代码有什么用处,则可以等到我们对单片机了解的比较深入的时候再查找相关资料进行学习)。6、下面我们对工程进行简单的设置。右击Targt1,选择第一项OptionsforTargt‘Targt1’…,弹出工程属性设置窗口7、我们打开Output标签,并勾选CratHEXFil,然后点击确定即可。二、新建源文件并添加至工程中1、工程新建并配置完成了,下面我们开始新建程序源文件。点击菜单中的Fil-Nw,出现一个新的文件,如图。2、然后我们点击保存按钮,将其保存到工程文件夹HlloWorld中,保存为扩展名是“.c”的文件,如main.c。这里大家要注意的是,源文件其实只是一个普通的文本文件,不过扩展名是c而不是txt。我们刚刚新建main.c文件的操作,也可以通过在资源管理器中新建文本文档,然后重命名为main.c的方式进行。3、源文件新建好了。源文件只是一个独立的文本文件,而工程文件现在和刚刚新建的源文件还是完全独立、没有关联的。我们要把刚刚新建的main.c文件添加到我们的工程中来:在左边的Fils窗口右击Targt1/SourcGroup1,并选择菜单中的AddFilstoGroup‘SourcGroup1’来添加文件。4、双击需要添加的文件main.c,或者选中它再点击Add按钮,从左边的Fils窗口就可以看到,文件就已经被添加到工程中了。这时弹出的窗口并没有关闭,因为这样可以方便继续添加其他文件。因为我们现在只需添加一个文件并且添加好了,所以点击Clos关闭弹出的窗口。三、编写程序并编译我们打开main.c,开始正式编写程序了。我们编写的程序如下并保存。这就是一个最简单的点亮LED的程序,我们将在下面讲解,现在我们只需要把这几行代码敲写进去或者copy一下。

点击左上方的双箭头按钮编译全部文件,我们看到下方的输出窗口显示编译完成,“cratinghxfilfrom‘Hllo’”表明已经编译时创建了HEX文件(HEX文件是十六进制文件,将烧写进单片机。相当于Windows中的可执行文件“.x”),

“0Error(s),0Warning(s).”表示编译成功,程序也没有语法错误。如果提示你的程序有错,请细心的检查一下,有没有发生漏掉分号等情况。至此,我们完成了程序的编写与编译,并生成了单片机可执行的HEX工程文件。大家可以在工程所在文件夹下看到:Hllo.hx就是我们所需要的工程文件接下来,我们的工作就是把这个hx文件烧录进单片机里具体操作请参考上节内容!烧录成功后,可观察现象可看到第一颗LED点亮了硬件详解这里,我们先讲解一下硬件电路原理。发光二极管是半导体二极管的一种,可以把电能转化成光能。常简写为LED(lightmittingdiod)。发光二极管与普通二极管一样也具有单向导电性。当给发光二极管加上正向电压(大于LED的正向压降)就会发光,当给发光二极管加上负向电压就不会发光。发光二极管的发光亮度与通过的工作电流成正比,一般情况下,LED的正向工作电流在10mA左右,若电流过大时会损坏LED,因此使用时必须串联限流电阻以控制通过管子的电流。限流电阻R可用下式计算:R=(E-UF)/IF式中E为电源电压,UF为LED的正向压降,IF为LED的一般工作电流。普通发光二极管的正向饱和压降为1.4~2.1V,正向工作电流为5~20mA.硬件原理图此实验之前首先需要了解IO端口原理,简单介绍如下:1、I/O英文全称是Input/Output,即输入/输出。单片机端口是标准双向口,就是说,单片机的端口既可以作为输出信号端(如控制灯亮灭、继电器吸合释放、喇叭发声等),也可以作为输入信号端(如按键信号输入、红外波形输入、开关信号输入等)。2、暂且不管IO内部详细结构,先把单片机当黑匣子对待,假设我们需要控制一个LED的亮灭,应该怎么做?这里列出一个最简单的硬件控制电路:上图中A点就相当于单片机的I/O口,A点相当于单刀双掷开关,可以接到+5V,也可以接到电源地。接到+5V或者悬空,整个电路中没有电流流过,LED的状态是熄灭。如果A点接到电源地,2端压差5V,假设LED正常工作压降1.5V,正常工作电流10mA。我们通过图上的参数得知实际工作参数:电流I=(5V-1.5V)/欧姆=8.9mA,接近于正常工作电流,所以LED被点亮。在数字电路中,接+5V为电平“1”,接地为“0”所以在单片机中,按照上图连接LED到P1.1口,我们只需要控制P1.1口的电平是“0”或“1”就可以控制那么我们就把对LED亮灭的控制转换为端口高低电平的控制下面我们讲解刚才的程序程序详解#includ#includrg52.h#说明这是个预处理命令(在编译之前进行的处理),includ是文件包含命令。C语言的预处理主要有三个方面的内容:1-宏定义2-文件包含3-条件编译

头文件主要定义了端口和特殊功能寄存器的物理地址,包含这个头文件后,我们在程序中就可以直接使用定义过的标识符。如果需要对P1口进行操作,因为P1的寄存器地址是0x90,我们不需要了解单片机具体内部结构和地址,直接针对P1进行操作,单片机内部就会对0x90这个地址操作,P1=0xFF;语句的作用是直接赋值十六进制FF到P1端口

sbit

这个关键字是C51中特有的

用于定义SFR(特殊功能寄存器)的位变量

sbitLED=P1^0;

表示定义发光管连接的硬件端口,LED定义在P1(特殊功能寄存器)的第0位,即P1.0,定义了这个端口以后,下面对P1.0的操作,我们就可以直接用LED代替,

LED=1;//将P1.0口赋值1,对外输出高电平

LED=0;//将P1.0口赋值0,对外输出低电平

由于sbit定义位变量,所以赋值结果只有0和1。

main()

C程序最大的特点就是所有的程序都是用函数来装配的main()称之为主函数,是所有程序运行的入口。其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用的是有参函数,则参数在调用时传递。一个程序有且只有一个main函数。whil()计算机的一种基本循环模式。当满足条件时进入循环,不满足跳出。C语言中whil可以有以下2种形式:do语句whil(条件);whil(条件)语句;我们分析一下本例中的语句

whil(1)

{

}

小括号中表示循环条件,大括号中是循环主体。当循环条件为真,执行大括号中的循环主体,否则跳出循环主体。条件不为0即为真,所以这里我们使用数字1,表示条件永远为真,然后就会一直执行大括号中的语句,本例中不需要循环操作,所以大括号中为空语句。在以后的所以程序中,都会存在whil循环主体,所有需要循环操作的函数和变量都需要放在whil循环中。本例中进入main函数对LED进行了2次操作后进入whil循环,并一直在循环中等待,不进行任何操作。因此LED的亮灭状态也不会改变。本程序虽然短小,但包含了一个c程序最基础的部分,以后的程序会在这个基础上不断添加内容用于增加功能,但整体结构不会改变.//

/**/

这2种符号表示注释,注释不是程序,不影响程序结果,注释是给我们程序员看的,我们可以通过注释了解程序的意图,尤其在程序庞大时,注释尤为重要,如果没有注释,一段时间后,我们自己写的程序自己都看不懂了。所以养成一个好的习惯,写程序的时候及时注释。上述2种注释符号的区别如下,//后面的语句都为注释,换行后无效,/**/中间的内容皆为注释,换行有效。上述样例中开头的描述使用了/**/注释,而程序中各个语句后面的注释使用了//。这个注释可以根据个人喜好和习惯,并没有具体要求.

附录程序

#includrg52.h//包含头文件

sbitLED=P1^0;//用sbit关键字定义LED到P1.0端口,//LED是自己任意定义且容易记忆的符号/*------------------------------------------------主函数------------------------------------------------*/voidmain(void){LED=1;//将P1.0口赋值1,对外输出高电平LED=0;//将P1.0口赋值0,对外输出低电平

whil(1)//主循环{}}

本节讲解了用Kil创建并编译程序

以及点亮LED一个的方法

附带一些基本的C语言语法讲解

如有疑问可后台留言

课后练习:

1.尝试点亮2颗LED

2.尝试使8颗LED间隔点亮

LED间隔点亮









































白癜风哪家医院好
杭州白癜风专科医院



转载请注明:http://www.jiaju1314.com/bcxx/bcxx/11456.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了