DIY编程器网

标题: AVR IO输出之蜂鸣器控制程序 [打印本页]

作者: liyf    时间: 2012-1-27 19:43
标题: AVR IO输出之蜂鸣器控制程序
  
系统功能
      
          使用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);可以听到叫的频率更高,吵死人了!

作者: 挽风    时间: 2021-11-6 16:03
蜂鸣和舵机都是PWM自己写库不知道怎么搞
作者: qq4511203    时间: 2021-12-16 13:24
先谢谢




欢迎光临 DIY编程器网 (http://www.diybcq.com/) Powered by Discuz! X3.2