一、 从点亮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;
}
}
6.下载程序
经过“编译”和“组建”无误后,就可以进行程序的下载了,点击图中的按钮进入配置界面, 选择’Output’选项卡,勾选’Create HEX File’,点击‘OK’,再次进行组建,若下方对话框中出现‘creating hex file from “.\Objects\project”…’则表示HEX文件创建成功。 打开STC-ISP软件,选择好对应的芯片型号和串口,打开程序文件,选择刚刚创建的HEX文件,完成后点击下载。 下载时,若出现一直在检测单片机的提示时,应选择冷启动的方式,即先点击下载按钮,然后在打开单片机电源(全程都要保持单片机与计算机连接)。
二、改进程序
尝试编写流水灯程序:
#include <REGX52.H>
void Delay1ms(unsigned int xms)
{
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;
Delay1ms(time);
P2 = 0xFD;
Delay1ms(time);
P2 = 0xFB;
Delay1ms(time);
P2 = 0xF7;
Delay1ms(time);
P2 = 0xEF;
Delay1ms(time);
P2 = 0xDF;
Delay1ms(time);
P2 = 0xBF;
Delay1ms(time);
P2 = 0x7F;
Delay1ms(time);
}
}
TIP: STC-ISP软件中有可以准确生成延时函数的功能,可以直接复制过来使用
|