找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1915|回复: 0
打印 上一主题 下一主题
收起左侧

基于51单片机的信号发生器设计报告下载 pdf格式

[复制链接]
跳转到指定楼层
楼主
ID:341894 发表于 2018-5-31 08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

完整的pdf格式文档51黑下载地址:
基于51单片机的信号发生器设计报告.pdf (4.91 MB, 下载次数: 39)



摘要
本次设计利用单片机  AT89C52采用程序设计方法产生三角波、正弦波、方波三种波形,再通过 D/A转换器  DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产生   1Hz—1kHz 的波形。通过键盘来控制三种波形的类型选择、拨码开关控制频率的变化,并通过液晶屏  1602 显示其各自的类型以及数值,系统大致包括信号发生部分、数 / 模转换部分以及液晶显示部分三部分。
本次设计是在   proteus  环境下搭建仿真电路图并进行模拟仿真。
本次设计可以产生   5HZ-50HZ的正弦波, 100HZ-1000HZ的方波, 25HZ-250HZ的三角波。


目    录
1       绪    论........................................................................................ 1
1.1        选题意义............................................................................... 1
1.2        研究现状............................................................................... 1
1.2.1   信号发生器的发展历史.................................................... 1
1.2.2   信号发生器的发展特点.................................................... 2
2       总体设计方案.............................................................................. 5
2.1        设计思路............................................................................... 5
2.1.1   设计内容及要求.............................................................. 5
2.1.2   方案选择及论证.............................................................. 5
2.2        方案结构模块划分................................................................. 6
3       硬件电路的设计........................................................................... 9
3.1        主控电路及主控芯片的选择................................................... 9
3.2        单片机的发展史.................................................................... 9
3.3        单片机的特点...................................................................... 10
3.4     89C51 单片机最小系统......................................................... 10
3.4.1   D/A 转换电路............................................................... 14
3.4.2   按键输入电路................................................................ 17
3.4.3   液晶显示电路................................................................ 18
4       软件设计与仿真......................................................................... 19
4.1     PROTEUS 简介................................................................... 19
4.2        仿真图................................................................................ 20
4.3        原理图................................................................................ 20
4.4        仿真结果图......................................................................... 21
5总结......................................................................................... 25
致    谢.......................................................................................... 27
参考文献....................................................................................... 29
6附录......................................................................................... 31



1     绪    论
1.1     选题意义
随着电子测量及其他部门对各类信号发生器的广泛需求及电子技术的迅速发展
促使信号发生器种类增多,性能提高。尤其随着      70 年代微处理器的出现,更促使信号发生器向着自动化、智能化方向发展。现在,许多信号发生器带有微处理器,因而具
备了自校、自检、自动故障诊断和自动波形形成和修正等功能,可以和控制计算机及    其他测量仪器一起方便的构成自动测试系统                                                           [1] 。当前信号发生器总的趋势是向着宽频率覆盖、低功耗、高频率精度、多功能、自动化和智能化方向发展。
在科学研究、工程教育及生产实践中,如工业过程控制、教学实验、机械振动试验、动态分析、材料试验、生物医学等领域,常常需要用到低频信号发生器。而在我们日常生活中,以及一些科学研究中,锯齿波和正弦波、矩形波信号是常用的基本测试信号。譬如在示波器、电视机等仪器中,为了使电子按照一定规律运动,以利用荧光屏显示图像,常用到锯齿波产生器作为时基电路。信号发生器作为一种通用的电子
仪器,在生产、科研、测控、通讯等领域都得到了广泛的应用。                                                                                                      但市面上能看到的仪
器在频率精度、带宽、波形种类及程控方面都已不能满足许多方面实际应用的需求。加之各类功能的半导体集成芯片的快速生产,都使我们研制一种低功耗、宽频带,能产生多种波形并具有程控等低频的信号发生器成为可能[3]。
1.2     研究现状1.2.1     信号发生器的发展历史
目前,市场上常见的波形发生器多为纯硬件的搭接而成,且波形种类有限,多为    锯齿、正弦、方波、三角等波形。信号发生器作为一种常见的应用电子仪器设备,传    统的可以完全由硬件电路搭接而成。如采用                           555 振荡电路发生正弦波、三角波和方波的电路便是可取的路径之一,不用依靠单片机。但是这种电路存在波形质量差,控制    难,可调范围小电路复杂和体积大等缺点。在科学研究和生产实践中,如工业过程控    制,生物医学,地震模拟机械振动等领域常常要用到低频信号源,而由硬件电路构成
的低频信号其性能难以令人满意,而且由于低频信号源所需的                                                                                             RC很大:大电阻,大电容在制作上有困难,参数的精度亦难以保证:体积大,漏电,损耗显著更是其致命的
弱点。一旦工作需求功能有增加,则电路复杂程度会大大增加。
在 70  年代前,信号发生器主要有两类:正弦波和脉冲波,而函数发生器介于两类之间,能够提供正弦波、余弦波、方波、三角波、上弦波等几种常用标准波形,产



生其它波形时,需要采用较复杂的电路和机电结合的方法。这个时期的波形发生器多 采用模拟电子技术,而且模拟器件构成的电路存在着尺寸大、价格贵、功耗大等缺点,并且要产生较为复杂的信号波形,则电路结构非常复杂。同时,主要表现为两个突出问题,一是通过电位器的调节来实现输出频率的调节,因此很难将频率调到某一固定 值二是脉冲的占空比不可调节                                                [13] 。
在 70 年代后,微处理器的出现,可以利用处理器、   A/D/ 和 D/A ,硬件和软件使波形发生器的功能扩大,产生更加复杂的波形。这时期的波形发生器多以软件为主,实
质是采用微处理器对   DAC的程序控制,就可以得到各种简单的波形。
90    年代末,出现几种真正高性能、高价格的函数发生器、但是                                                                                              HP 公司推出了型号为 HP770S的信号模拟装置系统,它由 HP8770A任意波形数字化和   HP1776A波形发生软件组成。HP8770A实际上也只能产生 8 中波形,而且价格昂贵。不久以后,Analogic 公司推出了型号为 Data-2020 的多波形合成器, Lecroy 公司生产的型号为 9100 的任意波形发生器等。
二十一世纪, 随着集成电路技术的高速发展,  出现了多种工作频率可过         GHz的 DDS 芯片,同时也推动了函数波形发生器的发展,             2003 年,Agilent                    的产品 33220A 能够产生 17 种波形,最高频率可达                      20M,2005 年的产品 N6030A 能够产生高达            500MHZ的频率,采样的频率可达                           1.25GHz。由上面的产品可以看出,函数波形发生器发展很快                            [14] 。
1.2.2     信号发生器的发展特点
而近几年来,国际上波形发生器技术发展主要体现在以下几个方面:
( 1)过去由于频率很低应用的范围比较狭小,输出波形频率的提高,使得波形发生器能应用于越来越广的领域。波形发生器软件的开发正使波形数据的输入变得更加  方便和容易。波形发生器通常允许用一系列的点、直线和固定的函数段把波形数据存  入存储器。同时可以利用一种强有力的数学方程输入方式,复杂的波形可以由几个比  较简单的公式复合成 v=f                                   (t) 形式的波形方程的数学表达式产生。从而促进了函数波形发生器向任意波形发生器的发展,各种计算机语言的飞速发展也对任意波形发生器软
件技术起到了推动作用。目前可以利用可视化编程语言      (如 Visual Basic ,Visual C 等等)
编写任意波形发生器的软面板,这样允许从计算机显示屏上输入任意波形,来实现波形的输入。
( 2)与 VXI 资源结合。目前,波形发生器由独立的台式仪器和适用于个人计算机    的插卡以及新近开发的             VXI 模块。由于 VXI   总线的逐渐成熟和对测量仪器的高要求, 在很多领域需要使用   VXI 系统测量产生复杂的波形,         VXI  的系统资源提供了明显的优越性,但由于开发       VXI        模块的周期长,而且需要专门的                                                VXI 机箱的配套使用,使得波形发生器 VXI 模块仅限于航空、军事及国防等大型领域。在民用方面,                        VXI        模块远远不如台式仪器更为方便。
( 3)随着信息技术蓬勃发展,台式仪器在走了一段下坡路之后,又重新繁荣起来。不过现在新的台式仪器的形态,和几年前的己有很大的不同。这些新一代台式仪器具有多种特性,可以执行多种功能。而且外形尺寸与价格,都比过去的类似产品减少了 一半。



2     总体设计方案2.1     设计思路
由于要求达到模拟信号波形发生,因此要由      D/A 转换芯片来完成此项任务,由基准电路来实现输出波形的幅度可调,通过电位器调节波形的变化。经过数模转换电路
输出的信号为电流形式,因此需要加电流    /电压转换电路来改变输出信号的形式。
2.1.1     设计内容及要求
(1)原始数据
1)信号发生器的频率范围:   1Hz~1KHz
2)信号发生器的幅度范围:   100mV  ~5V
(2)技术要求:
1            )能够输出正弦、三角波和方波,并且输出信号的频率和幅度可调
2            )具有良好的人机界面
(3)工作要求:
1)采用 proteus 软件设计基于 MCS-51系列单片机的信号发生器
2)采用相关语言编写应用程序并调试
3)对系统进行测试和结果分析
4)写出论文方案选择及论证
2.1.2     方案选择及论证
方案一:用分立元件组成的函数发生器,通常是单函数发生器且频率不高,其工作不很稳定,不易调试。
方案二:可以由晶体管、运放    IC 等通用器件制作,更多的则是用专门的函数信号
发生器 IC 产生。早期的函数信号发生器 IC,如 L8038、BA205、XR2207/2209 等,它们的功能较少,精度不高,频率上限只有                                                                  300kHz,无法产生更高频率的信号,调节方式也不够灵活,频率和占空比不能独立调节,二者互相影响。
方案三:利用单片集成芯片的函数发生器,能产生多种波形,达到较高的频率且
易于调试。鉴于此,美国马克西姆公司开发了新一代函数信号发生器                                                                              ICMAX038 , 它克服了上述方案二中芯片的缺点,可以达到更高的技术指标,是上述芯片望尘莫及的。
MAX038 频率高、精度好,因此它被称为高频精密函数信号发生器                                                                                     IC。在锁相环、压控振荡器、频率合成器、脉宽调制器等电路的设计上,                                                                                     MAX038 都是优选的器件。



方案四:利用专用直接数字合成    DDS 芯片的函数发生器,能产生任意波形并达到很高的频率,但成本较高。
方案五:采用函数信号发生器     ICL8038 集成模拟芯片,它是一种可以同时产生方波、三角波、正弦波的专用集成电路。但是这种模块产生的波形都不是纯净的波形,    会寄生一些高次谐波分量,采用其他的措施虽可滤除一些,但不能完全滤除掉,且价    格较高。
方案六: 采用 AT89C51 单片机和 DAC0832 数模转换器相结合的电路来产生波形, 由于是软件滤波,所以不会有寄生的高次谐波分量,生成的波形比较纯净。它的特点
是价格低、性能高,在低频范围内稳定性好、操作方便、体积小、耗电少,适合学生
毕业设计。
经比较,方案六既可满足毕业设计的基本要求又能充分发挥其优势,电路简单,易控制,性价比高,所以采用此方案。
2.2     方案结构模块划分
本次设计所研究的就是用单片机将某种波形所对应的数字量进行输出,再通过
D/A 转换器转换输出一组连续变化的   5V 的电压脉冲值,同时再通过液晶显示部分显示其频率值和波形名称              [10] 。在设计时分块来做,分为  D/A 转换,单片机系统,键盘控制和液晶显示             4 个主要模块,最后通过联调仿真,做出电路板成品,从而简化人机交互的问题,具体设计模块如图     2-1 所示。
复位电路                                                                                                                             D/A 转化电路



晶振电路
按键输入电路

51 单片机

液晶显示电路
信号输出电路



图 2-1结构模块划分
单片机最小系统:包括时钟电路和复位电路。
键盘控制电路:用按键来控制输出波形的种类和调节频率。
D/A 转换电路:单片机把待转换的数字量输送到     DAC0832来把数字信号转换为模



拟信号。
显示电路:采用液晶显示器显示波形的名称和频率。
系统要求是便携式低功耗的,所以在硬件电路建立前首先粗略计算一下整个系统所需的功耗,考虑单片机部分功耗的大小,选择合适的器件以及参数。



3     硬件电路的设计3.1      主控电路及主控芯片的选择
单片机即单片微型计算机(   Single CHip Microcomputer )是把组成微型计算机的各种功能部件,包括中央处理单元( CPU)、随机存储器( RAM )、程序存储器( ROM )、定时器/计数器及输入输出接口等部件都集成在一块芯片上。是一种集成度高、性价比
优越、质量小、体积小的微型计算机。单片机按其使用目的可以分为通用和专用两种类型。通用单片机是一种基本芯片,内部功能及资源丰富,性能全面,适应性强可覆盖多种用途。用户可以根据需要设计成各种不同的单片机控制系统,即有一个再设计的过程。专用型单片机在设计时已对系统结构进行了简化,对软、硬件进行了优化,可靠性高,成本低,但是这类单片机功能单一,通常是针对某一特定的产品。本设计
应采用通用型单片机。
随着半导体集成工艺的不断发展,单片机也正朝着                                             CMOS 化、低功耗、体积小、大容量、高性能低价格和外围电路内装化等几个方向发展。在单片机家族中,                                                                               Intel                                             公司推出的 MCS-51 系列中的                                             80C51 是其中的佼佼者。MCS-51 系列单片机是                            8 位单片机中应用范围最广的一类单片机。近几年来,许多单片机开发厂商也推出了许多基于
80C51 单片机内核的扩展型单片机,产品在保持与     51 单片机兼容的基础上改善了很多 特性,性能各异。常用的单片机有很多种: Intel8051 和 8751 系列、Motorola 的 MC6801 系列、Atmel 的 AT89 系列、台湾 Winbond( 华邦)W7 和 W78 系列、荷兰 PHilips 的 51LPC 和 LPC900 系列、ZILOG 的 Z8 系列等。本设计中最终选用了                                               ATMEL 公 司 的 AT89C51 单片机。 AT89C51 单片机是美国     ATMEL 公司推出的低功耗   /低电压、高性能的 8 位单片机,片内含                       4KBFlasH 程序存储器,它采用了   CMOS 工艺和 ATMEL    公司的高密度非易失性存储器(       NURAM )技术,该存储器的全称为闪速可编程可擦除只读存储器
(FPEROM,FlasHProgrammable and Erasable Read Only Memor)y,其输出引脚和指令
系统与标准  MCS-51 系统兼容。由于将多功能   8 位 CPU 和闪烁存储器组合在单个芯片中,是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案
[15]。
3.2     单片机的发展史
单片机诞生于  20 世纪 70 年代末,经历了 SCM、MCU 、SoC 三大阶段。起初模型
1. SCM 即单片微型计算机(  Single Chip Microcomputer)阶段,主要是寻求最佳的



单片形态嵌入式系统的最佳体系结构。  “创新模式”获得成功,奠定了                                                      SCM 与通用计算机完全不同的发展道路。在开创嵌入式系统独立发展道路上,                                                             Intel 公司功不可没。
2. MCU 即微控制器( Micro Controller Unit    )阶段,主要的技术发展方向是,不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智
能化控制能力。 它所涉及的领域都与对象系统相关, 因此,发展 MCU的重任不可避免地落在电气、电子技术厂家。从这一角度来看, Intel 逐渐淡出   MCU  的发展也有其客观因素。在发展MCU方面,最著名的厂家当数Philips 公司。
Philips 公司以其在嵌入式应用方面的巨大优势,   将 MCS-51 从单片微型计算机迅速发展到微控制器。 因此,当我们回顾嵌入式系统发展道路时,                                             不要忘记 Intel 和 Philips 的历史功绩。
嵌入式系统
单片机是嵌入式系统的独立发展之路,   向 MCU 阶段发展的重要因素, 就是寻求应用系统在芯片上的最大化解决:因此,专用单片机的发展自然形成了                        SoC 化趋势。随着微电子技术、 IC 设计、EDA 工具的发展, 基于 SoC 的单片机应用系统设计会有较大的发展。
因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。
3.3     单片机的特点
1  . 单片机的存储器  ROM 和 RAM 时严格区分的。 ROM 称为程序存储器, 只存放程序,固定常数,及数据表格。          RAM 则为数据存储器,用作工作区及存放用户数据。
2  . 采用面向控制的指令系统。为满足控制需要,单片机有更强的逻辑控制能力特别是单片机具有很强的位处理能力。
3  . 单片机的 I/O 口通常时多功能的。由于单片机芯片上引脚数目有限,为了解决实际引脚数和需要的信号线的矛盾,采用了引脚功能复用的方法,引脚处于何种功能 可由指令来设置或由机器状态来区分。
4  . 单片机的外部扩展能力很强。在内部的各种功能部件不能满足应用的需求时,均可在外部进行扩展,与许多通用的微机接口芯片兼容,给应用系统设计带来了很大的方便[14] 。
3.4     89C51 单片机最小系统
51 单片机是对目前所有兼容   intel    8031 指令系统的单片机的统称。         该系列单片机的始祖是 intel                          的 8031 单片机,后来随着技术的发展,成为目前广泛应用的8为单片机之一。单片机是在一块芯片内集成了                          CPU、RAM、ROM、定时器/计数器和多功能                          I/O口等计算机所需要的基本功能部件的大规模集成电路,又称为                          MCU。51 系列单片机内包含以下几个部件:



图 3-1STC89C52RC 单 片 机
STC89C52RC 本身内含 40 个引脚, 32 个外部双向输入 /输出( I/O)端口,同时内含 2 个外中端口, 3 个 16 位可编程定时计数器                          ,2 个全双工串行通信口,                                               STC89C51RC 可以按照常规方法进行编程,                              但不可以在线编程。 其将通用的微处理器和                                       Flash 存储器结合在一起,特别是可反复擦写的                    Flash 存储器可有效地降低开发成本                                            [9] 。
STC89C52RC 的主要特性如表   3-2 所示:



STC89C52R为C 40 脚双列直插封装的   8 位通用微处理器,采用工业标准的                                            C51内核,
在内部功能及管脚排布上与通用的     8xc52 相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主   IC 内部寄存器、数据  RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号                                IR 的接收解码及与主板                              CPU通信等。主要管脚有:XTAL1(19 脚)和 XTAL2( 18 脚)为振荡器输入输出端口,外接                              12MHz晶振。
RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。                                                                                                    VCC( 40 脚)和 VSS
(20 脚)为供电端口,分别接  +5V 电源的正负端。 P0~P3 为可编程通用                     I/O      脚,其功能用途由软件定义,在本设计中,                                   P0 端口( 32~39脚)被定义为                                      N1 功能控制端口,分别与 N1 的相应功能管脚相连接,              13 脚定义为       IR 输入端, 10 脚和 11 脚定义为                   I2C 总线控制端口,分别连接                                      N1的 SDAS(18 脚)和 SCLS(19 脚)端口, 12 脚、27 脚及 28脚定义为握手信号功能端口,连接主板                                  CPU的相应功能端,用于当前制式的检测及会  聚调整状态进入的控制功能。
P0 口: P0 口是一组 8 位漏极开路型双向 I/O 口,也即地址 / 数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动       8 个  TTL 逻辑门电路,对端口    P0 写“ 1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时
转换地址(低  8 位)和数据总线复用,在访问期间激活内部上拉电阻。在         Flash                       编程时, P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电
阻。
P1 口:P1 是一个带内部上拉电阻的   8 位双向 I/O 口,P1 的输出缓冲级可驱动 (吸
收或输出电流) 4 个 TTL 逻辑门电路。对端口写“ 1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被
外部信号拉低时会输出一个电流   (IIL)   。与 AT89C51不同之处是, P1.0 和 P1.1 还可分
别作为定时 / 计数器    2                                 的外部计数输入( P1.0/T2 )和输入( P1.1/T2EX)。Flash  编程和程序校验期间,P1 接收低8 位地址。



P2 口: P2 是一个带有内部上拉电阻的   8 位双向 I/O 口, P2 的输出缓冲级可驱动
(吸收或输出电流) 4 个 TTL逻辑门电路。 对端口 P2 写“ 1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个
引脚被外部信号拉低时会输出一个电流    (IIL)   。在访问外部程序存储器或                                                        16 位地址的
外部数据存储器(例如执行    MOVX@DPT指R 令)时, P2 口送出高 8 位地址数据。在访问
8 位地址的外部数据存储器(如执行    MOVX@RI指令)时, P2 口输出 P2 锁存器的内容。
Flash 编程或校验时, P2 亦接收高位地址和一些控制信号。
P3 口:P3 口是一组带有内部上拉电阻的    8 位双向 I/O 口。P3 口输出缓冲级可驱动
(吸收或输出电流)   4 个 TTL逻辑门电路。 对 P3 口写入“ 1”时, 它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的                     P3 口将用上拉电阻输出电流(                               IIL )。 P3 口除了作为一般的 I/O                               口线外,更重要的用途是它的第二功能                               P3 口还接收一些用于
Flash   闪速存储器编程和程序校验的控制信号。
RST:复位输入。当振荡器工作时, RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG当: 访问外部程序存储器或数据存储器时,     ALE(地址锁存允许)输出脉
冲用于锁存地址的低   8 位字节。一般情况下,ALE仍以时钟振荡频率的                           1/6 输出固定的
脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据   存储器时将跳过一个   AL脉冲。对 Flash 存储器编程期间,该引脚还用于输入编程脉冲
(PRO)G。如有必要,可通过对特殊功能寄存器(     SFR)区中的  8EH单元的  D0位置位,可禁止  ALE操作。该位置位后,只有一条     MOVX和  MOVC指令才能将   ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。
PSEN:程序储存允许( PSEN)输出是外部程序存储器的读选通信号,                                                                               当 STC89C51RC由外部程序存储器取指令(或数据)时,每个机器周期两次                                                                               PSEN有效,即输出两个脉   冲。在此期间,当访问外部数据存储器,将跳过两次                                                                                     PSEN信号。
EA/VPP:外部访问允许。 欲使  CPU仅访问外部程序存储器  (地址为  0000H—FFFFH),
EA端必须保持低电平(接地) 。需注意的是:如果加密位  LB1被编程,复位时内部会锁存 EA端状态。如                         EA端为高电平(接     Vcc 端),CPU则执行内部程序存储器中的指令。
Flash 存储器编程时, 该引脚加上 +12V的编程允许电源 Vpp,当然这必须是该器件是使用 12V编程电压                         Vpp。
XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。XTAL2:振荡器反相放大器的输出端。
单片机最小原理图如图    3-3 所示。

单片机最小系统说明:

图 3-3 单片机最小系统



时钟信号的产生:在 MCS-51芯片内部有一个高增益反相放大器,其输入端为芯片
引脚 XTAL1,其输出端为引脚 XTAL2。而在芯片的外部,                                                XTAL1和 XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器,这就是单片机的时钟振荡电路。
时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。
一般地,电容   C2和 C3取 30pF 左右,晶体的振荡频率范围是                       1.2-12MHz。如果晶体振荡频率高,则系统的时钟频率也高,单片机的运行速度也就快。
单片机复位使   CPU和系统中的其他功能部件都处在一个确定的初始状态下,并从    这个状态开始工作。单片机复位条件:必须使                     9 脚加上持续两个机器周期(即                               24 个振荡周期)的高电平。
3.4.1        D/A  转换电路
DAC0832是 8 分辨率的 D/A 转换集成芯片。与微处理器完全兼容。这个                                                                                              DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。
D/A 转换器由 8 位输入锁存器、8 位 DAC寄存器、 8 位D/A 转换电路及转换控制电路构



成。
主要参数
*       分辨率为  8 位;
*        电流稳定时间   1us;
*        可单缓冲、双缓冲或直接数字输入;
*        只需在满量程下调整其线性度;
*  单一电源供电( +5V~+15V);
*        低功耗, 20mW。
*   D0 ~D7: 8 位数据输入线, TTL 电平,有效时间应大于         90ns( 否则锁存器的数据会出错) ;
*    ILE :数据锁存允许控制信号输入线,高电平有效;
*   CS :片选信号输入线(选通数据锁存器)  ,低电平有效;
*    WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于                                                                                   500ns)有效。由                                                                                       ILE 、
CS、WR1的逻辑组合产生   LE1,当 LE1 为高电平时, 数据锁存器状态随输入数据线变换,
LE1 的负跳变时将输入数据锁存;
*     XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于                                                                                   500ns)有



效;
*     WR:2

DAC寄存器选通输入线,负脉冲(脉宽应大于     500ns)有效。由 WR、2


XFER



的逻辑组合产生   LE2,当 LE2 为高电平时, DAC寄存器的输出随寄存器的输入而变化,
LE2 的负跳变时将数据锁存器的内容打入     DAC寄存器并开始   D/A 转换。
*   IOUT1 :电流输出端  1,其值随 DAC寄存器的内容线性变化;
*    IOUT2 :电流输出端  2,其值与 IOUT1值之和为一常数;
*   Rfb :反馈信号输入线,改变   Rfb 端外接电阻值可调整转换满量程精度;
*    Vcc :电源输入端,Vcc 的范围为 +5V~+15V;
*   VREF:基准电压输入线,   VREF的范围为 -10V~+10V;
*    AGND:模拟信号地;
*    DGND:数字信号地。
工作方式
根据对 DAC0832的数据锁存器和 DAC寄存器的不同的控制方式, DAC0832有三种工作方式:直通方式、单缓冲方式和双缓冲方式。
DAC0832引脚功能电路应用原理图    DAC0832是采样频率为八位的                                          D/A 转换芯片,集成电路内有两级输入寄存器,使                         DAC0832芯片具备双缓冲、单缓冲和直通三种输入方



式,以便适于各种电路的需要   ( 如要求多路   D/A 异步输入、同步转换等                   ) 。所以这个芯片的应用很广泛 , 关于 DAC0832应用的一些重要资料见下图:           D/A 转换结果采用电流形式输出。若需要相应的模拟电压信号,可通过一个高输入阻抗的线性运算放大器实现。   运放的反馈电阻可通过                                 RFB 端引用片内固有电阻,也可外接。                                 DAC0832逻辑输入满足TTL 电平,可直接与                                 TTL 电路或微机电路连接。
DAC0832引脚功能说明:
DI0~DI7:数据输入线,  TLL 电平。
ILE :数据锁存允许控制信号输入线,高电平有效。 CS:片选信号输入线,低电平有效。
WR:1 为输入寄存器的写选通信号。
XFER:数据传送控制信号输入线,低电平有效。
WR:2 为 DAC寄存器写选通输入线。
Iout1:   电流输出线。当输入全为    1 时 Iout1 最大。
Iout2:    电流输出线。其值与   Iout1  之和为一常数。
Rfb: 反馈信号输入线 , 芯片内部有反馈电阻  .
Vcc: 电源输入线  (+5v~+15v)
Vref: 基准电压输入线 (-10v~+10v)



AGND模:
DGND数:

拟地 , 摸拟信号和基准电源的参考地  .
字地 , 两种地线在基准电源处共地比较好  .
图 3-4 数模转换模块电路图






3.4.2     按键输入电路
图 3-5 运放模块电路图



按键是由一组按压式或触摸式开关构成的阵列,是一种常用的输入设备。键盘可分为编码式键盘和非编码式键盘两种。
1.  编码键盘通过硬件电路产生被按按键的键码,    这种键盘所需程序简单, 但硬件电路复杂、价格昂贵通常不被单片机系统采用。
2.  非编码键盘常用一些按键排列成行列矩阵,   其硬件逻辑与按键编码不存在严格的对应关系,而要由所用的程序来决定。非编码键盘的硬件接口简单,但是要占用较多    的 CPU时间,通常采用可编程键盘管理芯片来克服这个缺点。本设计使用两种按键,
一种是按键式非编码键盘和轻触式非编码开关。
在接线时由于有四个引脚,连接时需要用万用表进行测量,然后接通两个引脚,原理图如下。
要进行数据的计算就必须先进行数据的输入,也就必须确定按键输入的数值是什么,这就需要对键盘进行扫描,从而确定究竟是哪个键按下。






3.4.3           液晶显示电路
图 3-6 按键电路



LCD显示模块的设计   通过液晶  1602 显示输出的波形、频率   1602 的八位数据端接单片机的  P1 口  其三个使能端  RS、RW、E 分别接单片机的   P2.2—P.4。通过软件控制液晶屏可以显示波形的种类以及波形的频率。电路如图 3-6 所示。
图 3-7  液晶显示电路



4     软件设计与仿真
4.1       PROTEU简S 介
Proteus ISIS    是英国 Labcenter 公司开发的电路分析与实物仿真软件。它运行于
Windows操作系统上,可以仿真、分析    (SPICE)各种模拟器件和集成电路,该软件的特点是:
(1)    现了单片机仿真和 SPICE电路仿真相结合。 具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、   RS232动态仿真、 I2C 调试器、 SPI 调试器、键盘和 LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器
等。
(2)    支持主流单片机系统的仿真。目前支持的单片机类型有:             68000 系列、8051 系
列、AVR系列、 PIC12系列、 PIC16 系列、 PIC18 系列、 Z80 系列、 HC11系列以及各种外围芯片。
(3)   提供软件调试功能。 在硬件仿真系统中具有全速、 单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具
有这些功能;同时支持第三方的软件编译和调试环境,如       Keil C51 uVision2                                                                                等软件。
(4)    具有强大的原理图绘制功能。
可以仿真   51 系列、 AVR、PIC、ARM、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统   配置的虚拟逻辑分析仪、示波器等,                               Proteus  建立了完备的电子设计开发环境。
在  PROTEUS绘制好原理图后,调入已编译好的目标代码文件:      *.HEX,可以在
PROTEU的S 原理图中看到模拟的实物运行状态和过程。                                                                                  PROTEUS是单片机课堂教学的先进助手。
PROTEU不S 仅可将许多单片机实例功能形象化,  也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达     到的效果。
它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上
替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。
课程设计、毕业设计是学生走向就业的重要实践环节。由于                                                                                    PROTEUS提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、   质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神

#include<reg51.h>

#include"LCD1602.h"

#include"DAC0832.h"

sbit K1=P3^2;

uchar code table8[]={

0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xf6,0xf9,0xfb,0xfc,0xfc,0xfd,0xfd,0xfd,0xfe

};

uchar code table9[]={

0x16,0x9a,0x20,0x5e,0x88,0xa3,0xb8,0xc3,0xce,0xd6,//

正弦波频率调整中间值

0xbc,0xce,0x58,0x8a,0xa9,0xbf,0xcb,0xd8,0xe0,0xee,//

三角波频率调整中间值

0x98,0x60,0xa0,0x42,0x44,0xce,0x5a,0xb3,0xf5,0x3c

};

uchar key;

uint F;//总频率

bit ST=0;

bit DUQU=0; //主函数

void main() { P1=0; DA_S1=1; //关闭 8 位输入寄存器

LCD1602_init();

TMOD=0x01;//设置定时器 0 为 16位工作方式

IT0=1;//设置外部中断 0 为下降沿触发

ET0=1; //开定时器中断

EX0=1; EA=1; while(1);

}//外部 0 中断子函数

void wb0() interrupt 0 { EA=0;TR0=0;//关总中断与定时器

delay(50); //延时够吗

if(K1==0) //确实有按键按下而引发中断

{ delay(50); if(K1==0) {key=P3&0xf8; switch(key) { case 0xf0: //选择波形

ee++; if(ee>2) ee=0; break;case 0xe8: //频率按规定单位依次增加

table5[ee]++;

if(table5[ee]>10)

table5[ee]=1; break;

case0xd8: //频率按规定单位依次衰减

table5[ee]--;

if(table5[ee]<1)

table5[ee]=10; break;

}

} bb=table8[ee*10+(table5[ee]-1)];//方括号中选取第几个数后,并把该值赋

给T_temp

cc=table9[ee*10+(table5[ee]-1)];F=table5[ee]*table4[ee]; //求输出频率(个数*单位)

table2[5]=F%10+0x30; table3[5]=F%10+0x30; //在液晶中显示个位,(0x30 在液晶显示中表示数字0)

附录

F/=10;

table2[4]=F%10+0x30;

table3[4]=F%10+0x30; //在液晶中显示时十位

F/=10; table2[3]=F%10+0x30;

table3[3]=F%10+0x30; //在液晶中显示时百位

F/=10; table2[2]=F%10+0x30;

table3[2]=F%10+0x30;//在液晶中显示时千位

disp_lcd(0x80,&table1[ee*16]); //在第一行显示

disp_lcd(0xc0,table2); //在第二行显示

}aa=0; //'抽点'计数清零 while(!K1); EA=1; TR0=1; //开启总中断与定时器

} //定时器 0 中断子函数 void t0() interrupt 1 {TH0=bb; TL0=cc; if(ee==0) sine_out(); else if(ee==1) triangle_out(); elseif(ee==2) square_out(); } typedef unsigned char uchar; typedef unsigned intuint; uchar code table1[]={"ZX Wave " "SJ Wave " "JXWave " "System Is Ready! " "Now to switch..""SAVE ...... " "Finish! " "Reading ... " }; ucharidata table2[16]={"F= Hz "}; uchar idata table3[16]={"F= Hz .V"}; sbit RS=P2^0; sbit RW=P2^1;

西安交通大学城市学院本科生毕业设计(论文)

sbit E=P2^2; sbit DP=P0^7; //延时子函数void delay(uchar z)  { uchar x,y;for(x=z;x>0;x--) for(y=110;y>0;y--); } //LCD1602 液晶读忙状态子函数 void LCD1602_wait() { RS=0;RW=1; E=1; delay(10);

E=0; //下降沿

while(DP) { E=0; E=1; //仿真才需要此语句 ,实际硬件中不需要

}

} //LCD1602 液晶写命令子函数void write_com(uchar com) { RS=0; RW=0; P0=com; E=1; delay(10); E=0;LCD1602_wait(); } //LCD1602 液晶写数据子函数void write_date(uchar date) { RS=1; RW=0;

附录

P0=date;

E=1;

delay(10);

E=0;

LCD1602_wait();

} void disp_lcd(ucharaddr,uchar *temp1) reentrant { uchar i; write_com(addr); delay(1); //延时一会儿

for(i=0;i<16;i++) {write_date(temp1);//或者这样写write_date(*(temp1+num));

delay(1); } } //LCD1602 液晶初始化子函数

void LCD1602_init() { E=0; RW=0; //初始化一定要设置为零,表示写数据

write_com(0x38); //使液晶显示点阵,为下面做准备

write_com(0x0c); //初始设置

write_com(0x06); //初始设置

write_com(0x01); //清零

write_com(0x80); //使指针指向第一行第一格

disp_lcd(0x80,&table1[3*16]); //在第一行显示

disp_lcd(0xc0,&table1[4*16]); //在第二行显示

} uchar aa; //'抽点'计数

uchar bb,cc;//传递频率的中间变量

uchar dd=1; //在方波输出函数中用于简单判别作用

uchar ee; //当其为 0、1、2 时,分别代表三种波

uchar codetable4[3]={5,25,100}; // 三种波的频率单位

uchar idata table5[3]={1,1,1}; //给每种波定义一个数组单元,用于存放单位频率的个数

uchar code table6[]={

//每隔数字 8,采取一次

0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48,0x50,0x58,0x60,0x68,0x70,0x7

8,

0x80,0x88,0x90,0x98,0xa0,0xa8,0xb0,0xb8,0xc0,0xc8,0xd0,0xd8,0xe0,0xe8,0xf0,0xf8,0xff,

0xf8,0xf0,0xe8,0xe0,0xd8,0xd0,0xc8,0xc0,0xb8,0xb0,0xa8,0xa0,0x98,0x90,0x88,0x80,

0x78,0x70,0x68,0x60,0x58,0x50,0x48,0x40,0x38,0x30,0x28,0x20,0x18,0x10,0x08,0x0

0

};

uchar code table7[]={

//输出电压从 0 到最大值(正弦波 1/4 部分)

0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,

0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,

0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, //输出电压从最大值到0(正弦波1/4 部分)

0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,

0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,


0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93 ,0x90,0x8d,0x89,0x86,0x83,0x80, //输出电压从 0 到最小值(正弦波 1/4 部分)

0x80,0x7c,0x79,0x76,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,0x00,0x00,0x00,0x00,0x00, //输出电压从最小值到0(正弦波1/4 部分)

0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x 09,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,0x 6c,0x6f,0x72,0x76,0x79,0x7c,0x80 };

sbitDA_S1=P2^7;//控制 DAC0832 的 8 位输入寄存器, 仅当都为 0 时,可以输出数 据(处于直通状态 ),否则,输出将被锁存 //三角波输出子函数

void triangle_out() {P1=table6[aa++];

if(aa>64) aa=0;

DA_S1=0; //打开 8 位输入寄存器

DA_S1=1; //关闭 8 位输入寄存器 }//正弦波输出子函数

void sine_out() {P1=table7[aa++]; DA_S1=0; //打开8 位输入寄存器

DA_S1=1;//关闭 8 位输入寄存器 } //方波输出子函数

void square_out() {

dd=~dd; if(dd==1) P1=0xff;else P1=0x00;

DA_S1=0; //打开 8 位输入寄存器DA_S1=1; //关闭8 位输入寄存器

}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表