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

2023-11-05

摘要:

本课题设计了一个基于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;
				else
					DAPort = 0x00;
				break;
		case 2:	DAPort = TableTriangle[count>>8];
				break;
		case 3:	DAPort = TableSaw[256-(count>>8)];
				break;
		default:DAPort = TableSin[count>>8];
	}
		 		
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 上班之路 华为OD真题 200

    public class Main public static char map 地图 public static int t 转弯次数 public static int c 路障个数 public static int n 地图行数 p
  • Android 项目必备(十一)--> 轮询操作

    文章目录 前言 实战 前言 什么叫轮询请求 简单理解就是 App 端每隔一定的时间重复请求的操作就叫做轮询请求 比如 App 端每隔一段时间上报一次定位信息 App 端每隔一段时间拉去一次用户状态等 这些应该都是轮询请求 为何不用长连接代替
  • ibm服务器开机后显示器闪烁,IBM E50彩色显示器,开机后电源指示灯闪烁,机内有“咔嗒”声,黑屏...

    经观察发现 咔嗒 声是消磁继电器断开 闭合的声音 经测量 该继电器13V供电电压时有时无 该故障现象特别 不易判断 但从屏幕无显示这一故障现象入手 可初步判定故障范围可能在电源电路和行扫描电路 首先 不开机直观检查相关电路 未见异常 然后测
  • 由bibtex生成引用文献字符串

    word 文档写引用文献 用 mendeley 的插件生成的效果似乎一般 用法见 1 2 而且自己改格式的那个网页令人火大 可能我网速问题 用 python 写了个脚本 通过解析 bibtex 来生成 格式自编 项目页见 4 Code 目前
  • C++的函数_默认参数详解

    案例 int func int a int b 10 return a b int main func 10 return 0 注意事项 1 实现的函数中参数有默认参数 调用时如再传入 默认参数的值被替换为传入的值 func 10 20 r
  • vue报错

    启动vue项目时报如下错误 可是我的代码里并没有matched 后来才发现是路由引入错误 在 main js 文件中 上面的 import router from router 这个语句的前面 router 中的 R 必须的小写 不然就会出
  • 《substrate 快速入门与开发实战》

    视频地址 https www bilibili com video BV1C4411U7Rv substrate的升级过程 编写的runtime代码 gt 编译后 得到runtime的wasm二进制文件 gt 通过链上的治理模块发送升级ru
  • 关于nodejs中使用fluent-ffmpeg模块、ffmpeg工具的使用心得

    类人猿Blog 欢迎来到我的博客 您好 这是本人第一次写博客 请多多指教 nodejs中使用 fluent ffmpeg 详细方法和系统配置 适应于 windows和 linux 特别是在 redhat6 x中得以验证通过 简介 我们都知道
  • 对于c++中模板函数的一点体会

    何为模板函数 从字面上就可以看出来模板函数必须具备通用性 举个简单却很实用的例子 交换两个值的函数Swap 交换两个字符型void Swap char a char b 交换两个整型void Swap int a int b 交换两个浮点型
  • 【RabbitMQ教程】“Hello World”工作队列模式

    目录 前言 Hello World 工作队列模式介绍 消息模型 入门案例代码示例 自动ACK 消息确认机制 自动ACK存在的问题 演示手动ACK 前言 1 将 Hello World工作队列模式 单独抽出来细讲 目的是借助这个模式好好讲一下
  • PostgreSQL出现死锁该如何解决

    目录 什么是数据库死锁 定位死锁 死锁可能原因及解决办法 1 索引使用不当导致的死锁问题 2 不同事务之间的访问顺序问题 避免死锁的建议 附 数据库中常见的死锁原因与解决方案 总结 什么是数据库死锁 在操作系统领域当中 死锁指的是两个或者两
  • linux下飞鸽传书,ipmsg的安装(支持中文名文件传输,以及文件夹传输)

    一 下载 飞鸽 传书 http www ipmsg org archive g2ipmsg 0 9 5 tar gz 二 解压 tar zxvf g2ipmsg 0 9 5 tar gz cd g2ipmsg 0 9 5 三 修改参数 使它
  • linux 固定 ip 地址

    文章目录 查看当前ip 修改配置文件 查看当前ip ip addr ifconfig 修改配置文件 vim etc sysconfig network scripts ifcfg ens33 原来是这样的 TYPE Ethernet PRO
  • 软件测试-面试题

    1 什么是需求文档测试 测试需求中是否存在逻辑矛盾以及需求在技术上是否可以实现 2 什么是设计文档测试 测试设计是否符合全部需求以及设计是否合理 3 什么是 测试 Alpha测试 测试 是由一个用户在开发环境下进行的测试 也可以是公司内部的
  • SpringBoot 集成Redisson 提示:java.lang.ClassNotFoundException: **.redis.connection.ReactiveRedisConnec

    SpringBoot 集成Redisson 提示如下错误信息 Caused by java lang ClassNotFoundException org springframework data redis connection Reac
  • Vue安装less报错

    使用npm安装less 指定版本为5 npm install save less less loader 5 报错 npm ERR code ERESOLVE npm ERR ERESOLVE unable to resolve depen
  • 渗透测试面试题--日更(1-9day)

    day one 1 拿到一个待检测的web站 渗透测试思路 答 1 信息收集 获取域名的whois信息 获取注册者的邮箱姓名电话等 查服务器的旁站以及子域名站点 因为主站一般比较难 所以可以先看看旁站有没有通用cms或者其他漏洞 查看服务器
  • 华为OD机试真题-单词接龙-2023年OD统一考试(B卷)

    题目描述 单词接龙的规则是 可用于接龙的单词首字母必须要前一个单词的尾字母相同 当存在多个首字母相同的单词时 取长度最长的单词 如果长度也相等 则取字典序最小的单词 已经参与接龙的单词不能重复使用 现给定一组全部由小写字母组成单词数组 并指
  • 基于高德地图API — 绘制热力图初尝试

    初次了解高德地图 并尝试在地图的基础上绘制热力图 官方传送链接高德开放平台 前提准备 点击注册开发者账号 登录成功后 点击左侧菜单栏 应用管理 如图所示 点击 添加 获取API 服务平台 一项请选择 Web 端 JSAPI 回到页面 引入文
  • 基于DAC0832的信号发生器设计与实现(源码+原理图+PCB)

    摘要 本课题设计了一个基于DAC0832的信号发生器 使之输出不同频率的正弦波 三角波 锯齿波和方波 并通过按键切换不同的波形 也可以改变频率以及频率变化的步进 本方案选择了DAC0832作为核心芯片 并与51单片机结合 设计出一款建议的高