用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 ;

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毫秒的过程

}

}

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();
	}
}

}

四、 proteus仿真设计

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

相关推荐
某林2124 小时前
ROS2与STM32通信详解
stm32·单片机·嵌入式硬件
EVERSPIN7 小时前
MCU微控制器,N32H47x高性能MCU机器人关节控制方案
单片机·嵌入式硬件·机器人·mcu微控制器
0南城逆流07 小时前
【STM32】知识点介绍三:哈希算法详解
stm32·嵌入式硬件·哈希算法
云山工作室7 小时前
基于STM32单片机的正激式开关电源设计(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·课程设计·毕设
芯希望8 小时前
芯伯乐700mA线性稳压器XBLW L78M05H/L78M12H:稳定可靠,简化电源设计
单片机·嵌入式硬件
lingzhilab8 小时前
零知IDE——STM32F407VET6驱动SHT40温湿度传感器与ST7789实现智能环境监测系统
stm32·单片机·嵌入式硬件
贝塔实验室10 小时前
Altium Designer 6.3 PCB LAYOUT教程(四)
驱动开发·嵌入式硬件·硬件架构·硬件工程·信息与通信·基带工程·pcb工艺
星辰pid11 小时前
stm32的gpio模式到底该怎么选择?(及iic,spi,定时器原理介绍)
stm32·单片机·嵌入式硬件
brave and determined12 小时前
可编程逻辑器件学习(day3):FPGA设计方法、开发流程与基于FPGA的SOC设计详解
嵌入式硬件·fpga开发·soc·仿真·电路·时序·可编程逻辑器件
axuan1265112 小时前
10.【NXP 号令者RT1052】开发——实战-RT 看门狗(RTWDOG)
单片机·嵌入式硬件·mcu