欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

单片机—LED灯(二)

程序员文章站 2022-06-09 08:42:59
...

各种灯

间隔灯

#include<reg52.h>
#define uint unsigned int
void delayms(xms);
void main()
{
    while(1)
    {
        P2=0xff;
        delayms(500);
        P2=0x00;
        delayms(500);
    }
}
void delayms(xms)
{
    uint i,j;
    for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}

单片机—LED灯(二)

左右跑马灯

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delayms(xms);
void main()
{
    int i;
    uchar aa,bb;
    while(1)
    {
        aa=0x80;
        bb=0x01;
        for(i=1;i<=8;i++)
        {
            P2=aa;
            aa=_crol_(aa,-1);
            delayms(500);
        }
        for(i=1;i<=8;i++)
        {
            P2=bb;
            bb=_crol_(bb,1);
            delayms(500);
        }

    }
}
void delayms(xms)
{
    uint i,j;
    for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}

单片机—LED灯(二)

一些比较好的代码

LED闪烁的简单试验

/**************************************************************************************
*                     LED闪烁的简单试验                                                  *
*   
*     连接方法: JP11(P2)和J12用8PIN排线连接起来                                   *
*                                                                                     *
***************************************************************************************/

#include <reg51.h>     //此文件中定义了51的一些特殊功能寄存器

void delay(unsigned int i);  //声明延时函数

main()
{ 
   while(1){
  P2  = 0x00; //置P0口为低电平

  delay(600); //调用延时程序

  P2  = 0xff; //置P0口为高电平


  delay(600); // 调用延时程序
 }

}

/*******延时函数*************/
void delay(unsigned int i)
{
    unsigned char j;
    for(i; i > 0; i--)   //循环 600*255 次 
        for(j = 255; j > 0; j--);
}

二进制加法试验

/********************************************************************************
;                  二进制加法试验                                              *
; p2口八个灯作二进制加法。理解二进值的计算                                     *
; 硬件连接:p2口8路指示灯                                                     *
;                                                                               *
;*  描述:                                                                       *
;   p2口八个灯作二进制加法。理解二进值的计算                                    *
;*  连接方法: JP11(P2)和J12(LED灯) 用8PIN排线连接起来                        *
*********************************************************************************/
#include <reg52.h>
void delay(unsigned int i);  //声明延时函数


main()
{ 
  unsigned char Num = 0xff;
  while (1) 
  {P2  = Num;
   delay(1000);    //延时函数
   Num--;
   }

}


/*******延时函数*************/
void delay(unsigned int i)
{
    unsigned char j;
    for(i; i > 0; i--)
        for(j = 255; j > 0; j--);

}

LED闪烁的简单试验

/**************************************************************************************
*                     LED闪烁的简单试验                                                  *
*                延时实现p2口LED流水灯效果 (用循环移位指令)                        *
*   连接方法: JP11(P2)和J12(LED灯) 用8PIN排线连接起来                              *
*                                                                                     *
***************************************************************************************/
#include <reg51.h>      //此文件中定义了51的一些特殊功能寄存器
#include <intrins.h>

void delayms(unsigned char ms)  
// 延时子程序
{                       
    unsigned char i;
    while(ms--)
    {
        for(i = 0; i < 120; i++);
    }
}


main()
{
    unsigned char LED;
    LED = 0xfe;   //0xfe = 1111 1110
    while(1)
    {
         P2 = LED;
         delayms(250);
         LED = LED << 1;    //循环右移1位,点亮下一个LED "<<"为左移位
         if(P2 == 0x00 )     {LED = 0xfe;  } // 0xfe = 1111 1110


    }
}

跑马灯程序

/*******************************************************************************
*  描述:   跑马灯程序                                                          *
*  连接方法: JP11(P2)和J12(LED灯) 用8PIN排线连接起来                        *
*                                                                              *
*******************************************************************************/

#include<reg51.h>
#include <intrins.h>

/*****************************************************************************
*  延时子程序                                                                 *
*                                                                            *
******************************************************************************/
void delayms(unsigned char ms)
{
    unsigned char i;
    while(ms--)
    {
    for(i = 0; i < 120; i++);
    }
}

/*****************************************************************************
*  主程序                                                                   *
*                                                                            *
******************************************************************************/
 main()
{
    unsigned char LED;
    LED = 0xfe;
    P2 = LED;
    while(1)
    {
    delayms(250);
    LED = _crol_(LED,1);        //循环右移1位,点亮下一个LED  此函数位库函数
    P2 = LED;
    }
}

LED闪烁的简单试验

/**************************************************************************************
*                     LED闪烁的简单试验                                                  *
*   
*     连接方法: JP11(P2)和J12用8PIN排线连接起来                                   *
*                                                                                     *
***************************************************************************************/

#include <reg51.h>     //此文件中定义了51的一些特殊功能寄存器

void delay(unsigned int i);  //声明延时函数
int num;
sbit P2_0= P2^0;             

main()
{ 
    TMOD= 0X10;                     //定时器1的工作方式1
    EA= 1;                          //开启总中断
    ET1= 1;                         //开启定时器中断1
    TH1= 0x3c;                      //高位赋初值
    TL1= 0xb0;                      //低位赋初值  3cb0是15535,则计时为(65535-15535=50000)us,即50ms
    TR1= 1;                         //启动定时器 T1
    num= 0;
   while(1)
   {
   P2_0= num;
   }
}

/*******延时函数*************/


void int_1()interrupt 3
{

    unsigned char n;

        TH1= 0x3c;
        TL1= 0xb0;                   //3cb0是15535,则计时为(65535-15535=50000)us,即50ms
        TR1= 1;
        n++;
        if(n==10)                    //0.5s  num加1
        {
            num=~num;
            n= 0;
        }

    }

左右跑马灯实验

/********************************************************************************
;*                  跑马灯实验                                                  *
;                                                                               *
;     延时实现LED流水灯效果   p2口八个灯作跑马灯。采用了寄存器存中间数          *
;     连接方法: JP11(P2)和J12(LED灯) 用8PIN排线连接起来                      *
;********************************************************************************/


#include <reg52.h>
void delay(unsigned int i);  //声明延时函数
char LED;


main()
{ 
  unsigned char i;

  while (1) 
  {  LED = 0xfe;

       for (i = 0 ;i < 8 ; i++)
      { 
       P2  = LED;
       delay(500);
       LED = LED << 1;       // 左移
       LED = LED | 0x01;     // 移位后,后面的位为高电平
       if (LED == 0x7f)  break;   //提前退出 FOR 循环
       }

       for (i = 0 ;i < 8 ; i++)
       {

          P2  = LED;
          delay(500);
          LED = LED >> 1;    // 右移
          LED = LED | 0x80;  // 移位后,后面的位为高电平

       }

   }

}


/*******延时函数*************/
void delay(unsigned int i)
{
    unsigned char j;
    for(i; i > 0; i--)
        for(j = 255; j > 0; j--);

}

LED灯实验就到这里,接下来进一步学习……