您的位置:首页 > 其它

AVRWARE++开发笔记5:蜂鸣器驱动实验

2015-10-25 00:39 337 查看
本文只针对于初学者,高手请绕过!

1、实验目的

利用单片机的IO口,控制蜂鸣器,学会蜂鸣器的控制方法。

2、实验内容
编写一段程序,使蜂鸣器以1秒为间隔鸣叫。

3、硬件原理

蜂鸣器硬件原理图如下图所示,使用排线与端子P1相连,则单片机相应端口的第4引脚即与端子P1的BEEP引脚相连接(例如,使用排线将P10端子与P1端子相连接,则PD4引脚则连接到了BEEP引脚上,在这里需要注意的是,端口从0起排,而端子从1起排,不要混淆)。BEEP通过基级电阻R11控制三级管Q1的通断,由于Q1(8550)为PNP三极管,则BEEP给低电平的时候,Q1导通,给蜂鸣器供电,蜂鸣器鸣叫;BEEP给高电平的时候,Q1截止,蜂鸣器停止鸣叫。



4、实验参考程序及注解

更改映射层1_AbstractionLayer_HAL.h文件

//PortD
#define IO_PD_DIR
0b00010000 //此处指明第4引脚为输出

//该处为二进制表示方式,最低位为0
#define IO_PD_OUT
0b00010000 //此处指明第4引脚默认初始状态为高电平,也就是说在上电时,

//BEEP引脚给高电平,三极管不导通,蜂鸣器不鸣叫

//该处为二进制表示方式,最低位为0
////////////////////////////////////////////////////////////////////////////////////
#define BEEP
BIT4 //BEEP与端口的第4引脚相连接
//功能宏定义
#define BEEP_OPEN
CLRBIT(PORTD,BEEP) //蜂鸣器打开,将端口D的第4引脚(PD4)置低电平
#define BEEP_SHUT
SETBIT(PORTD,BEEP) //蜂鸣器关闭,将端口D的第4引脚(PD4)置高电平

更改逻辑层0_logiclayer_main.c文件

//主程序
int main(void)
{
//目标板初始化,该函数会自动初始化相应的外设文件
TARGET_Init();
//后台主循环
while(1)
{
//在这里完成自己的项目逻辑
BEEP_OPEN;
TARGET_Delayms(1000,1);
BEEP_SHUT;
TARGET_Delayms(1000,1);
//喂狗语句,大部分的工程项目都不应该去除
#if
WDT_MODE!=0
TARGET_WatchDogReset();
#endif
}
return 0;
//永不执行
}

5、注解

a、IO_PD_DIR

IO_PD_DIR是系统预定义好的功能宏,表示端口引脚的方向,可以用一个8位的二进制来表示,0表示输入,1表示输出,本例把IO_PD_DIR定义为0b00010000表示,PD4引脚为输出,其余引脚为输入。

b、IO_PD_OUT

IO_PD_OUT
是系统预定义好的功能宏,表示端口引脚默认的初始状态的方向,可以用一个8位的二进制来表示,0表示低电平,1表示高电平,本例把
IO_PD_OUT
定义为0b00010000表示,PD4引脚上电时默认的初始状态为高电平,即三极管不导通,蜂鸣器不鸣叫。

c、

CLRBIT

CLRBIT是系统预定义好的功能宏,可以将1个字节(8位)的某1位置0,例如CLRBIT(PORTD,BIT4)表示的意思是将PORTD寄存器的第4位置成0。

d



SETBIT
SETBIT是系统预定义好的功能宏,可以将1个字节(8位)的某1位置0,例如SETBIT(PORTD,BIT4)表示的意思是将PORTD寄存器的第4位置成1。

e、

TARGET_Delayms

TARGET_Delayms位ms延时函数,带有2个参数,第1个参数是延时的ms数,例如1000指1000ms,即1秒;第2个参数是指在延时的时候是否执行喂狗操作,1是执行喂狗操作,0是不执行喂狗操作。

原创性文章,转载请注明出处 http://user.qzone.qq.com/2756567163

CSDN:http://blog.csdn.net/qingwufeiyang12346
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: