LED点灯

LED的点亮

  1. 观察原理图,看LED所连接的io口
  2. 观察LED的连接方式(共阴or共阳),确定高低电平点亮方式(高or低)
    在这里插入图片描述
    < 图示为蓝桥杯比赛用板的LED部分原理图 >

LED闪烁

  • 实现原理:给io口赋高低电平控制LED的开关

  • 软件延时函数:使用STC软件生成,存在误差

  • 软件延时方法

    1. STC-isp 软件
    2. 软件延时计算器
    3. 选择参数,设定定时时长

    在这里插入图片描述

  • 自定义延迟函数:

    1. 先设置一个1ms的延迟函数
    2. 将第一行括号里的viod 改成uint型字符
    3. 将while(x–)加在nop前一行
    4. 将while(x–)后面的全都缩进到这里边
      void Delay(unsigned int x)    //@11.0592MHz
      {
          unsigned char data i, j;
          while(x--)
          {
              _nop_();
              _nop_();
              _nop_();
              i = 11;
              j = 190;
              do
              {
                  while (--j);
              } while (--i);
          }
          
      }
      
      


  • 程序思路:

    1. 对P0口整体赋值控制所有LED
    2. 对P0中的8个io口单独赋值,控制单独的LED
  • 程序实例:

    前置代码

    #include <STC15F2K60S2.H> //头文件引用
    #include "HC138.h"        //HC138编码器头文件
    #include <intrins.H>
    
      /*************变量声明区*************/
      unsigned char LED=0xfe;//LED数据变量1111 1110 (流水灯方式二需要此声明)
    
    
    void Delay500ms(void)    //500ms的延时函数
    {
        unsigned char data i, j, k;
        i = 22;
        j = 3;
        k = 227;
        do
        {
            do
            {
                while (--k);
            } while (--j);
        } while (--i);
    }
    
    

方式一

void main()     //主函数
{
    HC138(4);
    while(1)
    {
        P0=0xff;//1111 1111 全灭
        Delay500ms();
        P0=0x00;//0000 0000 全亮
        Delay500ms();
    }
}

方式二

void main()     //主函数
{
    HC138(4);
    while(1)
    {
        P00=1;//P00高电平 L1灭
        Delay500ms();
        P00=0;//P00低电平 L1亮
        Delay500ms();
    }
}


LED流水灯

  • 实现原理:给P0口不断变换的高低电平,从而达到LED流水灯的效果
  • 程序思路:
    1. 给P0直接赋不同的值,从而达到流水灯的效果
    2. 通过内置的库函数实现流水灯效果
      _crol_  循环左移      _crol_(对象,位数)
      _cror_  循环右移  
      
      注:  _crol_为一个值,需要把这个值赋给一个变量
      
      所属库: intrins.h
      

  • 程序实例:

方式一:

void main()
{
	HC138(4);
	while(1)
	{
		P0=0x7f;		//0111 1111
		Delay(500);
		P0=0xbf;		//1011 1111
		Delay(500);
		P0=0xdf;		//1101 1111
		Delay(500);
		P0=0xef;		//1110 1111
		Delay(500);
		P0=0xf7;		//1111 0111
		Delay(500);
		P0=0xfb;		//1111 1011
		Delay(500);
		P0=0xfd;		//1111 1101
		Delay(500);
		P0=0xfe;		//1111 1110
		Delay(500);
	}
}

方式二:(注:使用本方式时需要提前声明变量LED)

void main()
{
	HC138(4);
	while(1)
	{
		P0=LED;//将LED的值赋给P0
		Delay(500);//延时500ms
		LED=_crol_(LED,1);//将LED的数据进行左移一位的操作
	}
}
  • 28
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值