开始学51单片机了!
一.基本工具介绍
学习用的单片机型号为AT89C52。
编程语言为C语言,编程工具为Keil uVision5,驱动器为stc-isp-15xx-v6.87P。
(工程演示工具为Proteus 8 Professional)
二.51单片机-C程序的一些基本操作
①51单片机头文件为<reg52.h>和<regx52.h>,由于后者可以单独操控元件,所以一般选择后者。
②单片机程序主函数与一般的C语言不同,是void main()。
③单片机打开以后,想要一直运行写入的程序不中断,就要在最外套死循环while(1)。
④编译(build)之后,不会生成一个可以捎进单片机的文件,这需要我们自己去选择生成。
(1)点击菜单栏中的魔术棒工具。
(2)在output一栏中勾选Create HEX File。
⑤将编写好的程序捎进单片机:
(1)将单片机连接到电脑上,打开驱动器。
(2)选择相应的单片机型号,然后浏览程序文件,最后点击“下载/编程”。
(3)打开单片机,提示操作成功,程序即可运行。
三.LED点亮,操作延时,LED流水灯
先来看LED在单片机内部的原理图:
最左端接单片机端口P2(P2_0~P2_7),中间是8个发光二极管,与其相连的是保护限流电阻R,最右端是VCC(供电电压源)。所以,想要操作LED,需要通过控制P2口电平的高低来实现。
点亮LED的方法:
给P2端口赋二进制数,0代表P2端口低电平,1代表P2端口高电平。
由于右端VCC有电压供给,所以P2端为低电平时,产生的电势差可以点亮LED。
比如,1111 0000 表示LED1 、2 、3 、4是熄灭的,LED5 、6 、7 、8是点亮的。
但是写程序时,我们要将这种二进制数转化为十六进制,比如1111 0000 = 0xF0(0x表示该数为十六进制数)
比如,点亮情况为1111 0000,程序就是:
P2 = 0xF0; //1111 0000
头文件<regx52.h>提供了单独控制的程序,比如我只想点亮LED1,那么就是:
P2_1 = 0; //P21端口现在是低电平
关于操作延时的方法
由于一条语句跳转到另一条语句时间极为短暂,如果想要让一条程序维持一段时间,则要强制延时。很简单,让程序跑循环语句,程序浪费的时间就是我们延时的时间。
void Delay(int x)
{
while(x!=0)
{
x--;
}
}
下面演示的程序是LED闪烁:
#include<regx52.h>
void Delay(int x)
{
while(x!=0)
{
x--;
}
}
void main()
{
while(1)
{
P2_0=0;
Delay(10000);
P2_0=1;
Delay(10000);
}
}
下面演示的程序是流水灯:(LED顺次闪烁)
#include<reg52.h>
void Delay(int time)
{
int k=time;
while(k!=0)
{
k--;
}
}
void main()
{
while(1)
{
P2=0x80; //1000 0000
Delay(10000);
P2=0x40; //0100 0000
Delay(10000);
P2=0x20; //0010 0000
Delay(10000);
P2=0x10; //0001 0000
Delay(10000);
P2=0x08; //0000 1000
Delay(10000);
P2=0x04; //0000 0100
Delay(10000);
P2=0x02; //0000 0010
Delay(10000);
P2=0x01; //0000 0001
Delay(10000);
/*
P2=0x7F; //0111 1111
Delay(10000);
P2=0xBF; //1011 1111
Delay(10000);
P2=0xDF; //1101 1111
Delay(10000);
P2=0xEF; //1110 1111
Delay(10000);
P2=0xF7; //1111 0111
Delay(10000);
P2=0xFB; //1111 1011
Delay(10000);
P2=0xFD; //1111 1101
Delay(10000);
P2=0xFE; //1111 1110
Delay(10000);
*/
}
}