DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1944|回复: 2
打印 上一主题 下一主题

AVR IO输出之蜂鸣器控制程序

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 19:43:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  
系统功能
      
          使用AVR控制一个蜂鸣器,能随心所欲控制蜂鸣器的鸣叫,不会让它乱叫!
      
      
   
      
硬件设计
      
              关于AVR的I/O结构及相关介绍详见Datasheet,这里仅对作部分简单介绍,下面是AVR的I/O引脚配置表:
      
AVR I/O 口引脚配置表
DDRXn
PORTXn
PUD
I/O 方式
内部上拉电阻
引脚状态说明
0
0
X
输入
无效
三态(高阻)
0
1
0
输入
有效
外部引脚拉低时输出电流 (uA)
0
1
1
输入
无效
三态(高阻)
1
0
X
输出
无效
推挽 0 输出,吸收电流 (20mA)
1
1
X
输出
无效
推挽 1 输出,输出电流 (20mA)
      虽然AVR的I/O口单独输出“1”时,可输出较大电流足已点驱动一个蜂鸣器(5V型),但AVR总的I/O输出毕竟是有限的,所以,有经验者考虑到可能还有其它费劲的活儿要干,会将AVR的I/O口设计为输出“0”时鸣叫,输出“1”时不叫。这种接法亦叫“灌电流叫法”。
      

  
        AVR主控电路原理图(点击图片放大,不需要放大镜!)         蜂鸣器控制电路原理图
         
         
        
   
      
软件设计
      
      下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解!
      
//目标系统: 基于AVR单片机
//应用软件: ICC AVR
            
/*01010101010101010101010101010101010101010101010101010101010101010101
        ----------------------------------------------------------------------
        实验内容:
        能随心所欲控制蜂鸣器的鸣叫,不会让它乱叫。
        示例程序使蜂鸣器间歇式的进行鸣叫,叫1秒,停1秒。        
        ----------------------------------------------------------------------
        硬件连接:
        将PD口的LED指示灯使能开关切换到"ON"状态。
        ----------------------------------------------------------------------
        注意事项:
        (1)若有加载库程序,请将光盘根目录下的“库程序”下的“ICC_H”文件夹拷到D盘
        (2)请详细阅读:光盘根目录下的“产品资料\开发板实验板\SMK系列\SMK1632\说明资料”
        ----------------------------------------------------------------------
        10101010101010101010101010101010101010101010101010101010101010101010*/
        
        #include <iom16v.h>
        #include "D:\ICC_H\CmmICC.H"
      
#define OUT_BUZ  sbi(DDRB,3)    //PB3
  #define BUZ_ON   cbi(PORTB,3)
  #define BUZ_OFF  sbi(PORTB,3)
      
/*--------------------------------------------------------------------
        程序名称:
        程序功能:
        注意事项:
        提示说明:
        输    入:
        返    回:
        --------------------------------------------------------------------*/
        void main(void)
        {
OUT_BUZ;  //设置相应的IO口为输出
while(1)
{
  BUZ_ON;  //我叫
  delay50ms(20);
  BUZ_OFF; //我不叫
  delay50ms(20);
}  
        }
   
      
        
系统调试
      将语句:delay50ms(20);改为语句:delay50ms(1);可以听到叫的频率更高,吵死人了!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏1 分享分享 支持支持 反对反对
沙发
发表于 2021-11-6 16:03:15 | 只看该作者
蜂鸣和舵机都是PWM自己写库不知道怎么搞
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-12-26 11:38 , 耗时 0.084383 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表