51单片机学习笔记(二)点亮第一个LED
一、 从点亮LED开始的第一个程序
上一篇文章中介绍了51单片机相关软件及驱动的下载调试方法,而本次将正式进入实战教学。
在单片机学习中点亮LED相当于C语言中的HELLO WORLD,非常适合新手操作,同时也能对单片机有更好的认识。
1.建立工程
首先打开安装好的KEIL5,选择’Project’选项中的’New uVision Project’开始建立一个新的工程;
建议为每一个项目建立一个单独的文件夹,不要把所有项目直接建在同一个文件夹内,养成分类整理的好习惯( •̀ ω •́ )✧;
在选择芯片时要注意,在KEIL中STC89系的都变成了AT89xx的形式,直接搜索STC89C52是找不到的;
点击’OK’后会再出现一个对话框,会将一个启动文件加入工程,目前没有用处,可忽略。
2.添加文件
建立完工程后,我们就可以在这个工程中添加C文件了,右键点击工程文件夹,选择‘Add New Item to Group ···’
可以选择C语言、C++或者汇编语言(ASM),这里我选择C语言;
完成O(∩_∩)O。
3.调节字体
由于KEIL默认的字体较小,我们可能需要更改字体设定,可以直接点击工具栏中的红框中的按钮进行设置。
4.了解LED工作原理
在开始编写程序之前,我们需要先了解一下LED的工作原理:
LED的中文名称是发光二极管,在生活中有着广泛的应用,尤其在大屏幕中使用 最为频繁;
LED有两个引脚,分别是正极和负极,在实物图中,一般遵照长正短负的原则进行判断;
在电路图中,LED一般用带横线的箭头来表示,箭头上端为正极,下端为负极。
要想使LED发光,就必须在其两端加上电压,并且电流方向必须是从正极到负极。
通过查阅单片机的原理图,我们可以知道,单片机的8个LED的正极都与供电电源VCC相连。也就是说,要想使某个LED发光,只要让对应的接口为低电平“0”就行了。
一般来说,我们写的程序是通过CPU对寄存器的读写来改变引脚的值,从而改变相对应的外设的状态。由此可知,只要改变P2 的值,就能控制相应的LED的亮灭。
5.编写程序
二进制 | 十六进制 | 二进制 | 十六进制 |
---|---|---|---|
0000 | 0 | 1000 | 8 |
0001 | 1 | 1001 | 9 |
0010 | 2 | 1010 | A |
0011 | 3 | 1011 | B |
0100 | 4 | 1100 | C |
0101 | 5 | 1101 | D |
0110 | 6 | 1110 | E |
0111 | 7 | 1111 | F |
#include <REGX52.H>
void main()
{
while(1)
{
P2 = 0xFE;//即1111 1110,P20引脚为0,D1亮
}
}
6.下载程序
经过“编译”和“组建”无误后,就可以进行程序的下载了,点击图中的按钮进入配置界面,
选择’Output’选项卡,勾选’Create HEX File’,点击‘OK’,再次进行组建,若下方对话框中出现‘creating hex file from “.\Objects\project”…’则表示HEX文件创建成功。
打开STC-ISP软件,选择好对应的芯片型号和串口,打开程序文件,选择刚刚创建的HEX文件,完成后点击下载。
下载时,若出现一直在检测单片机的提示时,应选择冷启动的方式,即先点击下载按钮,然后在打开单片机电源(全程都要保持单片机与计算机连接)。
二、改进程序
尝试编写流水灯程序:
#include <REGX52.H>
void Delay1ms(unsigned int xms) //12.000MHz时钟频率时延时x毫秒
{
while(xms)
{
unsigned char i, j;
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{
unsigned int time = 100;//延迟时间,可改变流水灯的速度
while(1)
{
P2 = 0xFE;//1111 1110,依次打开各个LED
Delay1ms(time);//延时timex1ms
P2 = 0xFD;//1111 1101
Delay1ms(time);
P2 = 0xFB;//1111 1011
Delay1ms(time);
P2 = 0xF7;//1111 0111
Delay1ms(time);
P2 = 0xEF;//1110 1111
Delay1ms(time);
P2 = 0xDF;//1101 1111
Delay1ms(time);
P2 = 0xBF;//1011 1111
Delay1ms(time);
P2 = 0x7F;//0111 1111
Delay1ms(time);
}
}
TIP:
STC-ISP软件中有可以准确生成延时函数的功能,可以直接复制过来使用