LED实验
前边我已经介绍了Keil5的安装,并且已经说明了Keil5的使用方法,如果没有看过这两篇博文的请先看一下:Keil5安装、Keil5的介绍和简单使用。除了开发工具的准备,其实我们还需要一点C语言的基础,这个大家自学即可,我就不再赘述了。下面我们就可以真正地步入51的大门了,玩一款单片机第一步一定是点灯,它的地位就相当于学习编程语言的“Hello,World!”。那么接下来,我们就先当一个点灯大师!(说明:这一系列的文章都是基于普中51单核A2开发板)
LED实验:
1.驱动原理:
我们想点亮一个灯,那我们首先需要知道LED的驱动原理,也就是要知道这个灯(本质是发光二极管)接在了单片机的哪个引脚上,什么电平可以点亮或熄灭它,明白了这个我们就可以根据自己意愿玩点点灯的花样了。如下原理图所示,这8个LED接在了P2这一组IO口上,而且LED的正极都接在了VCC(高电平)上,所以我们要想点亮LED,只需要让P2这一组IO口输出低电平即可点亮。
2.程序编写:
main.c
#include "reg52.h"
#include "intrins.h"
#define LED P2
//#define ON (LED0 = 0)
//#define OFF (LED0 = 1)
sbit LED0 = P2^0;
void LED_On(void);
void LED_Off(void);
void LED_Blink(void);
void LED_Flow(void);
void Delay_ms(int n);
void main()
{
LED_Blink();
}
/* LED点亮函数 */
void LED_On(void)
{
LED0 = 0;
}
/* LED熄灭函数 */
void LED_Off(void)
{
LED0 = 1;
}
/* LED闪烁函数 */
void LED_Blink(void)
{
LED0 = 0;
Delay_ms(500);
LED0 = 1;
Delay_ms(500);
}
/* LED流水灯函数 */
void LED_Flow(void)
{
int a,b;
LED = 0xfe;
Delay_ms(500);
for(a=0;a<7;a++)
{
LED = _crol_(LED,1);
Delay_ms(500);
}
//Delay_ms(1000);
for(a=0;a<7;a++)
{
LED = _cror_(LED,1);
Delay_ms(500);
}
}
/* 延时函数 */
void Delay_ms(int n) //延时n毫秒
{
int i,j;
for(i = n; i>0; i--)
for(j = 114; j>0; j--);
}
说明:
①程序中四个LED的函数对应四种LED的功能:点亮、熄灭、闪烁、流水灯,我们想实现什么功能在主函数调用对应函数即可;
②LED_Flow函数
中有两个函数:循环左移函数_crol_()
,循环右移函数_cror_()
,这两个函数在头文件intrins.h
中定义,所以在程序的开头包含了该头文件。这两个函数的功能是实现8位二进制数的循环移位,即循环左移函数:最高位的二进制数移出去就回到最低位;循环右移函数:最低位的二进制数移出去就回到最高位。
③循环左右移函数有两个参数,第一个是需要移位的变量,第二个参数是一次移几位。以移一位为例,该函数执行一次,只能移一位,要想看到看到流水灯效果,必须使用循环让其不断运行。
说到这里,点灯的常规操作我们基本就完成了。大家可以根据自己想要的效果编程实现,玩点不同的花样!
本篇完!!!