(二)重拾单片机 第一天 LED灯

 

 

由图知道 低电平 亮,高电平 灭

控制第一个 LED1 亮灭程序代码,如下

#include<reg52.h>
#define uchar8 unsigned char 
#define uint16 unsigned int 
sbit      LED1=P1^0;
/*****************************/
// 函数名称: DelayMS( )
// 函数功能: 延时
// 入口函数: 延时毫秒
// 出口函数: 无
/*********                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             *******************/
void DelayMS(uint16 val)
{
       uint16  i,j;
       for(i=0;i<val;i++)
           for(j=0;j<113;j++);

}

void main()
{

   while(1)
   {
      LED1=0;
      DelayMS(1000);
      LED1=1;
      DelayMS(1000);
     
   }

}

 

 

 __________________________________________________________________________________________________________________________

流水灯程序代码:

#include<reg52.h>
#include<intrins.h>
#define uchar8 unsigned char 
#define uint16 unsigned int 
#define     LED  P1 
/*****************************/
// 函数名称: DelayMS( )
// 函数功能: 延时
// 入口函数: 延时毫秒
// 出口函数: 无
/*********                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             *******************/
void DelayMS(uint16 val)
{
       uint16  i,j;
       for( i=0;i<val;i++)
           for(j=0;j<113;j++);

}

void main()
{
    
    int i;

  while(1)
  {
    LED=0xff  ;       //  这里端口全被设置为 1111 1111 ,相当于 全灭
   
   for(i=0;i<8;i++)
   {
      
      LED=LED<<1;    // 选择了左移循环
      DelayMS(1000);
      
   }

  }

}

 

 

 

1、2亮

1、2、3亮

1、2、3、4亮

。。。。。。

1、2、3。。。。。8 全部亮

 ________________________________________________________________________________________________________________

跑马灯程序代码:

 

#include<reg52.h>
#include<intrins.h>
#define uchar8 unsigned char 
#define uint16 unsigned int 
#define     LED  P1 
/*****************************/
// 函数名称: DelayMS( )
// 函数功能: 延时
// 入口函数: 延时毫秒
// 出口函数: 无
/*********                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             *******************/
void DelayMS(uint16 val)
{
       uint16  i,j;
       for( i=0;i<val;i++)
           for(j=0;j<113;j++);

}

void main()
{
    
    LED =0xfe;

  while(1)
  {
    LED=_crol_(LED,1);      
       DelayMS(1000);

  }

}

只有一个LED灯 亮。

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

程序目标: 实现LED跑马灯 先从左向右移动,后从右向左移动,循环往复

方案一: 数组的字节操作

#include<reg52.h>
#define uchar8 unsigned char 
#define uint16 unsigned int 
#define     LED  P1 
uchar8 code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe} ; 

/*****************************/
// 函数名称: DelayMS( )
// 函数功能: 延时
// 入口函数: 延时毫秒
// 出口函数: 无
/*************************                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            *******************/
void DelayMs(uint16 val)
{
       uint16  i,j;
       for( i=0;i<val;i++)
           for(j=0;j<113;j++);

}

void main()
{
    
    int i;

  while(1)
  {
   
   for(i=0;i<16;i++)
   {
      
      LED=tab[i];    
      DelayMs(1000); 
          
   }

  }

}

 

 

方案二: 移位运算符的实现

#include<reg52.h>
#define uchar8 unsigned char 
#define uint16 unsigned int 
#define     LED  P1 

/*****************************/
// 函数名称: DelayMS( )
// 函数功能: 延时
// 入口函数: 延时毫秒
// 出口函数: 无
/*************************                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            *******************/
void DelayMs(uint16 val)
{
       uint16  i,j;
       for( i=0;i<val;i++)
           for(j=0;j<113;j++);

}

void main()
{
    
    int i;
    uchar8 temp;

  while(1)
  {
       
        temp=0x01;  // 0000 0001
        for(i=0;i<8;i++)
        {
           LED= ~temp;
           DelayMs(1000);
           temp=temp<<1;  
        
        }  
    
        temp=0x80;     // 1000 0000
        for(i=0;i<8;i++)
        {
           LED= ~temp;
           DelayMs(1000);
           temp=temp>>1;  
        
        }

  }

}

方案三:运用循环左右移函数来实现

#include<reg52.h>
#include<intrins.h>
#define uchar8 unsigned char 
#define uint16 unsigned int 
#define     LED  P1 

/*****************************/
// 函数名称: DelayMS( )
// 函数功能: 延时
// 入口函数: 延时毫秒
// 出口函数: 无
/*************************                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            *******************/
void DelayMs(uint16 val)
{
       uint16  i,j;
       for( i=0;i<val;i++)
           for(j=0;j<113;j++);

}

void main()
{
    
    int i;
    uchar8 temp;

  while(1)
  {
       
        temp=0xfe;  // 1111 1110
        for(i=0;i<7;i++)     //  注意这里i<7 ,不再是 i<8
        {
           LED= temp;
           DelayMs(1000);
           temp=_crol_(temp,1);  // 执行左移函数,将 temp 中的函数循环左移一位  
        
        }  
    

        for(i=0;i<7;i++)
        {
           LED= temp;
           DelayMs(1000);
           temp=_cror_(temp,1);   // 右移函数
        
        }

  }

}

 

posted on 2015-12-23 22:56  无悔这一生。  阅读(303)  评论(0编辑  收藏  举报

导航