预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共20页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

简易功率放大器 摘要 本电路设计采用一块功率放大器芯片作为核心,加上其他外围电路而成。通过单片机控制和显示放大量的大小。本设计的主要特点有:结构简单,容易控制,显示准确,具有一定的功率放大能能力。 简易功率放大器 本系统主要由功率放大模块、显示模块、控制模块和单片机模块组成,下面分别论证这几个模块的选择。 1.1功率放大的论证与选择 方案一:用分立元件搭建一个功率放大模块。分立元件搭建的功率放大模块,效率高,失真小,但制作和调试都比较麻烦。 方案二:使用TDA2030功率放大芯片。使用TDA2030功放芯片的电路简单,调试容易,有一定的功率放大能力。 综合以上两种方案,选择方案二。 1.2显示的论证与选择 方案一:1602LCD。1602液晶显示,操作简单,容易控制,但不能显示中文字符。 方案二:12864LCD。12864液晶显示,能够显示中文字符,但占用的IO口较多。 综合以两种方案,选择方案一。 1.3控制系统的论证与选择 方案一:MSP430。TI公司的MSP430,功耗小,IO口多,但操作较复杂。 方案二:51单片机。51,操作简单,容易控制。 综合考虑采用51单片机做为控制系统。 2系统理论分析与计算 DAC0832控制音量大小的理论分析 单片机同归IO口给DAC0832赋不同的值,得到不同的电压,从而达到调节音量大小的作用。把八位二进制的数分成八份每份值为256/8=32,逐加并赋值给IO口。 3电路与程序设计 3.1电路的设计 系统总体框图 系统总体框图如图1所示 单片机 功放主体 DAC0832音量YIN 音量显示及控制提示 图1 3.1.2单片机子系统框图与电路原理图 单片机子系统框图 音量 蜂鸣器提示 1602LCD 51单片机 操作提示 图2 电源 电路电源由外部设备提供,+5V电源供给单片机及相关部分,+12、-12电源供给功放主体和运放。 3.2程序的设计 程序功能描述与设计思路 1602显示“yinlian”提示,当按键按下,出现0到8的音量等级的显示。当按键按下,音量将超出所限等级范围时,蜂鸣器发声提示。 程序流程图 1、主程序流程图 开始 1602液晶显示 加减按键是否按下 按键减 按键加 DAC0832音量控制 附录:电路原理图 功放主体 51单片机 DAC0832程序代码 #include<reg52.h>//包含单片机寄存器的头文件 #include<intrins.h>//包含_nop_()函数定义的头文件 #defineucharunsignedchar #defineuintunsignedint ucharcodeyinliang[]={"0012345678"}; ucharcodeyinliang0[]={0x00,0x00,0x1f,0x3f,0x5f,0x7f,0x9f,0xbf,0xdf,0xff}; sbitRS=P2^0;//寄存器选择位,将RS位定义为P2.0引脚 sbitRW=P2^1;//读写选择位,将RW位定义为P2.1引脚 sbitE=P2^2;//使能信号位,将E位定义为P2.2引脚 sbitBF=P0^7;//忙碌标志位,将BF位定义为P0.7引脚 sbitjia=P1^0; sbitjian=P1^4; sbitfmq=P2^5; unsignedcharcodestring[]={"YINLIANG:"}; unsignedcharcodestring1[]={"NOWLOWEST!"}; unsignedcharcodestring2[]={"NOWHIGHEST!"}; unsignedcharcodestring3[]={"NOWNORMAL!"}; /***************************************************** 函数功能:延时1ms ***************************************************/ voiddelay1ms() { unsignedchari,j; for(i=0;i<10;i++) for(j=0;j<33;j++) ; } /***************************************************** 函数功能:延时若干毫秒 入口参数:n ***************************************************/ voiddelay(unsignedintn) { unsignedinti; for(i=0;i<n;i+