基于51单片机的波形发生器设计.docx

上传人:b****9 文档编号:26289551 上传时间:2023-06-17 格式:DOCX 页数:32 大小:1.21MB
下载 相关 举报
基于51单片机的波形发生器设计.docx_第1页
第1页 / 共32页
基于51单片机的波形发生器设计.docx_第2页
第2页 / 共32页
基于51单片机的波形发生器设计.docx_第3页
第3页 / 共32页
基于51单片机的波形发生器设计.docx_第4页
第4页 / 共32页
基于51单片机的波形发生器设计.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

基于51单片机的波形发生器设计.docx

《基于51单片机的波形发生器设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的波形发生器设计.docx(32页珍藏版)》请在冰豆网上搜索。

基于51单片机的波形发生器设计.docx

基于51单片机的波形发生器设计

课题要求:

题目:

设计一个波形发生器,产生单极性、幅度可调、周期可调的方波、锯齿波、三角波、正弦波信号。

要求:

通过键盘设置要产生的波形符号、幅度及周期,且当产生波形时在LED显示这些信息;采用8279接口4*8键盘及8位LED显示器。

说明:

1、由课代表负责分设计小组(2人/组),分组要做到水平高低搭配。

2、鼓励创新,即在完成本课题要求基础上,又添加新的功能者,将给予加分。

3、考核方法:

面试+课程设计报告+设计期间表现。

 

目录:

1、系统总体设计方案规划与选定…………………………………

2、硬件设计…………………………………………………………

3、软件设计………………………………………………………….

4、调试……………………………………………………………….

5、新增功能及实现方法……………………………………………

6、总结与体会………………………………………………………

7、参考文献…………………………………………………………

8、附录(源程序代码、电路图等)………………………………

 

一.系统总体设计方案规划与选定

本次设计采用AT89C51单片机为核心,通过与8279芯片和38译码器、锁存器的配合实现对键盘状态的检测和LED显示的控制,通过D/A转换器和运算放大器以及示波器实现对波形的输出,并且在8位LED显示器上显示波形类型的代号、幅值、频率。

键盘为4*8键盘,通过键盘摁键实现对波形种类、幅值、频率等的调节。

图1.总体方案结构框图

 

二.硬件设计

硬件的选择对于功能的实现非常重要,我们要了解芯片的功能、性能,根据题目要求选择合适的芯片。

(一)硬件介绍

1.单片机选择AT89C51。

AT89C51提供以下标准功能:

4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。

同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。

掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

AT89C51具有优良的性能,符合题目的要求。

图2.AT89C51引脚图

引脚说明:

P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P0口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,需要接上拉电阻。

本次设计中P0口与8279的AD[0..7]连接,作为数据传输口。

P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为低八位地址接收。

本次设计中P1口与D/A转换器的D10—D17口相连。

P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

本次设计中P2.4和P2.7分别连8279的

和A0相连。

P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

口管脚备选功能

P3.0RXD(串行输入口)

P3.1TXD(串行输出口)

P3.2/

INT0(外部中断0)

P3.3/INT1(外部中断1)

P3.4T0(计时器0外部输入)

P3.5T1(计时器1外部输入)

P3.6/

(外部数据存储器写选通)

P3.7/

(外部数据存储器读选通)

本次设计中

分别与8279的

相连;

与8279的IRQ相连,作为中断源。

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA:

当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出。

 

2.8279

8279是一款由单一+5V电源供电的可编程键盘显示接口芯片。

其功能是:

对键盘进行管理和控制;对LED显示器进行控制、对显示数据和显示方式进行管理。

图3.8279芯片

引脚说明:

<1>AD[0..7]:

双向数据总线。

在CPU与8279间做数据与命令传送。

<2>CLK:

8279的系统时钟,100KHz为最佳选择。

<3>RES:

复位输入线。

输入HI时可复位8279。

<4>CS:

芯片选择信号线。

当这个输入引脚为低电平时,可将命令写入8279或读取8279的数据。

<5>A0:

缓冲器地址选择线。

A0=0时,读写一般数据;A0=1时,读取状态标志位或写入命令。

<6>RD:

读取控制线。

RD=0时,8279输送数据到外部总线。

<7>WR:

写入控制线。

WR=0时,8279从外部总线接收数据。

<8>IRQ:

中断请求。

平常IRQ为LO,在键盘模式下,每次读取FIFO/SENSORRAM的数据时,IRQ变为HI,读取后转为LO;在传感器模式下,只要传感器一有变化,就会使IRQ变为HI,读取后转为LO。

<9>SL0~SL3:

扫描按键开关或传感器矩阵及显示器,可以是编码模式(16对1)或解码模式(4对1)。

<10>RL0~RL7:

键盘/传感器的返回线。

无按键被按时,返回线为HI;有按键被按时,该按键的返回线为LO。

在激发输入模式时,为8位的数据输入。

<11>SHIFT:

在键盘扫描模式时,引脚的输入状态会与其它按键的状态一同储存(在BIT6),内部有上拉电阻,未按时为HI,按时为LO。

<12>CNTL/STB:

在键盘扫描模式时,引脚的输入状态会与SHIFT以及其它按键的状态同一储存,内部有上拉电阻,未按时为HI,按时为LO。

在激发输入模式时,作为返回线8位数据的使能引脚。

<13>OUTA0~OUTA3:

动态扫描显示的输出口(高4位)。

<14>OUTB0~OUTB3:

动态扫描显示的输出口(低4位)。

<15>BD:

消隐输出线。

3.DAC0832

DAC0832是8分辨率的D/A转换集成芯片。

与微处理器完全兼容。

这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。

D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。

图4.DAC0832芯片

引脚介绍:

(1)D10~D17:

8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);

(2)ILE:

数据锁存允许控制信号输入线,高电平有效;

(3)CS:

片选信号输入线(选通数据锁存器),低电平有效;

(4)WR1:

数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。

由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;

(5)XFER:

数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;

(6)WR2:

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

由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。

(7)IOUT1:

电流输出端1,其值随DAC寄存器的内容线性变化;

(8)IOUT2:

电流输出端2,其值与IOUT1值之和为一常数;

(9)Rfb:

反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;

(10)Vcc:

电源输入端,Vcc的范围为+5V~+15V;

(11)VREF:

基准电压输入线,VREF的范围为-10V~+10V;

(12)AGND:

模拟信号接地;

(13)DGND:

数字信号接地。

4.38译码器74HC138

图5.74HC138

74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。

74HC138译码器可接受3位二进制加权地址输入(A0,A1和A2,即图中A,B,C),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。

74HC138特有3个使能输入端:

两个低有效(E1和E2)和一个高有效(E3)。

除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高。

利用这种复合使能特性,仅需4片74HC138芯片和1个反相器,即可轻松实现并行扩展,组合成为一个1-32(5线到32线)译码器。

任选一个低有效使能输入端作为数据输入,而把其余的使能输入端作为选通端,则74HC138亦可充当一个8输出多路分配器,未使用的使能输入端必须保持绑定在各自合适的高有效或低有效状态。

74HC138作用原理于高性能的存贮译码或要求传输延迟时间短的数据传输系统,在高性能存贮器系统中,用这种译码器可以提高译码系统的效率。

将快速赋能电路用于高速存贮器时,译码器的延迟时间和存贮器的赋能时间通常小于存贮器的典型存取时间,这就是说由肖特基钳位的系统译码器所引起的有效系统延迟可以忽略不计。

HC138按照三位二进制输入码和赋能输入条件,从8个输出端中译出一个低电平输出。

两个低电平有效的赋能输入端和一个高电平有效的赋能输入端减少了扩展所需要的外接门或倒相器,扩展成24线译码器不需外接门;扩展成32线译码器,只需要接一个外接倒相器。

在解调器应用中,赋能输入端可用作数据输入端。

图6.74HC138真值表

5.锁存器74HC373

373为三态输出的八D透明锁存器

图7.74HC373

当三态允许控制端OE为低电平时,Q0~Q7为正常逻辑状态,可用来驱动负载或总线。

当OE为高电平时,Q0~Q7呈高阻态,即不驱动总线,也不为总线的负载,但

锁存器内部的逻辑操作不受影响。

当锁存允许端LE为高电平时,Q随数据D而变。

当LE为低电平时,Q被锁存在已建立的数据电平。

6.键盘

键盘扫描原理:

在扫描每一行时,读列线,若全为1,说明此行无键按下;若某一列为0,说明有键按下,且行号和列号已经确定。

然后,用同样的方法,依次向列线扫描,读行线上的值。

如果,两次所得的行号和列号分别相同,则确定闭合键的键码。

7.运放与示波器

运算放大器将电流信号转换为电压信号,在示波器上显示出来。

(二)硬件连接

图8.芯片连接图(仿真图)

通过键盘的摁键控制波形类型、频率和幅值。

38译码器对键盘进行行扫描,8279对键盘进行列扫描,扫描结果在通过8279传到单片机中。

CPU可通过查询、中断方式了解到8279所连键盘中是否有健按下,并且确定是哪个键摁下,发出相应的指令,一方面在LED上显示相应的数字符号,一方面通过D/A转换器和运放在示波器上显示输出波形。

其中中断是关键,中断的实现是通过8279内部的FIFO检测键盘的变化,如果有键摁下,IRQ信号变为高电平,通过非门送到单片机的

,向CPU申请中断。

三、软件设计

本次设计采用C语言编程。

与汇编语言相比,C语言程序更加易于理解,在设计编起来较为容易,而且方便寻找错误。

设计中,正弦波、锯齿波和三角波均采取查表法实现,这样就解决了函数法产生波形在调节频率时影响幅值大小的缺点。

设计中需要注意对于每一个子函数都要定义。

C程序:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#definecom8279XBYTE[0x7fff]//adr1-com8279//命令状态口

#definedata8279XBYTE[0x6fff]//adr2-data8279//数据口

ucharcodehello[]={0x6d,0x06,0x00,0x76,0x79,0x38,0x38,0x3f};/*液晶显示51hello字符*/

ucharduanma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//顺序0-9显示字符

ucharkeyval,boxingfs,boxing,f=1,v=5,i,s;//参数初始化

 

floatcodesintab[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,

0xac,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,

};

ucharcodejuchitab[128]=

{

0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,0x0e,

0x10,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e,

0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,

0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,

0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,

0x50,0x52,0x54,0x56,0x58,0x5a,0x5c,0x4e,

0x60,0x62,0x64,0x66,0x68,0x6a,0x6c,0x6e,

0x70,0x72,0x74,0x76,0x78,0x7a,0x7c,0x7e,

0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,

0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9e,

0xa0,0xa2,0xa4,0xa6,0xa8,0xaa,0xac,0xae,

0xb0,0xb2,0xb4,0xb6,0xb8,0xba,0xbc,0xbe,

0xc0,0xc2,0xc4,0xc6,0xc8,0xca,0xcc,0xce,

0xd0,0xd2,0xd4,0xd6,0xd8,0xda,0xdc,0xde,

0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xee,

0xf0,0xf2,0xf4,0xf6,0xf8,0xfa,0xfc,0xfe,//锯齿波数据点阵

};

ucharcodesanjiaotab[256]=

{

0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,0x0e,

0x10,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e,

0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,

0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,

0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,

0x50,0x52,0x54,0x56,0x58,0x5a,0x5c,0x4e,

0x60,0x62,0x64,0x66,0x68,0x6a,0x6c,0x6e,

0x70,0x72,0x74,0x76,0x78,0x7a,0x7c,0x7e,

0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,

0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9e,

0xa0,0xa2,0xa4,0xa6,0xa8,0xaa,0xac,0xae,

0xb0,0xb2,0xb4,0xb6,0xb8,0xba,0xbc,0xbe,

0xc0,0xc2,0xc4,0xc6,0xc8,0xca,0xcc,0xce,

0xd0,0xd2,0xd4,0xd6,0xd8,0xda,0xdc,0xde,

0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xee,

0xf0,0xf2,0xf4,0xf6,0xf8,0xfa,0xfc,0xfe,

0xfe,0xfc,0xfa,0xf8,0xf6,0xf4,0xf2,0xf0,

0xee,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,

0xde,0xdc,0xda,0xd8,0xd6,0xd4,0xd2,0xd0,

0xce,0xcc,0xca,0xc8,0xc6,0xc4,0xc2,0xc0,

0xbe,0xbc,0xba,0xb8,0xb6,0xb4,0xb2,0xb0,

0xae,0xac,0xaa,0xa8,0xa6,0xa4,0xa2,0xa0,

0x9e,0x9c,0x9a,0x98,0x96,0x94,0x92,0x90,

0x8e,0x8c,0x8a,0x88,0x86,0x84,0x82,0x80,

0x7e,0x7c,0x7a,0x78,0x76,0x74,0x72,0x70,

0x6e,0x6c,0x6a,0x68,0x66,0x64,0x62,0x60,

0x5e,0x5c,0x5a,0x58,0x56,0x54,0x52,0x50,

0x4e,0x4c,0x4a,0x48,0x46,0x44,0x42,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 交通运输

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1