蓝桥杯单片机学习二(LED)

前言

接着上一篇蜂鸣器与继电器,我们这次来说说LED,相对来说比较简单。

一、蓝桥杯板的LED

蓝桥杯板子上的LED是由74HC573控制的LED的正极外接1k电阻接VCC,控制信号为低电平,LED就点亮,要注意的是74HC573由Y4引脚控制。

二、程序

1.引入头文件

本小节头文件与上一节的相同。

#include "stc15f2k60s2.h"
#include "absacc.h"

2.函数定义

代码如下:

//IO模式,控制外部设备,蜂鸣器和继电器
void externaldevie_IO(unsigned char beep,unsigned char relay);
//MM模式,控制外部设备,蜂鸣器和继电器
void externaldevie_MM(unsigned char beep,unsigned char relay);
void delay_ms(unsigned char delay);//延时函数————ms
void LED_IO(unsigned char LEDdata);//IO模式,控制LED
void LED_MM(unsigned char LEDdata);//MM模式,控制LED

延时函数以及LED函数。

3.主程序

代码如下:

void main(void)
{
  //实现LED流水灯
  unsigned char i=0;
  while(1)
  {
    externaldevie_IO(0,0);  //关闭蜂鸣器与继电器
    LED_IO(~(0x01<<i));     //LED左移一位
    delay_ms(50);
    i++;
    if(i==8)i=0;
  }
}

这里实现的是每隔一段时间,首先关闭蜂鸣器与继电器,防止干扰,然后LED左移一位,LED是低电平电亮,所以给它取反一下。由于i是char型变量,所以增加一个if判断,使得i==8时,i=0,流水灯回到起始点。

4.函数编写

代码如下:

//IO模式,控制外部设备,蜂鸣器和继电器
void externaldevie_IO(unsigned char beep,unsigned char relay)
{
  unsigned char extdev=0;
  if(beep)  extdev |= 0x40;//蜂鸣器
  if(relay) extdev |= 0x10;//继电器
  EA = 0;//关闭中断总使能
  P0 = extdev;
  P2 = (P2 & 0x1f) | 0xa0;//作用,使138译码器Y5输出低电平,573的LE为高电平
  P0 = extdev;
  P2 = P2 & 0x1f;         //作用,使138译码器Y5输出高电平,573的LE为低电平,573数据锁存
  EA = 1;//打开中断总使能
}

//MM模式,控制外部设备,蜂鸣器和继电器
void externaldevie_MM(unsigned char beep,unsigned char relay){
  unsigned char extdev=0;
  if(beep)  extdev |= 0x40;//蜂鸣器
  if(relay) extdev |= 0x10;//继电器
  EA = 0;//关闭中断总使能
  XBYTE[0xA000]=extdev;   //需要用到 absacc.h 头文件
  P2 = P2 & 0x1f;        
  EA = 1;//打开中断总使能
}

void delay_ms(unsigned char delay)//延时函数————ms
{
  unsigned char i,j;
  while(delay--)
    for(i=100;i>0;i--)
      for(j=100;j>0;j--);

}

void LED_IO(unsigned char LEDdata)//IO模式,控制LED
{
  EA = 0;//关闭中断总使能
  P0 = LEDdata;                //保险起见,给P0送两次数据
  P2 = (P2 & 0x1f) | 0x80;     //打开Y4
  P0 = LEDdata;
  P2 = P2 & 0x1f;              //关闭Y4
  EA = 1;//打开中断总使能
}

void LED_MM(unsigned char LEDdata)//MM模式,控制LED
 {
  EA = 0;//关闭中断总使能
  XBYTE[0x8000]=LEDdata;   
  P2 = P2 & 0x1f;         
  EA = 1;//打开中断总使能
} 

LED_IO中有一个参数,用于给P0口赋值LEDdata应该为0xxx的形式来控制8个LED。

注意:函数中的EA使能可以看情况添加,有时候添加了可能会让蜂鸣器、继电器或者LED失灵。

 5.完整程序

代码如下:

#include "stc15f2k60s2.h"
#include "absacc.h"

//函数定义/
void externaldevie_IO(unsigned char beep,unsigned char relay);
//IO模式,控制外部设备,蜂鸣器和继电器
void externaldevie_MM(unsigned char beep,unsigned char relay);
//MM模式,控制外部设备,蜂鸣器和继电器
void delay_ms(unsigned char delay);//延时函数————ms
void LED_IO(unsigned char LEDdata);//IO模式,控制LED
void LED_MM(unsigned char LEDdata);//MM模式,控制LED

///主程序/
void main(void)
{
  //实现以秒为间隔,LED流水灯
  unsigned char i=0;
  while(1)
  {
    externaldevie_IO(0,0);
    LED_IO(~(0x01<<i));     //LED全灭
    delay_ms(50);
    i++;
    if(i==8)i=0;
  }
}

/函数编写//
void externaldevie_IO(unsigned char beep,unsigned char relay)
//IO模式,控制外部设备,蜂鸣器和继电器
{
  unsigned char extdev=0;
  if(beep)  extdev |= 0x40;//蜂鸣器
  if(relay) extdev |= 0x10;//继电器
  EA = 0;//关闭中断总使能
  P0 = extdev;
  P2 = (P2 & 0x1f) | 0xa0;//作用,使138译码器Y5输出低电平,573的LE为高电平
  P0 = extdev;
  P2 = P2 & 0x1f;         //作用,使138译码器Y5输出高电平,573的LE为低电平,573数据锁存
  EA = 1;//打开中断总使能
}

void externaldevie_MM(unsigned char beep,unsigned char relay)
//MM模式,控制外部设备,蜂鸣器和继电器
{
  unsigned char extdev=0;
  if(beep)  extdev |= 0x40;//蜂鸣器
  if(relay) extdev |= 0x10;//继电器
  EA = 0;//关闭中断总使能
  XBYTE[0xA000]=extdev;   //需要用到 absacc.h 头文件
  P2 = P2 & 0x1f;        
  EA = 1;//打开中断总使能
}

void delay_ms(unsigned char delay)//延时函数————ms
{
  unsigned char i,j;
  while(delay--)
    for(i=100;i>0;i--)
      for(j=100;j>0;j--);

}

void LED_IO(unsigned char LEDdata)//IO模式,控制LED
{
  EA = 0;//关闭中断总使能
  P0 = LEDdata;
  P2 = (P2 & 0x1f) | 0x80;
  P0 = LEDdata;
  P2 = P2 & 0x1f;         
  EA = 1;//打开中断总使能
}

void LED_MM(unsigned char LEDdata)//MM模式,控制LED
 {
  EA = 0;//关闭中断总使能
  XBYTE[0x8000]=LEDdata;   
  P2 = P2 & 0x1f;         
  EA = 1;//打开中断总使能
} 

总结

这是关于蓝桥杯LED的一些代码及思路,相对来说比较简单,需要注意的就是LED是用低电平点亮的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值