标题: 第一个单片机程序(点亮LED) [打印本页]

作者: 51黑ele    时间: 2016-4-28 03:25
标题: 第一个单片机程序(点亮LED)
  http://static.video.qq.com/TPout.swf?vid=w0107dxen3j&auto=0      对一个单片机新手,遇到的第一个问题往往是如何使用单片机点亮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();   //调用延时函数  
         }

}
这时候这八个灯就愉快的流动闪烁了。







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1