单片机—LED灯(二)

各种灯

间隔灯

#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--);
}

间隔灯

左右跑马灯

#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闪烁的简单试验                                                  *
*   
*     连接方法: 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灯实验就到这里,接下来进一步学习……

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值