提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
这是我的第一篇博客,以此来记录我学习蓝桥杯的心得与体会,也方便后面自己忘记是可以回过头来看看,加深记忆。
提示:以下是本篇文章正文内容,下面案例可供参考
一、蓝桥杯外设学习
今天要学习的是蓝桥杯单片机板上的蜂鸣器与继电器这两个部分
二、程序
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--);
}
总结
上述介绍了蓝桥杯蜂鸣器与继电器的使用,第一篇博客写的不是很好,如有错误希望指导,希望下次能写的更好,加油冲冲冲!