对一个单片机新手,遇到的第一个问题往往是如何使用单片机点亮LED,这就好比学习编程语言第一个程序的HelloWorld。
这里默认大家已经装好了KEIL的开发环境及烧写器,有自己的单片机开发板,假设单片机的P0口接了八个LED,电路图入下图:
其中JPP0接的是高电平5V,而L0.0到L0.7接的分别是P0.7到P0.0这样的话如果
P0.7到P0.0上电平是高电平,那么这个led的压降就是0,led不亮,如果P0.7到P0.0上电平是低电平,那么led上就会产生压降,led就会亮。
那么点亮其中一个的程序如下:
#include<reg51.h> //包含单片机寄存器的头文件
void main(void)
{
while(1)
{
P0=0xfe; //第一个灯亮
P0=0xff; //第一个灯灭
}
}
对,就是这么简单,P0=0xfe,相当于P0=11111110,这时候P0.0=0,灯L0.7亮,然后P0=0xff,相当于P0=11111111,这时候P0.0=1,灯L0.7灭,然后由于这两句是放在while(1)中的由于其中1是while{}中的语句执行的条件,由于1始终为真,所以这两句循环执行。灯L0.7就在不断闪烁,亮灭,但由于闪烁的速度很快,由于视觉暂留,你看到的是灯一直亮着。
接下来来个流水灯,大家尝试自己分析程序的原理:
#include<reg51.h> //包含单片机寄存器的头文件
/****************************************
函数功能:延时一段时间
*****************************************/
void delay(void)
{
unsigned char i,j;
for(i=0;i<250;i++)
for(j=0;j<250;j++)
;
}
/*******************************************************
函数功能:主函数
********************************************************/
void main(void)
{
while(1)
{
P0=0xfe; //第一个灯亮
delay(); //调用延时函数
P0=0xfd; //第二个灯亮
delay(); //调用延时函数
P0=0xfb; //第三个灯亮
delay(); //调用延时函数
P0=0xf7; //第四个灯亮
delay(); //调用延时函数
P0=0xef; //第五个灯亮
delay(); //调用延时函数
P0=0xdf; //第六个灯亮
delay(); //调用延时函数
P0=0xbf; //第七个灯亮
delay(); //调用延时函数
P0=0x7f; //第八个灯亮
delay(); //调用延时函数
}
}
这时候这八个灯就愉快的流动闪烁了。
|