蓝桥杯单片机学习一(蜂鸣器和继电器)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

这是我的第一篇博客,以此来记录我学习蓝桥杯的心得与体会,也方便后面自己忘记是可以回过头来看看,加深记忆。


提示:以下是本篇文章正文内容,下面案例可供参考

一、蓝桥杯外设学习

今天要学习的是蓝桥杯单片机板上的蜂鸣器与继电器这两个部分

二、程序

1.引入头文件

代码如下(示例):

说一下为什么要引入 #include "absacc.h" 这个头文件,这是因为我们后面需要使用到MM模式

#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);
//延时函数————ms
void delay_ms(unsigned char delay);

这里定义了三个函数,分别是外设控制—IO模式、外设控制—MM模式以及延时函数(ms)

说明一下,我这里用到的延时函数不是很标准,大家可以根据自己的情况来修改参数。

3.主程序

代码如下(示例):

void main(void)
{
  //实现以秒为间隔,蜂鸣器和继电器开、关
  while(1)
  {
    externaldevie_IO(1,1);//蜂鸣器响,继电器吸合
    delay_ms(1000);
    externaldevie_IO(0,0);
    delay_ms(1000);
  }
}

主程序比较简单,先打开蜂鸣器和继电器,延时一段时间后,关闭蜂鸣器和继电器再延时一段时间,并把他们放在while循环中。

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;         //作用,使138译码器Y5输出高电平,573的LE为低电平,573数据锁存
  EA = 1;//打开中断总使能
}

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

}

1.IO模式中有两个变量beep,relay,首先定义一个char型变量extdev,extdev用于存储P0口的值,用来控制蜂鸣器和继电器的开关

P2 = (P2 & 0x1f)| 0xa0;意思是先让P2的高三位变为0,再与0xa0相或,得到P27 P26 P25的值为101,Y5打开。同理P2 = P2 &0x1f;就是关闭Y5。

  if(beep)  extdev |= 0x40;//蜂鸣器,让extdev的值为 0100 0000,对应与Q7为高电平,蜂鸣器响
  if(relay) extdev |= 0x10;//继电器,让extdev的值为 0001 0000,对应与Q5为高电平,继电器通

EA = 0;EA = 1;这两步是关闭中断,防止影响。

2.MM模式与IO模式类似,比赛中大概率不会出现,有兴趣的同学可以自行学习。

3.我这里的延时函数不是很精确,是我自己调的一个大概值,经供参考。

5.完整程序

代码如下(示例):

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

//函数定义/
//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 main(void)
{
  //实现以秒为间隔,蜂鸣器和继电器开、关
  while(1)
  {
     externaldevie_IO(1,1);//蜂鸣器响,继电器吸合
     delay_ms(1000);
     externaldevie_IO(0,0);
     delay_ms(1000);
  }
}

//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;         //作用,使138译码器Y5输出高电平,573的LE为低电平,573数据锁存
  EA = 1;//打开中断总使能
}

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

总结

上述介绍了蓝桥杯蜂鸣器与继电器的使用,第一篇博客写的不是很好,如有错误希望指导,希望下次能写的更好,加油冲冲冲!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值