您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 制造加工工艺 > 基于TDA简易数控功放
1简易功率放大器摘要本电路设计采用一块功率放大器芯片作为核心,加上其他外围电路而成。通过单片机控制和显示放大量的大小。本设计的主要特点有:结构简单,容易控制,显示准确,具有一定的功率放大能能力。简易功率放大器本系统主要由功率放大模块、显示模块、控制模块和单片机模块组成,下面分别论证这几个模块的选择。1.1功率放大的论证与选择方案一:用分立元件搭建一个功率放大模块。分立元件搭建的功率放大模块,效率高,失真小,但制作和调试都比较麻烦。方案二:使用TDA2030功率放大芯片。使用TDA2030功放芯片的电路简单,调试容易,有一定的功率放大能力。综合以上两种方案,选择方案二。1.2显示的论证与选择方案一:1602LCD。1602液晶显示,操作简单,容易控制,但不能显示中文字符。方案二:12864LCD。12864液晶显示,能够显示中文字符,但占用的IO口较多。综合以两种方案,选择方案一。1.3控制系统的论证与选择方案一:MSP430。TI公司的MSP430,功耗小,IO口多,但操作较复杂。方案二:51单片机。51,操作简单,容易控制。综合考虑采用51单片机做为控制系统。22系统理论分析与计算DAC0832控制音量大小的理论分析单片机同归IO口给DAC0832赋不同的值,得到不同的电压,从而达到调节音量大小的作用。把八位二进制的数分成八份每份值为256/8=32,逐加并赋值给IO口。3电路与程序设计3.1电路的设计3.1.1系统总体框图系统总体框图如图1所示图13.1.2单片机子系统框图与电路原理图单片机子系统框图图23.1.4电源电路电源由外部设备提供,+5V电源供给单片机及相关部分,+12、-12电源供给功放主体和运放。3.2程序的设计3.2.1程序功能描述与设计思路1602显示“yinlian”提示,当按键按下,出现0到8的音量等级的显示。当按键按下,音量将超出所限等级范围时,蜂鸣器发声提示。3.2.2程序流程图1、主程序流程图单片机功放主体DAC0832音量YIN音量显示及控制提示51单片机1602LCD音量操作提示蜂鸣器提示开始3附录:电路原理图功放主体1602液晶显示加减按键是否按下按键加按键减DAC0832音量控制451单片机5DAC08326程序代码#includereg52.h//包含单片机寄存器的头文件#includeintrins.h//包含_nop_()函数定义的头文件#defineucharunsignedchar#defineuintunsignedintucharcodeyinliang[]={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!};/*****************************************************7函数功能:延时1ms***************************************************/voiddelay1ms(){unsignedchari,j;for(i=0;i10;i++)for(j=0;j33;j++);}/*****************************************************函数功能:延时若干毫秒入口参数:n***************************************************/voiddelay(unsignedintn){unsignedinti;for(i=0;in;i++)delay1ms();}/*****************************************************函数功能:判断液晶模块的忙碌状态返回值:result。result=1,忙碌;result=0,不忙8***************************************************/bitBusyTest(void){bitresult;RS=0;//根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1;//E=1,才允许读写_nop_();//空操作_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间result=BF;//将忙碌标志电平赋给resultE=0;returnresult;}/*****************************************************函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate***************************************************/voidWrite_com(unsignedchardictate){9while(BusyTest()==1);//如果忙就等待RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令RW=0;E=0;//E置低电平(写指令时,//就是让E从0到1发生正跳变,所以应先置0_nop_();_nop_();//空操作两个机器周期,给硬件反应时间P0=dictate;//将数据送入P0口,即写入指令或地址_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间E=1;//E置高电平_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应10时间E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}/*****************************************************函数功能:指定字符显示的实际地址入口参数:x***************************************************/voidWriteAddress(unsignedcharx){Write_com(x|0x80);//显示位置的确定方法规定为80H+地址码x}/*****************************************************函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数:y(为字符常量)***************************************************/voidWriteData(unsignedchary){while(BusyTest()==1);RS=1;//RS为高电平,RW为低电平时,可以写入数据11RW=0;E=0;//E置低电平(写指令时,,//就是让E从0到1发生正跳变,所以应先置0P0=y;//将数据送入P0口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间E=1;//E置高电平_nop_();_nop_();_nop_();_nop_();//空操作四个机器周期,给硬件反应时间E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令}/*****************************************************函数功能:对LCD的显示模式进行初始化设置***************************************************/voidLcdInt(void)12{delay(15);//延时15ms,首次写指令时应给LCD一段较长的反应时间Write_com(0x38);//显示模式设置:16×2显示,5×7点阵,8位数据接口delay(5);//延时5msWrite_com(0x38);delay(5);Write_com(0x38);//3次写设置模式delay(5);Write_com(0x0C);//显示模式设置:显示开,有光标,光标闪烁delay(5);Write_com(0x06);//显示模式设置:光标右移,字符不移delay(5);Write_com(0x01);//清屏幕指令,将以前的显示内容清除delay(5);}//蜂鸣器voidbeep(){unsignedintt;13for(t=0;t200;t++){fmq=0;delay(1);fmq=1;delay(1);}fmq=1;delay(1000);}voidmain(void)//主函数{uintb=0;uinta=0;unsignedchari,j;14LcdInt();//调用LCD初始化函数delay(10);Write_com(0x01);//清显示:清屏幕指令i=0;j=0;while(1){WriteAddress(0x00);//设置显示位置为第一行的第1个字delay(5);while(string[i]!='\0')//'\0'是数组结束标志{WriteData(string[i]);i++;delay(10);}WriteAddress(0x09);delay(5);15if(jia==0){delay(20);if(jia==0){delay(20);while(!jia);a=a+1;if(a==10){a=9;beep();}WriteData(yinliang[a]);P3=yinliang0[a];}}if(jian==0){delay(20);if(jian==0){delay(20);16while(!jian);a=a-1;if(a==0){a=1;beep();}WriteData(yinliang[a]);P3=yinliang0[a];}}WriteAddress(0x40);//设置显示位置为第二行的第1个字delay(5);if(a==1){j=0;while(string1[j]!='\0')//'\0'是数组结束标志{WriteData(string1[j]);j++;delay(10);}}17if(a==9){j=0;while(string2[j]!='\0')//'\0'是数组结束标志{WriteData(string2[j]);j++;delay(10);}}if(a1&&a9){j=0;while(string3[j]!='\0')//'\0'是数组结束标志{WriteData(string3[j]);j++;delay(10);}18}}}1920
本文标题:基于TDA简易数控功放
链接地址:https://www.777doc.com/doc-2572396 .html