fccjxxw.com
非常超级学习网 学习超级帮手
当前位置:首页 >> >>

基于单片机的正弦信号发生器论文


第一章 绪论 1.1 课题简介 1.1.1 课题来源 本课题适用于科学教研、生产实践和教学实验等领域。它是有 AT89C51 单 片机、DAC0832。通过按键来实现波形的产生。 1.12 技术现状 运用单片机来完成本设计具有好的实用性和操作性。因为单片机具有体积 小、功能强、成本低、应用面广等功能。 1.2 单片机的产生和发展 1.21 单片机的定义 计算机的发展经历了从电子管到大规模集成电路等几个发展阶段, 随着大规 模集成电路技术的发展,使计算机向性能稳定可靠、微型化、廉价方向发展,从 而出现了单片微型计算机。 所谓单片微型计算机,是指将组成微型计算机的基本功能部件,如中央处理 器 CPU、存储器 ROM 和 RAM、输入/输出(I/O)接口电路等集成在一块集成 电路芯片上的微型计算机, 简称单片机。 总体来讲, 单片机可以用以下 “表达式” 来表示:单片机=CPU+ROM+RAM+I/O+功能部件 1.22 单片机的发展史及发展趋势 单片机的历史可以追朔到 1974 年,美国仙童公司研究出世界上第一台单片 微型计算机 F8,该机由两块集成电路芯片组成,结构奇特,具有与众不同的指 令系统,深受民用电器和仪器仪表领域的欢迎和重视。从此,单片机开始迅速发 展,应用范围也在不断扩大。 单片机的发展历史大致可分为下面三个阶段: 第一阶段(1976 年~1978 年):初级单片机微处理阶段。以 Intel 公司是 MCS-48 为代表,此系列的单片机具有 8 为 CPU、并行 I/O 端口、8 位时序同步 计数器,寻址范围不大于 4KB,但是没有串行口。 第二阶段(1978 年~1982 年):高性能单片机微处理阶段,如 Intel 公司 的 MCS-51、Motorola 公司的 6801 和 Zilog 公司的 Z8 等。该类型单片机具有串 行 I/O 端口,有多级中断处理系统,16 位时序同步计数器,RAM,ROM 容量加

大,寻址范围可达 64KB,有的芯片甚至还带有 A/D 转换接口。由于该系统单片 机应用领域极其广泛,各公司正大力改进其结构与性能。 第三阶段(1982 年~现在):8 位单片机微处理改良型及 16 位单片机微处 理阶段。 1.3 单片机的特点及应用 1.31 单片机的特点 随着现代科技的发展,单片机的集成度越来越高,CPU 的位数也越来越高, 已能将所有主要部件都集成在一块芯片上,使其应用模式多、范围广,并具有以 下特点: ① 体积小,功耗低,价格便宜,重量轻,易于产品化。 ② 控制功能强,运行速度快,能针对性地解决从简单到复杂的各类控制问 题,满足工业控制要求,并有很强的位处理和接口逻辑操作等多种功能。 ③ 抗干扰能力强,适用温度范围宽。由于许多功能部件集成在芯片内部, 受外界影响小,故可靠性高。 ④ 虽然单片机内存储器的容量不可能很大,但存储器和 I/O 接口都易于扩 展。 ⑤ 可以方便的实现多机和分布式控制 1.32 单片机的应用 单片机的应用具有面广量大的特点,目前它广泛的应用于国民经济各个领 域,对技术改造和产品的更新起着重要作用。主要表现在以下几个方面: ① 单片机在智能化仪器、仪表中的应用:由于单片机有计算机的功能,它 不仅能完成测量,还既有数据处理、温度控制等功能,易于实现仪器、仪表的数 字化和智能化。 ② 单片机在实时控制中的应用:单片机可以用于各种不太复杂的实时控制 系统中,如一般性的温度控制、液面控制、电镀顺序控制等。将测量技术、自动 控制技术和单片机技术相结合,充分发挥单片机的数据处理和实时控制功能,使 系统工作于最佳状态。 ③ 单片机在机电一体化中的应用:单片机有利于机电一体化技术的发展, 已广泛应用于数控机床、医疗设备、汽车设备等。

④ 单片机在多机系统中的应用:单片机在多机系统中的应用是将来单片机 发展的主要模式,它可以提高单片机的可靠性,使系统运行速度更快。 ⑤ 单片机在计算机外围设备中的应用:单片机广泛应用于打印机、绘图机 等多种计算机的外围设备,特别是用于智能终端,可大大减轻主机负担,提高系 统的运行速度。 ⑥ 单片机在家用电器中的应用:单片具有体积小、重量轻、价格便宜等特 点,所以家电产品中配上微电脑后,使其身价百倍,功能更强,使用方便,灵活, 深得用户欢迎。 ⑦ 单片机在通信中的应用:单片机广泛应用于移动通信领域,使移动电话 的功能更强大,操作更方便。

第二章 AT89C51 单片机的特性与功能 2.1 单片机的应用与选择 8051 是 MCS-51 系列单片机中的代表产品,它内部集成了功能强大的中央 处理器,包含了硬件乘除法器、21 个专用控制寄存器、64kB 的程序存储器 、 256B 字节的数据存储器、4 组 8 位的并行口、两个 16 位的可编程定时/计数器、 一个全双工的串行口以及布尔处理器。 由于 MCS-51 集成了几乎完善的 8 位中央处理单元,处理功能强,中央处 理单元中集成了方便灵活的专用寄存器,硬件的加、减、乘、除法器和布尔处理 机及各种逻辑运算和转移指令,这给应用提供了极大的便利。 MCS-51 的指令系统近乎完善,指令系统中包含了全面的数据传送指令、 完善的算术和逻辑运算指令、方便的逻辑操作和控制指令、对于编程来说,是相 当灵活和方便的。 MCS-51 单片机的工作频率为 2-12MHz,当振荡频率为 12MHz 时,一个机 器周期为 1us,这个速度应该说是比较快的。 8051 中集成了完善的各种中断源,用户可十分方便地控制和使用其功能, 使得它的应用范围加大,可以说它可以满足绝大部分的应用场合。 MCS-51 把微型计算机的主要部件都集成在一块心片上,使得数据传送距 离大大缩短,可靠性更高,运行速度更块。由于属于芯片化的微型计算机,各功 能部件在芯片中的布局和结构达最优化,抗干扰能力加强,工作亦相对稳定。因 此,在工业测控系统中,使用单片机是最理想的选择。单片机属于典型的嵌入式 系统,所以它是低端控制系统最佳器件。 2.2 芯片简介 2.21AT89C51 性能简介 AT89C51 是一种带 4K 字节闪烁可编程可擦除只读存储器 (FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能 CMOS8 位微 处理器,俗称单片机。该器件采用 ATMEL 高密度非易失存储器制造技术制造, 与工业标准的 MCS-51 指令集和输出管脚相兼容。由于将多功能 8 位 CPU 和闪 烁存储器组合在单个芯片中,ATMEL 的 AT89C51 是一种高效微控制器,为很 多嵌入式控制系统提供了一种灵活性高且价廉的方案。

2.22 AT89C51 的主要特性 ⑴ 8031 CPU 与 MCS-51 兼容 ⑵4K 字节可编程 FLASH 存储器(寿命:1000 写/擦循环) ⑶全静态工作:0Hz-24KHz ⑷三级程序存储器保密锁定 ⑸128*8 位内部 RAM ⑹32 条可编程 I/O 线 ⑺两个 16 位定时器/计数器 ⑻5 个中断源 ⑼可编程串行通道 ⑽低功耗的闲置和掉电模式 ⑾片内振荡器和时钟电路 2.23 AT89C51 管脚功能 MCS-51 系列单片机芯片均为 40 个引脚,HMOS 工艺制造的芯片采用双列 直插(DIP)方式封装,其引脚示意及功能分类如图 2-1:

图 2-1 MCS-51 引脚图

MCS-51 系列单片机的 40 个引脚中有 2 个专用于主电源的引脚, 个外接晶 2 体的引脚,4 个控制或与其它电源复用的引脚,以及 32 条输入输出 I/O 引脚。 VCC:供电电压。 GND:接地。 ① P0 口(P0.0~P0.7) 为双向 8 位三态 I/O 口,当作为 I/O 口使用时,可直 接连接外部 I/O 设备。它是地址总线低 8 位及数据总线分时复用口,可驱动 8 个 TTL 负载。一般作为扩展时地址/数据总线口使用。 ② P1 口(P1.0~P1.7) 为 8 位准双向 I/O 口,它的每一位都可以分别定义 为输入线或输出线(作为输入时,口锁存器必须置 1),可驱动 4 个 TTL 负载。 ③ P2 口(P2.0~P2.7) 为 8 位准双向 I/O 口,当作为 I/O 口使用时,可直接 连接外部 I/O 设备。它是与地址总线高 8 位复用,可驱动 4 个 TTL 负载。一般 作为扩展时地址总线的高 8 位使用。 ④ P3 口(P3.0~P3.7) 为 8 位准双向 I/O 口,是双功能复用口,可驱动 4 个 TTL 负载。 P3 口也可作为 AT89C51 的一些特殊功能口,如下所示: P3 口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断 0) P3.3 /INT1(外部中断 1) P3.4 T0(记时器 0 外部输入) P3.5 T1(记时器 1 外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3 口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持 RST 脚两个机器周期的高 电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁 存地址的地位字节。在 FLASH 编程期间,此引脚用于输入编程脉冲。在平时, ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。因此它 可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据

存储器时,将跳过一个 ALE 脉冲。如想禁止 ALE 的输出可在 SFR8EH 地址上置 0。此时, ALE 只有在执行 MOVX,MOVC 指令是 ALE 才起作用。另外,该 引脚被略微拉高。如果微处理器在外部执行状态 ALE 禁止,置位无效。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 综上所述,MCS-51 系列单片机的引脚作用可归纳为以下两点: ⑴单片机功能多,引脚数少,因而许多引脚都具有第 2 功能; ⑵单片机对外呈 3 总线形式,由 P2、P0 口组成 16 位地址总线;由 P0 口分时复 用作为数据总线;由 ALE、PSEN/、EA/与 P3 口中的 INT0/、INT1/、T0、T1、 WR/、RD/共 10 个引脚组成控制总线。

第三章 硬件设计 3.1 正弦信号发生器设计方案框图

显示部分

单 片 机

数/模转 换电路

放大电路

按键

波形输出

图 3-1 设计方框图

3.2 DAC0832 硬件简介 3.2.1 管脚功能 如图 3-2 所示:

图 3-2 DAC0832 管脚图

DAC0832 的主要特性参数如下: * 分辨率为 8 位; * 输出为电流信号,电流的建立时间为 1us; * 可单缓冲、双缓冲或直接数字输入; * 只需在满量程下调整其线性度;

* 单一电源供电(+5V~+15V),低功耗,20mW; * 参考电压可以达到±10V; * 直接的数字接口可以与任何一款单片机相连。 DAC0832 的引脚功能: * D0~D7:8 位数据输入线,TTL 电平,通常与单片机的数据总线相连,用于输 入 CUP 送来的待转换数字量。有效时间应大于 90ns(否则锁存器的数据会出错); * ILE:数据锁存允许控制信号输入线,高电平有效; * C S :片选信号输入线(选通数据锁存器),低电平有效; * W R 1 :数据锁存器写选通输入线,负脉冲(脉宽应大于 500ns)有效。由 ILE、
———— —————— ————

C S 、W R 1 的逻辑组合产生 LE1,当 LE1 为高电平时,数据锁存器状态随输入数

——————

据线变换,LE1 的负跳变时将输入数据锁存; * X F E R: 数据传输控制信号输入线, 低电平有效, 负脉冲 (脉宽应大于 500ns) 有效; * W R 2 :DAC 寄存器选通输入线,负脉冲(脉宽应大于 500ns)有效。由 W R 1 、
———————— ————————

——————

——————

X F E R 的逻辑组合产生 LE2,当 LE2 为高电平时,DAC 寄存器的输出随寄存器的

输入而变化,LE2 的负跳变时将数据锁存器的内容打入 DAC 寄存器并开始 D/A 转 换。 * IOUT1:电流输出端 1,其值随 DAC 寄存器的内容线性变化; * IOUT2:电流输出端 2,其值与 IOUT1 值之和为一常数; — 当 DAC 寄存器内容全为 1 时,IOUT1 为最大,IOUT2=0; — 当 DAC 寄存器内容全为 0 时,IOUT1=0,IOUT2 为最大; 为了保证输出电流的线性,应将 IOUT1 及 IOUT2 接到外部运算放大器的输入端 上。 * Rfb:反馈信号输入线,改变 Rfb 端外接电阻值可调整转换满量程精度; * Vcc:芯片工作电源,范围为+5V~+15V; * VREF:基准电压输入线,VREF 的范围为-10V~+10V; * AGND:模拟信号地,为模拟信号和基准电源的参考地; * DGND:数字信号地,为工作电源地和数字逻辑地; 3.2.2 DAC0832 芯片与单片机硬件接口设计

DAC0832 与 MCS-51 单片机的连接方式: 根据对 DAC0832 的数据锁存器和 DAC 寄存器的不同的控制方式,DAC0832 有三种 连接方式:直通方式、单缓冲方式和双缓冲方式。 1、双缓冲方式:进行两级缓冲; 2、单缓冲方式:只进行一级缓冲; 3、直通方式:不进行缓冲,适用于比较简单的场合。

本设计采用的是直通连接方式。具体电路设计如图 3-3、3-4 所示:

图 3-3 连接图

图 3-4 连接图 3.2.3 放大整形电路 为了输入的是小信号时也能对精确的测出它的频率, 所以在信号的输入口加电压 放大。有时输入的信号波形不是很好时,放大后也是失真的信号,这就会影响到 所测信号的频率,因此要经过整形。其电路如图 3-5 所示:

图 3-5 放大电路

3.3 LCD1602 硬件介绍

图 3-6

LCD1602 引脚图

LCD1602 引脚及其功能介绍如表 3-1 所示:

表 3-1
管脚号 1 2 3 续表 4 RS H/L RS=“H”,表示 DB7~DB0 为显示数据 RS=“L”,表示 DB7~DB0 为显示指令 数据 5 R/W H/L R/W= “ H ” ,E= “ H ” , 数 据 被 读 到 DB7~DB0 R/W=“L”,E=“H→L” DB7~DB0 的数据被写到 IR 或 DR 6 E H/L 使能信号:R/W=“L”,E 信号下降沿 锁存 DB7~DB0 管脚名称 VSS VDD VEE LEVER 0V 5.0V 管脚功能描述 电源地 电源电压 对比调整电压

R/W= “H” ,E= “H” D7~D0 7 8 9 10 11 12 13 14 D0 D1 D2 D3 D4 D5 D6 D7

DRAM

数据读到

H/L H/L H/L H/L H/L H/L H/L H/L

数据线 数据线 数据线 数据线 数据线 数据线 数据线 数据线

第四章 基于 51 单片机的正弦信号发生器设计 4.1 正弦信号发生器程序的流程图如图 4-1 所示:

开始

初始化

N 有按键按下? Y

S1 按下

S2 按下

S3 按下

S1num+1

延时增 f 减小

延时减 f 增大

S1num=1

S1num=2

液晶显示 f

液晶显示 f

输出正弦波 液晶显示 f

无输出 S1num=0

图 4-1 流程图

4.2 程序设计 #include <reg51.h> //头文件 #define uchar unsigned char #define uint unsigned int sbit lcdrw=P3^3; //位变量的定义 sbit lcdrs=P3^2; //位变量的定义 sbit lcde=P3^4; //位变量的定义 sbit s1=P2^0; //位变量的定义 sbit s2=P2^1; //位变量的定义 sbit s3=P2^2; //位变量的定义 sbit cs1=P3^5; //位变量的定义 sbit cs2=P3^6; //位变量的定义 uchar s1num,a,ys,j; //变量的定义(字符型) uint fre; //变量的定义 (整型) uchar code tosin[256]={ 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,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,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, 0x00,0x00,0x00,0x00,0x00,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,0x72, 0x76,0x79,0x7c,0x80 };/*正弦波码 */ void delay(uint z) //延时子程序 { uchar i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } void delay1(uint y) //延时子程序

{ uint i; for(i=y;i>0;i--); } void write_com(uchar com) { lcdrs=0; P1=com; delay(5); lcde=1; delay(5); lcde=0; } void write_data(uchar date) { lcdrs=1; P1=date; delay(5); lcde=1; delay(5); lcde=0; } void init() //初始化 { lcdrw=0; lcde=0; cs2=0; cs1=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80+0x00); write_data(0x77); //写 wave: write_data(0x61); write_data(0x76); write_data(0x65); write_data(0x3a); write_com(0x80+0x40); //写 f: write_data(0x66); write_data(0x3a); } void write_f(uint date) //写频率 //1602 写指令

//1602 数据

{ uchar qian,bai,shi,ge; qian=date/1000; bai=date/100%10; shi=date/10%10; ge=date%10; write_com(0x80+0x42); write_data(0x30+qian); write_data(0x30+bai); write_data(0x30+shi); write_data(0x30+ge); write_data(0x48); write_data(0x5a); } void { xsf() //显示频率

if(s1num==1) //if 语句(判断是否是状态 1) { fre=(1000/(9+3*ys)); //频率计算公式 write_f(fre); //写频率 } } void keyscanf() {

//按键部分

if(s1==0) { delay(5); if(s1==0) { while(!s1); //无限循环函数 s1num++; //s1num+1 if(s1num==1) //if 语句(判断是否是状态 1) { ys=0; write_com(0x80+0x05); write_data(0x73); //写 sine: write_data(0x69); write_data(0x6e); write_data(0x65); write_data(0x20); write_data(0x20); }

if(s1num==2) { s1num=0; P1=0; write_com(0x80+0x05); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); write_com(0x80+0x42); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); } } } if(s2==0) { delay(5); if(s2==0) { while(!s2); ys++; } } if(s3==0) { delay(5); if(s3==0) { while(!s3); ys--; } } } void { main() init(); //主函数

//if 语句(判断是否是状态 2)

//按键减频率

//按键加频率

while(1) //无限循环语句 { keyscanf(); if(s1num==1) //正弦波 { for(j=0;j<255;j++) { P0=tosin[j]; delay1(ys); } } if(!(s1&s2&s3)) { xsf(); } } } 根据示波器的波形频率的显示计算出三种波形的频率计算公式如下: 正弦波:f=(1000/(9+3*ys)),其中 ys 为延时的变量。

4.3 正弦信号发生器仿真编译如图 4-2、4-3 所示

图 4-2 原理图

图 4-3 正弦波图形

致谢 对于本次设计,从收集资料到设计完成,期间得到了指导老师的大力支持和 指导。 唐老师他学识渊博,治学严谨,宽以待人在我做毕业设计和期间不仅传授了 做学问的秘诀,还传授了做人的准则。这些都将使我终生受益。无论是在理论学 习阶段,还是在论文的选题、资料查询、开题、研究和撰写的每一个环节,无不 得到导师的悉心指导和帮助。我愿借此机会向导师表示衷心的感谢! 同时我还要真挚的向曾经给予我无限帮助和教导的全体教研室老师表示感 谢。他们治学严谨,学识渊博,视野雄阔,平易近人为广大学生营造了一种良好 的精神氛围。授人以鱼不如授人以渔,置身其间,耳濡目染,潜移默化,使我不 仅接受了全新的思想观念,树立了宏伟的学术目标,领会了基本的思考方式,掌 握了通用的研究学习方法,而且还明白了许多待人接物与为人处世的道理。 在即将毕业离校之际, 我要感谢舍友在生活上给予我的关心和帮助以及学业上的 切磋和指点,感谢 0802 电气同窗和老师三年来对我的照顾,我将终身难忘。

参考文献 [1] 程全.基于 AT89C51 实现的多种波形发生器的设计[J].周口师范学院学 报.2005 [2] 周明德.微型计算机系统及原理及应用 M.清华大学出版社.2002 [3] 童诗白.模拟电路技术基础 M.高等教育出版社.2000 [4] 杜华.任意波形发生器及应用 M.国外电子测量技术.2005 [5] 张友德.单片微型机原理、应用与实践 M.复旦大学出版社.2004 [6] 俞国亮.MCS-51 单片机原理与应用 M.清华大学出版社.2007 [7] 樊明龙.任静.单片机原理与应用 M.化学工业出版社.2005 年 8 月第 1 版


更多相关文章:

非常超级学习网 fccjxxw.com

copyright ©right 2010-2021。
非常超级学习网内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图