单片机信号发生器(C语言中断方式) 附电路图、程序清单 ,无比精致。

合集下载

STC51单片机的函数信号发生器(c语言)

STC51单片机的函数信号发生器(c语言)

STC51单片机的函数信号发生器(c语言)————————————————————————————————作者:————————————————————————————————日期:基于51单片机的函数信号发生器设计报告摘要本系统利用单片机AT89C52采用程序设计方法产生锯齿波、三角波、正弦波、方波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产生10Hz—10kHz的波形。

通过键盘来控制四种波形的类型选择、拨码开关控制频率的变化,并通过液晶屏1602显示其各自的类型以及数值,系统大致包括信号发生部分、数/模转换部分以及液晶显示部分三部分,其中尤其对数/模转换部分和波形产生和变化部分进行详细论述。

关键词:单片机AT89S52、DAC0832、液晶1602目录1. 系统设计1.1 设计要求1.2方案设计与论证1.2.1 信号发生电路方案论证 1.2.2 单片机的选择论证1.2.3 显示方案论证1.2.4 键盘方案论证1.3 总体系统设计1.4 硬件实现及单元电路设计1.4.1 单片机最小系统的设计1.4.2 波形产生模块设计1.4.3 显示模块的设计1.4.4 键盘模块的设计1.5 软件设计流程1.6 源程序2. 输出波形的种类与频率的测试2.1 测试仪器及测试说明2.2 测试结果3、附录3.1 参考文献3.2 附图1、系统设计经过考虑,我们确定方案如下:利用AT89C52单片机采用程序设计方法产生锯齿波、三角波、正弦波、方波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,通过键盘来控制四种波形的类型选择、频率变化,最终输出显示其各自的类型以及数值。

1.1、设计要求1)、利用单片机采用软件设计方法产生四种波形2)、四种波形可通过键盘选择3)、波形频率可调4)、需显示波形的种类及其频率1.2方案设计与论证1.2.1 信号发生电路方案论证方案一:通过单片机控制D/A,输出四种波形。

89C51单片机设计多功能低频函数信号发生器,能产生方波、正弦波、三角波等信号波形

89C51单片机设计多功能低频函数信号发生器,能产生方波、正弦波、三角波等信号波形

波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。

本次课程设计使用的AT89S51 单片机构成的发生器可产生锯齿波、三角波、正弦波等多种波形,波形的周期可以用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑等优点。

在本设计的基础上,加上按钮控制和LED显示器,则可通过按钮设定所需要的波形频率,并在LED上显示频率、幅值电压,波形可用示波器显示。

二、系统设计波形发生器原理方框图如下所示。

波形的产生是通过AT89S51 执行某一波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。

在AT89S51的P2口接5个按扭,通过软件编程来选择各种波形、幅值电压和频率,另有3个P2口管脚接TEC6122芯片,以驱动数码管显示电压幅值和频率,每种波形对应一个按钮。

此方案的有点是电路原理比较简单,实现起来比较容易。

缺点是,采样频率由单片机内部产生故使整个系统的频率降低。

1、波形发生器技术指标1)波形:方波、正弦波、锯齿波;2)幅值电压:1V、2V、3V、4V、5V;3)频率:10HZ、20HZ、50HZ、100HZ、200HZ、500HZ、1KHZ;2、操作设计1)上电后,系统初始化,数码显示6个…-‟,等待输入设置命令。

2)按钮分别控制“幅值”、“频率”、“方波”、“正弦波”、“锯齿波”。

3)“幅值“键初始值是1V,随后再次按下依次增长1V,到达5V后在按就回到1V。

4)“频率“键初始值是10HZ,随后在按下依次为20HZ、50HZ、100HZ、200HZ、500HZ、1000HZ循环。

三、硬件设计本系统由单片机、显示接口电路,波形转换(D/A)电路和电源等四部分构成。

电路图2附在后1、单片机电路功能:形成扫描码,键值识别、键处理、参数设置;形成显示段码;产生定时中断;形成波形的数字编码,并输出到D/A接口电路和显示驱动电路。

单片机课程设计2——数控低频正弦信号发生器

单片机课程设计2——数控低频正弦信号发生器

单片机课程设计2 高精度数控低频正弦信号发生器余水宝信息科学与工程学院2005年6月高精度数控低频正弦信号发生器任务书一、任务设计一款基于AT89C51单片机和锁相技术的高精度数控低频正弦信号发生器。

二、设计要求1、基本要求⑴采用DDFS(直接数字频率合成)和锁相技术, 实现1Hz~1KHz变化的正弦信号。

⑵通过面板键盘控制输出频率,频率最小步进1Hz。

⑶输出双极性。

⑷用LED数码管实时显示波形的相关参数。

⑸写出详细的设计报告,给出全部电路和源程序。

2、发挥部分⑴不改变硬件设计,将上限频率扩展到10KHz。

⑵不改变硬件设计,扩展实现三角波和方波信号。

⑶可通过PC机上的“虚拟键盘”,实现频率等参数的控制。

⑷实现对幅度的控制。

高精度数控低频正弦信号发生器函数信号发生器作为一种常用的信号源,广泛应用于电子电路、自动控制和科学研究等领域[7]。

它是一种为电子测量和计量工作提供符合严格技术要求的电信号设备,因此是电子测试系统的重要部件,是决定电子测试系统性能的关键设备。

它与示波器、电压表、频率计等仪器一样是最普通、最基本的,也是得到最广泛应用的电子仪器之一。

1总体方案论证与设计数字式函数信号发生器的实现方案很多,主要有如下几种:方案一:采用微处理器和数模转换器直接合成的数字式函数信号发生器。

这种信号发生器具有价格低,在低频范围内可靠性好,体积小,功耗低,使用方便等特点,它输出的频率是由微处理器向数模转换输出数据的频率和信号在一个周期内的采样点数(N)来决定的,因此受单片机的时钟频率的限制很大,如果单片机的晶振取12MHz,则单片机的工作频率为1MHz,若在一个周期内输出360个数据,则输出信号的频率理论上最高只能达到2777Hz。

实际上单片机完成一次数据访问并输出到D/A电路,至少要5个机器周期,因此实际输出信号的频率只有500Hz 左右。

即使增大晶振频率,减小一个周期内输出数据个数,在稍高的频率下输出的波形频率误差也是很大的,而且计算烦琐,软件编程麻烦,控制不方便。

基于51单片机的低频信号发生器(C语言).

基于51单片机的低频信号发生器(C语言).

3
第一章 绪论
1.1 选题背景及其意义
信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。各种 波形曲线均可以用三角函数方程式来表示。能够产生多种波形,如方波、锯齿波、三角 波、正弦波的电路被称为函数信号发生器。在通信、广播、电视系统,在工业、农业、 生物医学领域内,函数信号发生器在实验室和设备检测中具有十分广泛的用途。
第三章 主要电路元器件介绍----------------------------------5
3.1 AT89C51 单片机简介-------------------------------------------------------5 3.1.1 单片机简介--------------------------------------------------------5 3.1.2 主要特性----------------------------------------------------------5 3.1.3 管脚功能说明------------------------------------------------------5 3.2 DAC0809-----------------------------------------------------------------6 3.2.1 工作原理----------------------------------------------------------6 3.2.2 DAC0832的主要特性参数----------------------------------------7 3.2.3 DAC0832 引脚功能简介------------------------------------------8 3.3 数码显示管--------------------------------------------------------------8 3.3.1 原理及分类---------------------------------------------------------8 3.3.2 显示器的工作方式---------------------------------------------------8 3.3.3 显示管字型码-------------------------------------------------------9

基于单片机函数信号发生器的程序

基于单片机函数信号发生器的程序

基于单片机函数信号发生器的程序下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!介绍在电子电路测试和学习中,函数信号发生器是一个非常重要的工具。

单片机信号发生器

单片机信号发生器

多功能函数发生器跨功能函数发生器摘要交流函数发生器主要实现常用波形的产生和上位机的同步控制,可以产生一系列调制波。

论文详细阐述了主机的总体结构、软硬件实现和调试方法。

关键词:单片机; DDS;上位机付费多功能函数发生器摘要支付多功能函数发生器主要实现共发生和PC波形同步控制,可以产生一系列调制波。

本文阐述了多功能函数发生器的一般结构、软硬件实现和上位机调试方法。

关键词:单片机; DDS ;个人电脑目录1简介11.1项目背景11.2项目主要任务12互换多功能函数发生器12.1选项12.2整体结构框图23 STC12C5A60S2单片机介绍34模拟开关CD4066介绍44.1主要特点44.2芯片管脚和电路55 DDS模块介绍55.1特征55.2 DDS7的优势51 简介1.1 项目背景函数发生器是实验室的基本设备之一。

目前,一些标准产品被广泛使用。

它们虽然功能齐全,性能指标高,但价格昂贵,很多功能不可用。

该设计集成了一个运算放大器作为应用的核心。

通过增加外围器件,构成运算和正反馈电路,满足振荡条件,产生一定的波形。

最后,利用差分电路的传输特性,将三角波转换为正弦波。

该仪器具有结构简单、成本低、体积小、便于携带等特点。

虽然功能和性能指标赶不上标准的信号发生器,但足以满足一般的实验要求。

函数发生器作为一种常见的信号源,是现代测试领域应用最广泛的通用仪器之一。

在各种电子元器件、元器件及成套设备的开发、生产、测试和维护中,要学会有一个信号源,它可以产生不同频率和波形的电压、电流信号并加到装置或设备中。

正在测试中。

与其他仪器一起观察和测量被测仪器的输出响应,以分析和确定其性能参数。

信号发生器是电子测量领域中最基本、应用最广泛的电子仪器。

它可以产生多种波形信号,如正弦波、三角波、方波等,因此广泛应用于通信、雷达、导航、航空航天等领域。

1.2 项目主要任务任务和要求:1. 可编程产生几种常用信号;2、信号风格可变,正弦波、三角波、方波、2PSK、LFM;3、变频,1MHz - 10MHz,2PSK调制信号周期0.1ms - 1ms,LFM带宽为中心频率的1/100-10%;4、输出幅度可变,可程控或手动调节。

51单片机信号发生器

51单片机信号发生器

基于51单片机的波形发生器的设计摘要这个系统是基于AT89C51单片机的波形信号发生器。

使用AT89C51单片机作为控制核心,该系统由数字/模拟转换电路(DAC0832)、运放电路(LM324)、按键电路和8位数码管等组成。

通过按键可控制方波、三角波、正弦波的产生,并且用数码管指示其对应的频率。

这个设计方法简单、性能良好,这个系统可在多种需要低频信号的场所使用,它具有良好的实用性。

关键词:8951单片机;数字模拟转换电路;运放电路;8位数码管一、设计题目分析。

1、题目分析:基于51单片机的波形发生器设计,即由51单片机控制产生正弦波、方波、三角波等的多种波形。

图1:系统流程示意图2、题目要求:(1) 系统具有产生正弦波、三角波、方波三种周期性波形的功能。

(2) 用键盘控制上述三种波形(同周期)的生成。

(3) 系统输出波形的频率范围为1Hz~1MHz,重复频率可调,频率步进间隔≤100Hz,非正弦波的频率按照10次谐波来计算。

(4) 系统具有显示输出波形的类型、重复频率和幅度的功能。

二、波形发生器系统设计方案1、设计思路:以AT89C51单片机作为系统的控制核心,其中P0口接DAC0832作为信号输入同时进行数模转换,P1口用来接键盘,P2口接LED显示器,由程序来控制P0口产生的波形,再由按键和按键次数控制波形的种类、频率的大小,并且能够通过按键来控制波形频率值和幅度值。

由运算放大器DAC0832来实现输出电流到电压的转换,即实现数字信号到模拟信号的转换。

另外在LED上显示实时的频率值,产生的波形在示波器显示。

2、设计框图及系统介绍:图2:框图设计3、选择合适的设计方案:方案一:采用模拟分立元件或单片函数发生器就可以产生正弦波、方波、三角波,方法简单。

通过调整外部元件也可以实现输出频率的改变,但采用模拟元器件造成元件分散性太大,从而产生的频率稳定性较差、抗干扰能力低、灵活性较差、而且精度低,不能实现任意波形转换和波形运算输出等方面自主控制功能。

信号发生器单片机程序PCF8591

信号发生器单片机程序PCF8591

/*置时钟线为高使数据线上数据有效*/
_Nop();
_Nop();
retc=retc<<1;
读数据位 接收的数据位放入 中 if(SDA==1)retc=retc+1; /*
,
retc */
_Nop();
_Nop();
}
SCL=0;
_Nop();
_Nop();
return(retc);
}
/********************************************************************
信号发生器程序信号发生器程序信号发生器程序信号发生器程序includereg52hincludeincludeunsignedcharcodesin1001280013597143921518015958167251747518918196052026520895214942205822586230752352323929242912460824878251012527525400254752550025475254002527525101248782429123929235232307522586220582149420895202651960518918182071747516725159581518014392135971280012003112081042096428875812573936682599553354705410635423014252520771671130999272249932520012510012520032549972299213091671207725253014354241064705533559956682739381258875964210420112081200312800sbitp14p14

基于51单片机的信号发生器

基于51单片机的信号发生器
6
哈尔滨工业大学(威海)课程设计报告
图 3-3 DAC0832 与单片机的接口电路
图 3-4 键盘和单片机的连接电路图
3.6 显示电路
(1)运算放大电路 运算放大器型号为 UA741,它是一种高增益运算放大器,用于军事、工业和商
7
哈尔滨工业大学(威海)课程设计报告
业应用。这类单片硅整集成电路器件提供输出短路保护和闭锁自由运作。 运算放大器与 DAC0832 接口电路如图 3-5 所示。
信号发生器是一种经常使用的设备,若按照传统的设计方法,由纯粹的物理 器件构成,存在许多弊端,如:体积较大、重量较沉、移动不方便、信号失真较 大、波形形状调节过于死板,无法满足用户对精度、便携性、稳定性等要求。研 究设计出一种具有频率稳定、准确,波形质量好,便携性好等特点的波形发生器 来满足工业领域对信号源的要求,具有较好的市场前景。
(1)电流稳定时间 1us; (2)可单缓冲、双缓冲或直接数字输入; (3)单一电源供电(+5V~+15V); (4)低功耗,200mW。 DAC0832 结构: (1)D0~D7:8 位数据输入线,TTL 电平,有效时间应大于 90ns(否则锁 存器的数据会出错);
5
哈尔滨工业大学(威海)课程设计报告
CS
VCC
WR1 ILE(BY1/BY2)
GND
WR2
DI3
XFER
DI2
DI4
DI1
DI5
DI0
DI6
VREF
DI7
RFB
IOUT2
GND
IOUT1
20 19 18 17 16 15 14 13 12 11
U3
A
DAC0832
B OP1P

基于51单片机的信号发生器-完整电路、程序.

基于51单片机的信号发生器-完整电路、程序.
曹晖 0945531215 电子信息工程二班
摘要
本文以STC89C51单片机为核心设计了一个低频函数信号发生器。信号发生器采用数字波形合成技术,通过硬件电路和软件程序相结合,可输出自定义波形,如正弦波、方波、三角波、三角波、梯形波及其他任意波形,波形的频率和幅度在一定范围内可任意改变。波形和频率的改变通过软件控制,幅度的改变通过硬件实现。本文介绍了波形的生成原理、硬件电路和软件部分的设计原理。本系统可以产生最高频率798.6HZ的波形。该信号发生器具有体积小、价格低、性能稳定、功能齐全的优点。
2.1.2改变幅度方案:
将输出电压通过一个运算放大器的放大挺简单。
2.2工作原理
数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的方法来获得所需要的波形。89C51单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:中央处理器CPU、随机存取存储器RAM、只读存储器ROM、I/O接口电路、定时器/计数器以及串行通讯接口等,只要将89C51再配置键盘及、数模转换及波形输出、放大电路等部分,即可构成所需的波形发生器,其信号发生器构成系统框图如下图所示。
主程序流程图
3.2.2中断服务程序:
本程序中两个外部中断分别起到了控制波形和频率的作用。在程序中还加入了消抖部分。
4.软件仿真
4.1系统仿真波形:
5设计总结
基于单片机的信号发生器设计,这个信号发生器的设计中涉及到一个典型的控制过程。通过单片机控制一个模数转换器DAC0832产生所需要的电流,然后使用运算放大器LM324可以将其电流输出线性地转换成电压输出,再将电压经过运算放大器的放大,可以得到足够幅度的信号。通过程序的控制,可以产生一系列有规律的波形。这样一个信号发生装置在控制领域有相当广泛的应用范围。

用单片机制作的信号发生器

用单片机制作的信号发生器

用单片机制作的信号发生器【摘要】本文介绍一种用8751单片机构成的波形发生器,可产生方波、三角波、梯形波、锯齿波、正弦波和脉冲信号等多种波形,波形的周期可用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑、性能优越等特点。

信号发生器一般区分为函数信号发生器及任意波形发生器,而函数波形发生器在设计上又区分出模拟及数字合成式。

【关键词】信号发生器单片机 8751单片机 ADC8032Title: signal generatorA bstract: This article introduced one kind the profile generator whichconstit utes with 8,751 monolithic integrated circuits, may have thesquare-wave, the tr iangle wave, the trapezoidal wave, the saw-toothwave, the sine wave and the pul se signal and so on the many kinds ofprofiles, the profile cycle may use the ch ange of program, and mayaccording to need to choose 单极性 the output or 双极性 theoutput, has the line simply, the structure compact, the performance issuper ior and so on the characteristic. Signal generating devicegeneral discriminatio n for function signal generating device and freeprofile generator, but the func tion profile generator differentiatesthe simulation and the digital integrated model in the design.Keywords signal generator singlechip 8751 singlechip ADC08323目录第一章绪论第二章外围设备2.1 复位电路2.2 系统时钟第三章单片机内部结构及其资源分配3.1 单片机的内部结构3.2 ADC0832内部结构及配置第四章编写程序及其对程序的简易分析第五章与同类波波形发生器作比较5.1几种简单的占空比可调脉冲电路5.2单片多波形发生器结论致谢参考文献第一章绪论单片机一直被视为难学的课程之一,“难”的方面是多方面的,如涉及知识面广,该念难于理解,但是一个不可忽略的原因就是“单片机”难以自学,且没有足够的实验实践机会。

单片机MC51函数信号发生器

单片机MC51函数信号发生器

目录1.系统总体方案选择与说明.............. (1)2.系统结构框图与工作原理.............. . (1)3.各单元硬件设计说明及计法.............. .. (1)4.软件设计与说明(包括流程图).............. . (8)5.调试结果与必要的调试说明.............. . (14)6.使用说明.............. .............. .. (18)7.程序清单.............. .............. . (18)8.总结.............. .............. .. (34)9.参考文献.............. .............. .. (36)附录.............. .............. .. (36)附录A 系统原理图一、系统总体方案选择与说明为了实现低频信号的产生和频率以及移相角度的显示我们采用的用D/A数模转换电路进行波形的输出。

并通过数码管进行显示。

通过按键进行波形的选择以及频率和移相的调整。

二、系统结构框图与工作原理系统选用AT89S52作为CPU;波性选择及频率和移相角调整:通过按键来选择来产生中断0,以实现波形的选择,通过按键来产生中断1,实现频率和移相角度的选择,通过另外两键的是实现加减;数模转换及波形输出:通过DAC0832来实现模数转换,并通过两级运放实现双极性输出。

系统结构框图如图1所示图1 系统结构框图三、各单元硬件设计说明及计算方法1)主电路如图2所示图2 主电路2)功能键电路通过建S1来产生外部中断1(INT1),由中断1 的中断程序来记录按键的次数(CNT_EX1(0-2))。

不同键数代表的功能不一样。

相应的处理程序根据CNT_EX1,实现调频和移相。

通过S2键来产生外部中断0(INT0),由中断0 的中断程序来记录按键的次数(CNT_EX0(0-5))。

用AT89C51单片机设计的低频信号发生器

用AT89C51单片机设计的低频信号发生器

用AT89C51单片机设计的低频信号发生器电子爱好者在日常电子电路设计中,经常要用到各种波形的信号源,下面介绍一款用单片机设计的低频信号发生器。

该低频信号发生器可以产生锯齿波、三角波,正弦波、方波等常用波形,并可以方便地改变各种波形的周期或频宰,具有线路简单、结构紧凑、成本低、性能优越、操作方便等优点。

一、系统硬件设计1、电路组成及芯片选择本设计的总体框图如图l所示。

选用AT89C51单片机作控制器;D/A转换器选用8位D/A转换芯片DAC0832它与微处理器完全兼容,价格低廉、接口简单、转换控制容易;输出运算放大器选用NE5532P芯片,它的DC和AC特性良好,其特点是低噪声、高输出驱动、高增益、低失真、高转换率,具有输入保护二极管和输出保护电路。

2、电路工作原理电路如图2所示。

单片机的Pl口接按键SI~s4和四只发光二极管.SI—S4分别控制产生锯齿波、三角波、正弦波和矩形泼(含方波).而四只发光二极管则作为不同波形的指示灯:单片机的外部中断口1-3.2和P3.3分别接按键55、S6.用于调整各信号的频率;D/A转换器的数据输入端与单片机的的P0口相连,将单片机产生的各种波形的数字信号送人DAC0832进行数模转换,OAC0832的输入寄存器选择信号cs、输入寄存器写选通信号WR1受单片机P2口控制,DAC0832的DAC寄存器写选通信号WR2和数据传送信号XFER直接接地,单片机与DAC0832形成“单缓冲”方式连接:经DAC0832数模转换的模拟信号送人运算放大器NE5532P进行二级放大输出,得到最终的输出信号波形。

二、系统软件设计系统程序流程如图3所示。

程序运行肘,依次判断S1一S4按键是否接下,当SI按下时输出锯齿波,当按键S2按下时输出三角波,当按键S3按下时输出正弦泼,当按键S4按下时输出方渡。

每个波形输出后都要查询按键S6、S7.看是否进行频率调整。

1、锯齿波设计产生锯齿波的原理.是逐步向单片机PO口加1,同时通过DAC0832进行实时的数横转换输出,直到PO的值溢出为零,这样周而复始,从而输出锯齿渡信号。

PIC单片机课程设计:信号发生器

PIC单片机课程设计:信号发生器

福州大学《PIC课程设计》信号发生器哈哈,福大的学弟学妹们有福了。

学生姓名: XXXXXXXXXX学号: ******XXXX专业班级:电气学院2011级XX班指导教师: XXXXXXXXX二○一四年 6 月 27 日目录1、概述 (1)2、课程设计内容 (1)2.1、整体方案 (1)2.2、硬件设计 (2)2.3、软件设计 (4)3、仿真结果 (7)4、设计体会 (11)1、概述信号发生器是一种常用的信号源,广泛应用于电子电路、自动控制系统和教学实验等领域。

目前使用的信号发生器大部分是函数信号发生器,且特殊波形发生器的价格昂贵。

本设计采用PIC16F887单片机作为逻辑控制单元,利用MCP4821芯片转换单片机发出的数据,经过放大器放大产生正弦波、三角波、锯齿波和方波信号。

通过外部按键切换波形,通过电位计经过AD转化控制信号周期大小。

本设计利用液晶显示芯片1602作为显示单元,显示波形的类型和波形的周期。

信号发生器在显示生活中也起到很重要的作用,是电子技术领域的一种常用设备,长期以来都是由模拟电路构成的。

这类仪器作为信号源,在高频范围内其频率稳定度高,可调性好。

然而,在科学研究和生产实践中,如工业过程控制、生物医学等领域,通常需要用低频信号源。

由模拟电路生成低频信号性能不能令人满意,而且用于低频其RC很大。

大电阻、大电容在制造上有困难,参数准确度难以保证,同时体积大、漏电损耗显著。

利用单片机用程序设计方法产生波形,其频率底限几乎无限度、稳定度好,频率幅值可以由电位计调整。

本设计实现的功能为:1、装置能生成正弦波、三角波、锯齿波、方波,通过波形切换按键进行切换。

2、装置波形周期能通过电位计调节。

3、生成波形设有两档,以满足更高周期(更低频率)的要求。

2、课程设计内容2.1、整体方案本设计采用PIC16F887单片机作为逻辑控制单元,通过MCP4821芯片转换单片机发出的数据,经过放大器放大产生正弦波、三角波、锯齿波和方波信号。

单片机课程设计---信号发生器.

单片机课程设计---信号发生器.

课程设计信号发生器学生姓名:安小鹏学号: 131001201学院:理学院专业:应用物理指导教师:任世伟刘天山2016年 06 月 28 日信号发生器摘要:本文以STC89C51单片机为核心设计了一个低频函数信号发生器。

信号发生器采用数字波形合成技术,通过硬件电路和软件程序相结合,可输出自定义波形,如正弦波、方波、三角波、锯齿波、波形的频率和幅度在一定范围内可任意改变。

波形和频率的改变通过软件控制,幅度的改变通过硬件实现。

介绍了波形的生成原理、硬件电路和软件部分的设计原理。

关键词:单片机,信号发生器,D/A转换一、设计要求利用单片机的控制及编程能力,采用查询法设计一个函数发生器,要求能够产生方波、正弦波,分析采样点数量与频率之间的关系。

二、设计原理向单片机输入所需要的程序并通过扩展D/A转换接口就可以方便地产生正弦信号。

正弦波的产生比较特殊,它不是由单片机直接产生波形的,它只能产生连续的阶梯波来向正弦波不断地逼近。

很显然,在一个周期内阶梯波的阶梯数目越多,单片机输出的波形也就越接近正弦波。

如图所所示一般而言,计算机要形成正弦波信号的最简便办法就是使用D/A 转换器,因计算机可以隔一定时间向D/A转换器输出一个数字量,而输出的该数字量为相应时刻的函数值,则在D/A转换器输出端就可以得到一个相应的函数信号。

D/A转换器形成的函数信号实际上是一个阶梯状波。

所以用D/A转化器形成的正弦波信号除了正弦基频分量(所需要的信号)外,还包含了各种高次谐波与余弦基频分量。

因而形成的正弦波信号只能是一逼近的正弦波信号。

为了正弦信号的数字量逼近,可以有多种方案。

而逼近一个正弦函数的精确程度是和正弦波信号的细分度N和D/A转换器的分辨率直接有关。

细分度N越大产生的正弦信号就越精确,但是这要求计算机速度也相应的高;D/A转化器的分辨率越高产生的正弦信号也就越精确,但是D/A转化器的分辨率受其价格和计算速度以及字长的制约,不宜过高,应取一个合理的分辨率。

信号发生器(正弦波,方波,三角波)51单片机C语言代码

信号发生器(正弦波,方波,三角波)51单片机C语言代码

/**************************************//* 信号发生器(正弦波,方波,三角波)*/ /*************************************/#include<reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit cs=P2^0;sbit clk=P2^1;sbit din=P2^2;sbit key1=P1^0;sbit key2=P1^1; uchar keydat;uchar flag;被置零立马停止发信号//tlc5615 片选端口//tlc5615 时钟线//tlc5615 传输端口//按键的单片机接口//波形发生终止信号的标志位一旦uchar m,num; uchar dat=0xff;uchar code tosin[141]={//正弦波的编码0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08, 0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16, 0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b, 0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45, 0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63, 0x66,0x69,0x6c,0x6f,0x70,0x71,0x72,0x73,0x74,0x75, 0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e, 0x7f,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x79, 0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x6f,0x6c,0x69, 0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c, 0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30, 0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a, 0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a, 0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01, 0x00};uchar flagsqu; 中断控制)// 方波高低电平控制为 (运用定时器 1void delay(uchar z) //延时函数{uchar x,y;for(x=0;x<110;x++)for(y=z;y>0;y--);}void prepare() {cs=1;din=1;clk=0;cs=0; 为低时进? //tlc5615 的初始化//cs 的上升沿和下降沿必须在clk}/* 用中断来产生方波void Squtranslator(){TR1=1;的持续时间占空比//启动定时器 1 控制高低电平do{do{_wave=0;}while((!flagsqu) && flag==1);// 如果一旦终止信号的//产生可以立马退出循环flagsqu=0;do{_wave=1;}while((!flagsqu) && flag==1); flagsqu=0; }while(flag);flag=1;TR1=0;}*/void Squtranslator() //方波函数{uchar j;uchar dat1=0x7f;while(flag){do{}prepare();dat=dat1;for(j=0;j<12;j++) { din=(bit)(dat>>7);clk=1;dat=dat<<1; clk=0;}cs=1;为低时进行delay(200);if(dat1==0)dat1=0x7f;elsedat1=0;}while(flag);}//将数据的最高位赋给din//一位位的传输//cs 的上升沿和下降沿必须在//使高低电平持续一段时间//完成了0和0x7f 之间的替换clkvoid Tratranslator() //锯齿波的发生函数{uchar j;uchar dat1=0x7f;while(flag){do{prepare();dat=dat1;for(j=0;j<12;j++){din=(bit)(dat>>7);clk=1;dat=dat<<1;clk=0;}cs=1;为低时进行delay(2);dat1--;}while(flag && dat1);do{//将数据的最高位赋给din//一位位的传输//cs 的上升沿和下降沿必须在//稍加延时//一旦有终止信号就可以停止clk{uchar i,j;prepare(); dat=dat1; for(j=0;j<12;j++){din=(bit)(dat>>7); //将数据的最高位赋给 dindelay(2); dat1++;}while(flag && (!(dat1==0x7f)));}}void Sintranslator(uchar wave[],uchar num )//正弦波的转换函数clk=1; dat=dat<<1; clk=0;}cs=1;为低时进行//一位位的传输//cs 的上升沿和下降沿必须在clk//稍加延时uchar dat1;do{for(i=0;i<num;i++){prepare();dat1=wave[i]; //打开片选开始工作for(j=0;j<12;j++){din=(bit)(dat1>>7); //将数据的最高位赋给dinclk=1;dat1=dat1<<1; //一位位的传输clk=0;if(flag==0)break;}cs=1; //cs 的上升沿和下降沿必须在clk 为低时进行delay(1); //稍加延时if(flag==0)break;}}while(flag); //等待控制键的暂停}void keyscan() //切换功能按键返回键值函数{uchar i;for(i=0;i<4;i++){if(key1==0){delay(10);if(key1==0){keydat++;do{}while(!key1); //松手检测if(keydat==4)keydat=1;//加满回零处理}}}}void keycountrl() // 切断输出控制函数{if(key2==0){delay(10);{case 1:if(key2==0)flag=0;do{}while(!key2); //松手检测}}}void main (){uchar temp;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;while(1){do{switch(keydat)//确定定时器的工作方式 //给定时器 0 赋予初值 //开总中断 //开启定时器 0 中断flag=1;do{Sintranslator(tosin,141);}while(flag);break;case 2: flag=1;do{Tratranslator();}while(flag);break;case 3: flag=1;do{Squtranslator();}while(flag);break;default:break;}}while(flag);temp=keydat; // 装载键值while(keydat==temp); // 在这里等待键值的改变}}void Time0() interrupt 1{TH0=(65536-50000)/256; //定时器0 用来扫描按键不断地扫描dTL0=(65536-50000)%256;num++;if(num==4){keyscan();keycountrl();num=0;}}。

基于单片机的多功能信号发生器的源程序及电路图

基于单片机的多功能信号发生器的源程序及电路图

程序源代码#include <REGX52.H>#include <lcd1602.H>#include <AD9833_Serial.H>void Delay1ms(WORD count);//软件延时函数void display_freq(void); //更新频率函数BYTE code Cursor[]={0xC3,0XC4,0XC6,0XC7,0XC8,0XCA,0XCB,0XCC,0x85};//换算光标位置unsigned int a; //控制长时间不操作隐藏光标unsigned char step=4;//移动光标bit flag=0;//控制光标闪烁unsigned long int code Data []={10000000,1000000,100000,10000,1000,100,10,1}; //换算加减值unsigned long int Freqency_Out=1000; //初始化频率输出值unsigned char Wave_Out=1;unsigned char data DY[3] = {0x00,0x00,0x00} ;unsigned char DA;unsigned long int XS;sbit KEY1 = P1^0;sbit KEY2 = P1^1;sbit KEY3 = P1^2;sbit KEY4 = P1^3;sbit KEY5 = P1^4;sbit KEY6 = P1^5;sbit BEEP = P3^7;sbit din = P3^4;sbit clk = P3^5;sbit cs = P3^6;/*us级延时函数*//*******************************************************************/void DelayuS(unsigned int num){while( --num ) ;}/* 软件延时1*m毫秒*/void Delay1ms(WORD count){BYTE i, j;for( ; count>0; count--)for(i=2; i>0; i--)for(j=248; j>0; j--);}void display_freq(void) //显示频率{unsigned char j;unsigned long int temp;temp=Freqency_Out;tab2[3]=temp/10000000+0x30;//tab2[4]=temp%10000000/1000000+0x30;tab2[6]=temp%10000000%1000000/100000+0x30;tab2[7]=temp%10000000%1000000%100000/10000+0x30;tab2[8]=temp%10000000%1000000%100000%10000/1000+0x30;tab2[10]=temp%10000000%1000000%100000%10000%1000/100+0x30;tab2[11]=temp%10000000%1000000%100000%10000%1000%100/10+0x30;tab2[12]=temp%10000000%1000000%100000%10000%1000%100%10+0x30;WriteLCD(0,0xC0);// 设置显示位置为第二行第一个字for(j=0; j<15; j++){WriteLCD(1,tab2[j]);}switch(Wave_Out){case 1:Load_wave(0x2000,Freqency_Out,0xD000);break;case 2:Load_wave(0x2002,Freqency_Out,0xD000);break;case 3:Load_wave(0x2028,Freqency_Out,0xD000);break;}}void display_Wave(void) //变换波形{unsigned char j;switch(Wave_Out){case 1:WriteLCD(0,0x80);Load_wave(0x2000,Freqency_Out,0xD000);for(j=0; j<10; j++){WriteLCD(1,tab1_1[j]);}break;case 2:WriteLCD(0,0x80);Load_wave(0x2002,Freqency_Out,0xD000);for(j=0; j<10; j++){WriteLCD(1,tab1_2[j]);}break;case 3:WriteLCD(0,0x80);Load_wave(0x2028,Freqency_Out,0xD000);for(j=0; j<10; j++){WriteLCD(1,tab1_3[j]);}break;}// 设置显示位置为第二行第一个字}void initTimer(void) //定时器初始化初值{TMOD=0x2; //方式二TH0=0x49; //200usTL0=0x49;}/*******************************************************************/ /* 蜂鸣器响一声*//*******************************************************************/ void beep(){unsigned char y ;for (y=0 ;y<100 ;y++){DelayuS(60) ;BEEP=!BEEP ; //BEEP取反}BEEP=1 ; //关闭蜂鸣器DelayuS(40000) ;}void TLC5615(DA){unsigned char y;DA<<=6; //舍弃前6 位for(y=0;y<12;y++) //从高到低发送{if((DA&0x8000)==0)din=0;else din=1;//din = x&0x8000; //此处不能用din = x&0x8000;cs=0;clk=1;;;;clk=0;DA = DA<<1;}cs=1;}/* 电压转换与显示*//*******************************************************************/Disp_dianya(){DY[2]=XS/100+0x30 ;DY[0]=XS%100 ;DY[1]=DY[0]/10+0x30 ;DY[0]=DY[0]%10+0x30 ;WriteLCD(0,0x8B);WriteLCD(1,DY[2]);//十位数显示WriteLCD(0,0x8D);WriteLCD(1,DY[1]);//个位数显示WriteLCD(0,0x8E);WriteLCD(1,DY[0]);//小数显示}void main(void) //主函数{unsigned char i;initTimer();//定时器初始化TR0=1;ET0=1;DA=175;//DA初始电压XS=5;//显示初始电压TLC5615(DA);LCD_Initial(); //液晶初始化WriteLCD(0,0x80);// 设置显示位置为第一行第一个字for(i=0; i<16; i++){WriteLCD(1,tab1_1[i]);}//每行16个字,且光标自动右移WriteLCD(0,0xC0);// 设置显示位置为第二行第一个字for(i=0; i<16; i++){WriteLCD(1,tab2[i]);} //每行16个字,且光标自动右移Disp_dianya();DDSIni();//初始化AD9833Load_wave(0x2000,Freqency_Out,0xD000);//1KHz正弦信号display_freq();EA=1; //开启总中断WriteLCD(0,Cursor[step]);// 设置显示位置为第二行第一个字while(1){if(KEY2==0)//Right 光标右移{Delay1ms(50);if(KEY2==0){if(a!=0)//在没有光标时,第一次按下向左,向右按键时,光标不移动,只是显示出光标,并闪烁{step++;if(step==9) step=0;}WriteLCD(0,0x0F); // 开显示,开光标,闪烁WriteLCD(0,Cursor[step]);//显示出当前光标的位置EA=1;a=0; //当有按键按下时,开启定时器,计时开始。

51单片机技术应用教程(C语言版)项目九信号发生器设计与制作

51单片机技术应用教程(C语言版)项目九信号发生器设计与制作

1、ADC控制器是不是分辨率高的一定比分辨率低的测 量精度高?
51单片机技术应用活页式教程(C语言版)
项目九:信号发生器的设计与仿真
知识要求 1.掌握A/D、D/A转换器; 2.掌握I2C总线 3.掌握PCF8591软硬件接口
素质要求 1.遵守现场操作的职业规范,具备安全、整洁、规范实施工 作任务的能力; 2.具有良好的职业道德,职业责任感和不断学习的精神; பைடு நூலகம்.具有不断开拓创新的意识; 4.以积极的态度对待训练任务,具有团队交流和协作能力。
9.1.2 DA转换器
关键技术指标:
1. 分辨率
分辩率(Resolution)是D/A转换器对输入量变化敏感程度的描述,与输入数字量的位数有关。 如果数字量的位数为n,则D/A转换器的分辨率为2-n。这就意味着数/模转换器对满刻度2-n做出 反应。
2. 建立时间
建立时间是描述D /A转换速度快慢的一个参数,指从输入数字量变化到输出,达到终值误差 (1/2)LSB最低有效位)时所需的时间。
本次任务使用的AD和DA器件为PCF8591,其使用I2C总线控制,因此我们还要学会I2C控 制的方式。同时,我们还需要学会 Keil C调试程序以及使用Proteus ISIS硬件仿真。
51单片机技术应用活页式教程(C语言版)
项目九:信号发生器的设计与仿真
【引导学习1】
我们即将进入“信号发生器的设计与仿真”的学习,请您通过个人学习、小组 讨论,并结合信息页完成以下学习任务。
它表示A/D转换器实际输出的数字量和理论上的输出数字量之间的差别。常用最低有效位的倍数表示
3. 转换时间
转换速度是指ADC能够重复进行数据转换的速度,即每秒转换的次数。转换时间则是指完成一次A/D转换 所需要的时间(包括稳定时间),是转换速率的倒数。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档