基于TDA简易数控功放.docx

上传人:b****8 文档编号:11487979 上传时间:2023-03-01 格式:DOCX 页数:17 大小:137.95KB
下载 相关 举报
基于TDA简易数控功放.docx_第1页
第1页 / 共17页
基于TDA简易数控功放.docx_第2页
第2页 / 共17页
基于TDA简易数控功放.docx_第3页
第3页 / 共17页
基于TDA简易数控功放.docx_第4页
第4页 / 共17页
基于TDA简易数控功放.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

基于TDA简易数控功放.docx

《基于TDA简易数控功放.docx》由会员分享,可在线阅读,更多相关《基于TDA简易数控功放.docx(17页珍藏版)》请在冰豆网上搜索。

基于TDA简易数控功放.docx

基于TDA简易数控功放

简易功率放大器

摘要

本电路设计采用一块功率放大器芯片作为核心,加上其他外围电路而成。

通过单片机控制和显示放大量的大小。

本设计的主要特点有:

结构简单,容易控制,显示准确,具有一定的功率放大能能力。

简易功率放大器

本系统主要由功率放大模块、显示模块、控制模块和单片机模块组成,下面分别论证这几个模块的选择。

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电路的设计

3.1.1系统总体框图

系统总体框图如图1所示

 

图1

3.1.2单片机子系统框图与电路原理图

单片机子系统框图

图2

3.1.4电源

电路电源由外部设备提供,+5V电源供给单片机及相关部分,+12、-12电源供给功放主体和运放。

3.2程序的设计

3.2.1程序功能描述与设计思路

1602显示“yinlian”提示,当按键按下,出现0到8的音量等级的显示。

当按键按下,音量将超出所限等级范围时,蜂鸣器发声提示。

3.2.2程序流程图

1、主程序流程图

 

 

附录:

电路原理图

功放主体

 

51单片机

DAC0832

程序代码

#include//包含单片机寄存器的头文件

#include//包含_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

delay1ms();

}

/*****************************************************

函数功能:

判断液晶模块的忙碌状态

返回值:

result。

result=1,忙碌;result=0,不忙

***************************************************/

bitBusyTest(void)

{

bitresult;

RS=0;//根据规定,RS为低电平,RW为高电平时,可以读状态

RW=1;

E=1;//E=1,才允许读写

_nop_();//空操作

_nop_();

_nop_();

_nop_();//空操作四个机器周期,给硬件反应时间

result=BF;//将忙碌标志电平赋给result

E=0;

returnresult;

}

/*****************************************************

函数功能:

将模式设置指令或显示地址写入液晶模块

入口参数:

dictate

***************************************************/

voidWrite_com(unsignedchardictate)

{

while(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_();//空操作四个机器周期,给硬件反应时间

E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令

}

/*****************************************************

函数功能:

指定字符显示的实际地址

入口参数:

x

***************************************************/

voidWriteAddress(unsignedcharx)

{

Write_com(x|0x80);//显示位置的确定方法规定为"80H+地址码x"

}

/*****************************************************

函数功能:

将数据(字符的标准ASCII码)写入液晶模块

入口参数:

y(为字符常量)

***************************************************/

voidWriteData(unsignedchary)

{

while(BusyTest()==1);

RS=1;//RS为高电平,RW为低电平时,可以写入数据

RW=0;

E=0;//E置低电平(写指令时,,

//就是让E从0到1发生正跳变,所以应先置"0"

P0=y;//将数据送入P0口,即将数据写入液晶模块

_nop_();

_nop_();

_nop_();

_nop_();//空操作四个机器周期,给硬件反应时间

E=1;//E置高电平

_nop_();

_nop_();

_nop_();

_nop_();//空操作四个机器周期,给硬件反应时间

E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令

}

/*****************************************************

函数功能:

对LCD的显示模式进行初始化设置

***************************************************/

voidLcdInt(void)

{

delay(15);//延时15ms,首次写指令时应给LCD一段较长的反应时间

Write_com(0x38);//显示模式设置:

16×2显示,5×7点阵,8位数据接口

delay(5);//延时5ms 

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

for(t=0;t<200;t++)

{

fmq=0;

delay

(1);

fmq=1;

delay

(1);

}

fmq=1;

delay(1000);

}

 

voidmain(void)//主函数

{

uintb=0;

uinta=0;

unsignedchari,j;

LcdInt();//调用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);

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

while(!

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

}

}

if(a==9)

{

j=0;

while(string2[j]!

='\0')//'\0'是数组结束标志

{

WriteData(string2[j]);

j++;

delay(10);

}

}

if(a>1&&a<9)

{

j=0;

while(string3[j]!

='\0')//'\0'是数组结束标志

{

WriteData(string3[j]);

j++;

delay(10);

}

}

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 日语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1