单片机波形发生器报告课程设计报告 精品.docx
- 文档编号:23610159
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:26
- 大小:873.83KB
单片机波形发生器报告课程设计报告 精品.docx
《单片机波形发生器报告课程设计报告 精品.docx》由会员分享,可在线阅读,更多相关《单片机波形发生器报告课程设计报告 精品.docx(26页珍藏版)》请在冰豆网上搜索。
单片机波形发生器报告课程设计报告精品
单片机
课程设计报告
东莞理工学院
课程单片机课程设计
题目多波形发生器
院系电子工程学院
专业班级2011级电子信息工程2班
2013年6月27日
第一部分
1.1波形发生器的概述…………………………………………………3
1.2本设计任务………………………………………………………..3
第2部分
2.1本设计的意义…………………………………………………….4
2.2设计要求………………………………………………………..4
2.3设计原理………………………………………………………….4
2.4硬件设计………………………………………………………….4
2.5软件设计………………………………………………………….8
第三部分
3.1心得……………………………………………………………….19
3.2参考文献………………………………………………………19
第一部分
1.1波形发生器的概述
波形发生器:
顾名思义,一个能产生各种波形的仪器。
波形发生器可通过以下方法产生:
(1):
利用模拟电路的运放电路,可以产生三角波、锯齿波、正弦波。
用数字电路的555电路可以产生方波。
这方法的电路元件数量不多,焊接简单,但不稳定难以调试,产生的波形也不理想。
(2):
利用市面上可以购得的专用直接数字合成DDS芯片的波形发生器:
能产生任意波形。
而且可以达到很高的频率,其他方法很难做到这一点,所产生的的波形频率不高。
但这方法成本高,而且课程设计用这些芯片就没意思了。
(3):
用AT89c51单片机和DAC0832芯片,用轻触按键组成的键盘来控制波形的选择以及各种扩展功能。
P1口连接按键键盘,作为波形的选择和其他扩展功能的输入口。
P0口连上上拉电阻后,接上数码管,用来显示所选择波形的类型。
这方法较上面两种方法好。
调试主要通过编辑89c51的程序,而且89c51、DAC0832、LM339这几个芯片的价格不贵。
至于编程方面,锯齿波、三角波、正弦波这三种分段后呈单调性的波形,可以通过等差增减来实现。
但是经过Proteus7Professional仿真后,所产生的波形不理想。
所以通过手动的方法计算出输出各点的电压值,然后在编写程序时以数组的方式给出。
当需要时,只要按照顺序进行输出即可。
1.2本设计任务
设计要求:
一、基本功能:
1、可产生多种波形,如正弦波、三角波、锯齿波、方波;
2、各种波形可通过按键选择;
二、扩展功能:
1、可调节信号的频率、占空比等参数;
2、其他自行增加的功能;
扩展部分:
按键s5、s6分别是控制方波的占空比增、减;s7、s8分别是控制波形的频率增、减。
自行增加的功能:
制作电路的时候,扩展了通过数码管显示1、2、3、4,分别对应所选的波形是正弦波、方波、锯齿波、三角波。
又通过带源可调电位器来改变DAC0832的参考电压Vref的值,从而做到改变所产生波形的幅值。
Vref的值越大,波形的幅值越大。
第2部分
2.1本设计的意义
(1)通过为期一个星期的集中实验,将平时所学的理论知识结合到实际中。
实践中体会理论知识的用途和检验其是否真实。
制作电路的时候,发现模电书的运放输出都没接上拉电阻,还有89c51的P0口输出也没接上拉电阻。
虽然理论上是正确的,但是在实践时发现这会导致所期望的的效果不明显。
(2)学习了如何使用DAC0832、LM339芯片和用Proteus7Professional仿真。
(3)将平时学的分散的知识系统地组合一次,锻炼了系统的思维。
2.2设计要求
设计要求:
一、基本功能:
1、可产生多种波形,如正弦波、三角波、锯齿波、方波;
2、各种波形可通过按键选择;
二、扩展功能:
1、可调节信号的频率、占空比等参数;
2、其他自行增加的功能;
2.3设计原理
课程设计要求输出正弦波、方波、锯齿波、三角波。
这些波形的实现的具体步骤:
(1)正弦波:
通过手动的方法计算出输出各点的电压值,然后在编写程序时以数组的方式给出。
当需要时,只要按照顺序进行输出即可。
将一个周期(360度)分为256个点,则每两个点之间的间隔为1.4度,然后计算出每个点电压对应的数字量,相邻的变化4,形成数组。
重复输出这组数据到DAC0832,就可以在系统输出端得到想要的正弦波。
(2)方波:
按照设定的周期值将输出的电压改变,先输出0xff,延时,再输出0x00,延时。
(3)锯齿波:
也使用查表法。
将三角波的一个周期(360度)分为256个点,相邻点等差,生成数组。
反复输出前128个数据到DAC0832,然后==0,就可以在系统输出端得到想要的锯齿波。
(4)三角波:
将(3)中的数组256个数据全部输出到DAC0832,循环,就可以在系统输出端得到想要的三角波。
通过P1口和轻触开关S1-S4相连接来切换波形输出,P1内带上拉电阻,按键接地,按下后输入0到对应的P1口。
(如按S1键输出正弦波,按S2键产生方波,按S3键产生锯齿波,按S4键产生三角波)。
用P0口控制数码管静态显示波形代号,P0.0==0,显示1(0XF9);P0.1==0,显示2(0xA4);P0.2==0,显示3(0XB0);P0.3==0,显示4(0x99)。
用P2口向DAC0832发送数据,经DAC0832转换后,再把信号放大,最后接到示波器上显示。
2.4硬件设计
设计图示:
仿真的总电路图
仿真的正弦波效果图:
方波的效果图:
锯齿波的效果图:
三角波的效果图:
焊接出来的成品:
所用到的电子元件介绍:
(1)51单片机的内部结构
基本组成部分:
1一个8位的CPU
2128B或256B单元内数据存储器(RAM)
34KB或8KB片内程序存储器(ROM或EPROM)
44个8位并行I/O接口P0~P3。
5两个定时/计数器。
65个中断源的中断管理控制系统。
7一个全双工串行I/O口UART(通用异步接收、发送器)
8一个片内振荡器和时钟产生电路。
图751单片机引脚
管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
(2)DAC0832芯片
DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器。
DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压。
DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。
所以这个芯片的应用很广泛,关于
DAC0832的引脚功能如下:
D0~D7:
数字信号输入端。
ILE:
输入寄存器允许,高电平有效。
CS:
片选信号,低电平有效。
WR1:
写信号1,低电平有效。
XFER:
传送控制信号,低电平有效。
WR2:
写信号2,低电平有效。
IOUT1、IOUT2:
DAC电流输出端。
RfB:
是集成在片内的外接运放的反馈电阻。
VREF:
基准电压(-10~10V)。
VCC:
是源电压(+5~+15V)。
GND:
地。
图8DAC0832芯片图
(3)LM339芯片
LM339引脚图
Thesecomparatorsaredesignedforuseinleveldetection,low–level
sensingandmemoryapplicationsinconsumerautomotiveandindustrial
electronicapplications.
•SingleorSplitSupplyOperation
•LowInputBiasCurrent:
25nA(Typ)
•LowInputOffsetCurrent:
±5.0nA(Typ)
•LowInputOffsetVoltage:
±1.0mV(Typ)LM139ASeries
•InputCommonModeVoltageRangetoGnd
•LowOutputSaturationVoltage:
130mV(Typ)@4.0mA
•TTLandCMOSCompatible
•ESDClampsontheInputsIncreaseReliabilitywithoutAffectingDeviceOperation
(4)一位共阳极数码管
由于单片机的P0口带负载的能力不高,所以连接数码管的时候要接上上拉电阻提高负载能力。
具体解法:
P0.0连a;P0.1连b;P0.2连c;P0.3连d;P0.4连e;P0.5连f;P0.6连g;P0.7连h(或dp)
至于3、8两个脚是内部相连的,接VCC。
引脚图如右图:
2.5软件设计
(1)程序流程图:
(2)键盘扫描系统流程图:
(3)源代码清单
#include
#defineucharunsignedchar
#defineuintunsignedint
sbits1=P1^0;//P1口内部自带上拉电阻,因此外部的轻触按键要接地
sbits2=P1^1;//当按下按键时,P1口输入0,检测出是哪个按键按下
sbits3=P1^2;//
sbits4=P1^3;
sbits5=P1^4;
sbits6=P1^5;
sbits7=P1^6;
sbits8=P1^7;
uintd1,d2;
uints,p;
uintn;
ucharcodesintab[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
};
ucharcodejctab[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,0x5e,
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
};
ucharcodesjtab[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,0x5e,
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,0x40,
0x3e,0x3c,0x3a,0x38,0x36,0x34,0x32,0x30,
0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x20,
0x1e,0x1c,0x1a,0x18,0x16,0x14,0x12,0x10,
0x0e,0x0c,0x0a,0x08,0x06,0x04,0x02,0x00
};
voiddelay(uchark)//延时
{
ucharj;
while((k--)!
=0)
{
for(j=0;j<125;j++);
}
}
voidsin()
{//正弦波
P2=sintab[n];
n=n+p;
if(n>=256)n=0;
}
voidsquare()
{
P2=0xff;//方波
delay(d1-p);
P2=0;
delay(d2-p);
}
voidsawtooth()//锯齿波
{
P2=jctab[n];
n=n+p;
if(n>=127)n=0;
}
voidtriangular()//三角波
{
P2=sjtab[n];
n=n+p;
if(n>=255)n=0;
}
voidboxingkey()
{
//电路所采用的数码管是共阳极的,因此P0口输出1不亮、0亮
if(s1==0)
{
P0=0xF9;//数码管显示1
s=1;
n=0;p=4;
}
elseif(s2==0)
{
P0=0xA4;//数码管显示2
s=2;
n=0;p=4;
}
elseif(s3==0)
{
P0=0xB0;//数码管显示3
s=3;
n=0;p=4;
}
elseif(s4==0)
{
P0=0x99;//数码管显示4
s=4;
n=0;p=4;
}
elseif(s5==0)//占空比增加
{
delay(10);//
if(s5==0)
{
d1--;
d2++;
}
while(!
s5);//检测是否已经松手了,当s5=1跳出死循环
delay(10);//消抖
while(!
s5);//确实一下是否真的松手了
}
elseif(s6==0)//占空比减小
{
delay(10);
if(s6==0)
{
d1++;
d2--;
}
while(!
s6);//检测是否已经松手了,当P1.5=1跳出死循环
delay(10);//消抖
while(!
s6);//确实一下是否真的松手了
}
elseif(s7==0)//频率增加
{
delay(10);
if(s7==0)
{
p=p+1;
}
while(!
s7);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机波形发生器报告课程设计报告 精品 单片机 波形 发生器 报告 课程设计