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

news/2025/2/3 18:55:20/

摘要:

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

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

能实现以下几种功能:

(1)用户可以通过按键设定频率、波形、幅度这些参数。
(2)本系统输出幅度范围为0.1VPP~5VPP。最小步进值为0.1VPP。
(3)本系统输出方波、三角波、正弦波和锯齿波。最小步进值为1HZ。
(4)其中方波的占空比可通过安检来调节。
(5)系统所有的设置的参数都能在LCD1602上显示
在这里插入图片描述
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,判断是否够显示的个数,不够则地址加一取下一个要显示的字符或数据。
在这里插入图片描述

系统原理图

在这里插入图片描述

pcb设计

在这里插入图片描述

主函数

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;elseDAPort = 0x00;break;case 2:	DAPort = TableTriangle[count>>8];break;case 3:	DAPort = TableSaw[256-(count>>8)];break;default:DAPort = TableSin[count>>8];}

http://www.ppmy.cn/news/171792.html

相关文章

Android 调用系统隐藏的类和方法

1.Android系统隐藏的类和方法 阅读Android源码时,会发现很多被UnsupportedAppUsage注解的方法,这些方法不能被外部应用访问。 比如Android中的PackageParser类,这个类是在android.content.pm包下面: 可以看到这个类是隐藏的&…

小话圆圈C怎么打出来的?

只需要Alt 169即可,就这么任性,试一下吧©

matlab .mat转.txt

matlab 处理数据将.mat转.txt, 代码如下 clear all load(MixPA.mat) Tcell2table(protein_A); #数据集里面有个名字 writetable(T,Mix.AC_P1.txt); 我应该集齐了所有文件转换处理的方法,摸摸自己,今天又是洒泪的一天,嘿嘿嘿……

如何在WordPress网站底部中间添加备案号

如何在WordPress网站底部中间添加备案号 为什么要添加备案号添加备案号 为什么要添加备案号 之所以写下这篇文章,原因是之前搭了一个博客网站,备了案,但是没有在网页的底部添加备案号 然后我们的腾讯云客服小姐姐就电话通知了一下&#xff0…

c库(上)----小话c语言(17)

[Win7 vs2010] Q: C库和系统api之间是什么关系? A: 如下图,简单示意: 可以看出,C库一部分是使用系统api实现自身功能(比如文件操作),另一部分并不会直接依赖系统api,单独实现功能(…

基本输入输出,基本但不简单----小话c语言(4)

开头将文章中代码所在的环境介绍下: [Mac-10.7.1 Lion Intel-based] Q: 看到stdio.h中有这么多关于输入或者输出的函数,怎么会这么多? A: 其实基本的函数不多,不过从易于上层使用的角度,又被封…

小话游戏脚本(一)

小话游戏脚本(一) ( 题记:近来在网上学习到一个新的观点(应该是来自刘未鹏的BLOG :) ):书写是为了更好的学习,这与之前脑子里传道授业解惑的观点颇为迥异,品一品又颇以为然,事物不都是两面的吗,这只是看待角…

小话HTTP Authentication

什么是Authentication? 首先解释两个长的很像、容易混淆的单词,Authentication(鉴定、认证)和Authorization(授权)。 Authentication就是要证明你是谁。举个例子,你告诉别人你的名字叫Alice&a…