基于DAC0832的信号发生器设计与实现(源码+原理图+PCB)

摘要:

本课题设计了一个基于DAC0832的信号发生器,使之输出不同频率的正弦波、三角波、锯齿波和方波,并通过按键切换不同的波形,也可以改变频率以及频率变化的步进。本方案选择了DAC0832作为核心芯片,并与51单片机结合,设计出一款建议的高精度频率信号发生器,具有体积小功率等优点。DAC0832是国家半导体公司生产的一款DA转换器。为了实现幅度可程控的功能,这里选用了2个DAC0832芯片完成功能,其中一个用来产生波形,另外一个设计成程控放大器进行改变幅度,它的放大倍数通过DAC0832的数字端口来实现,根据设定的输出幅值,单片机只需要通过公式换算出给予的对应电平。所有要输出的参数都能通过液晶LCD1602显示。
关键词:单片机; LCD1602;信号发生器;DAC0832

本系统设计制作一个基于DAC0832的信号发生器。

能实现以下几种功能:

(1)用户可以通过按键设定频率、波形、幅度这些参数。
(2)本系统输出幅度范围为0.1VPP~5VPP。最小步进值为0.1VPP。
(3)本系统输出方波、三角波、正弦波和锯齿波。最小步进值为1HZ。
(4)其中方波的占空比可通过安检来调节。
(5)系统所有的设置的参数都能在LCD1602上显示
基于DAC0832的信号发生器设计与实现(源码+原理图+PCB)_第1张图片
STC12C5A60S2系列单片机的中断系统有5个中断源,2个优先级,可以实现二级中断服务嵌套。由片内特殊功能寄存器中的中断允许寄存器IE控制CPU是否响应中断请求;由中断优先级寄存器IP安排各中断源的优先级;同一优先级内各中断同时提出中断请求时,由内部的查询逻辑确定其响应次序。[7]
在单片机应用系统中,常常会有定时控制需求,如定时输出、定时检测、定时扫描等;也经常要对外部事件进行计数。STC12C5A60S2单片机内集成有两个可编程的定时/计数器:T0和T1,它们既可以工作于定时模式,也可以工作于外部事件计数模式,此外,T1还可以作为串行口的波特率发生器。
如图3-5所示。用STC12C5A60S2的P0口作为数据线,用P1.2、P1.1、P1.0分别作为LCD的EN、R/W、RS。其中EN是下降沿触发的片选信号,R/W是读写信号,RS是寄存器选择信号本模块设计要点如下:显示模块初始化:首先清屏,再设置接口数据位为8位,显示行数为1行,字型为5×7点阵,然后设置为整体显示,取消光标和字体闪烁,最后设置为正向增量方式且不移位。向LCD的显示缓冲区中送字符,程序中采用2个字符数组,一个显示字符,另一个显示电压数据,要显示的字符或数据被送到相应的数组中,完成后再统一显示.首先取一个要显示的字符或数据送到LCD的显示缓冲区,程序延时2.5ms,判断是否够显示的个数,不够则地址加一取下一个要显示的字符或数据。
基于DAC0832的信号发生器设计与实现(源码+原理图+PCB)_第2张图片

系统原理图

基于DAC0832的信号发生器设计与实现(源码+原理图+PCB)_第3张图片

pcb设计

基于DAC0832的信号发生器设计与实现(源码+原理图+PCB)_第4张图片

主函数

void main(void)
{
	LCDInit();
	AmPort = 0xff;
	fword = 1048;
	TMOD= 0x02;                
	TH0 = 0xf0;
    TL0 = 0xf0;
	TR0=1;                    //计数器停止计数	    
	ET0=1;                    //开启计数器0中断
	LCDDispString(0,1,"wave:Sin Vo:5.0V");
	LCDDispString(0,2,"f: 01000Hz D:--%");

	EA=1;                     //开总中断
	   
	while(1)
	{
		key_scan();
	}
}	
//gType=0:正弦波
//gType=1:方波
//gType=2:三角波
//gType=3:锯齿波
void timer0(void) interrupt 1 //计数器0中断	 
{
	count = count + fword;
	switch(gType)
	{
		case 0:	DAPort = TableSin[count>>8];
				break;	   
		case 1: if(count>Duty*655)
					DAPort = 0xff;
				else
					DAPort = 0x00;
				break;
		case 2:	DAPort = TableTriangle[count>>8];
				break;
		case 3:	DAPort = TableSaw[256-(count>>8)];
				break;
		default:DAPort = TableSin[count>>8];
	}
		 		

你可能感兴趣的:(51单片机毕业设计,单片机,stm32,嵌入式硬件)