• 用AVR128单片机的音乐门铃


    一、系统方案
    1、使用按键控制蜂鸣器模拟发出“叮咚”的门铃声。
    2、“叮”声对应声音频率714Hz,“咚”对应声音频率500Hz,这两种频率由ATmega128的定时器生成,定时器使用的工作模式自定,处理器使用内部4M时钟。“叮”声持续时间300ms,“咚”声持续时间700ms。
    3、发“叮”时8个发光二极管亮,发“咚”时发光二极管灭。
    4、用LCD液晶显示芯片或数码管显示所用的定时器(ATmega128有定时器0-3),定时器时钟值、定时器的定时/计数器的初值及两种声音频率的持续时间等参数。
    在这里插入图片描述
    二、硬件设计
    原理图如下:
    在这里插入图片描述

    三、单片机软件设计
    1、首先是系统初始化
    //定时器1初始化,
    void timer1_init(void)
    {
    TCCR1B = 0x00; //stop
    TCNT1H = 0xf5; //setup
    TCNT1L = 0x0e;
    TCCR1A = 0x00;
    TCCR1B = 0x00; //start Timer //定时器不分频
    }
    2、液晶显示程序
    //写入命令
    void LCD_write_command(uchar dat)
    {
    //LCD_wait_ready(); //写数据之前,先判断液晶是否忙碌
    lcd_ddr =0XFF; lcd_port=0XFF; //设置端口为输出,DI等于0代表指令操作
    RW0();_delay_us(3);DI0(); //E下降沿将端口数据写到液晶显示器中
    lcd_port=dat;
    E1();_delay_us(3);E0();
    }
    //写入数据
    void LCD_write_data(uchar data)
    {
    //LCD_wait_ready(); //写数据之前,先判断液晶是否忙碌
    lcd_ddr =0XFF; lcd_port=0XFF; //设置端口为输出,DI等于1代表数据操作
    RW0();_delay_us(3);DI1();
    if(!fxshow) lcd_port=data;else lcd_port=~data;//E下降沿将端口数据写到液晶显示器中
    E1();_delay_us(3);E0();
    }
    3、按键程序
    void Do()
    {
    switch(state)
    {
    case 0 :LED3_CLR() ;TCCR3B = 0x01; state = 1 ;scnt = 0 ;Set_Frq(0);Start();break ; //启动定时器设定好相应的频率
    case 1 :if(scnt>300) //时间大于300毫秒
    {
    state = 2 ; //跳转到状态2
    }

    	  break ;
    
    • 1

    case 2 :
    Set_Frq(1); //设定咚的频率值
    state = 3 ; //跳转到状态3
    break ;
    case 3 :
    if(scnt>1000) //时间大于1000ms
    {
    state = 4; //跳转到状态4
    }
    LED3_SET() ;break ; //LED熄灭
    case 4 :
    scnt = 0 ;
    state = 0 ;

    	  if(tcnt<4)
    	  {
    	   tcnt++;
    	  }else
    	  {
    	   enable = 0 ;
    	   TCCR3B = 0x00;	  			 //定时器3停止工作
    	   tcnt = 0 ;
    	   Stop();  						 //蜂鸣器停止输出
    	  }
    	  break ;						 //整个函数实现了叮 300毫秒,咚 700毫秒的过程
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    }
    }
    4、核心算法程序
    //***********************************************************************
    // 主程序
    //***********************************************************************
    void main(void)
    {
    system_init(); //系统初始化
    LCDchushihua(); //液晶初始化
    LCDQingPing(); //显示器清屏

    timer1_init();								  //定时器1初始化
    timer3_init();								  //定时器3初始化
    TIMSK=0x04;								  	  //设置定时器中断
    ETIMSK=0x04;								  //设置定时器中断
    SEI();										  //开中断 
    vision_init(0);								  //显示内容初始化
    m_enable = 0 ;								  //叮咚模式
    while(1)
    {
     	scan_key();	   							  //按键扫描
    	if(enable==1)
    	{
    	   Do();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    }

    四、 proteus仿真设计
    Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
    在这里插入图片描述

  • 相关阅读:
    现在健身耳机哪个牌子好、2023年最好的健身房耳机推荐
    Nature Microbiology | 可感染阿斯加德古菌的六种深海沉积物中的病毒基因组
    C语言之共用体、枚举类型、typedef
    adb基础命令
    一种基于直方图优化的图像去雾系统-用户界面-含Matlab代码
    [LeetCode][LCR169]招式拆解 II——巧妙利用字母的固定顺序实现查找复杂度为O(1)的哈希表
    项目失败的原因有哪些?项目经理可以用项目管理软件监控项目
    服装商城网站 毕业设计-附源码241505
    3D打印:FDM打印湿度对打印件及打印机的影响和调整
    让dropout在图像超分辨领域大放异彩![2022 CVPR]
  • 原文地址:https://blog.csdn.net/bbxyliyang/article/details/133186125