单片机课程设计报告.docx

上传人:b****7 文档编号:11197663 上传时间:2023-02-25 格式:DOCX 页数:27 大小:510.67KB
下载 相关 举报
单片机课程设计报告.docx_第1页
第1页 / 共27页
单片机课程设计报告.docx_第2页
第2页 / 共27页
单片机课程设计报告.docx_第3页
第3页 / 共27页
单片机课程设计报告.docx_第4页
第4页 / 共27页
单片机课程设计报告.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

单片机课程设计报告.docx

《单片机课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告.docx(27页珍藏版)》请在冰豆网上搜索。

单片机课程设计报告.docx

单片机课程设计报告

摘要

本设计是基于AT89S52单片机的多功能函数信号发生器。

该设计以单片机作为控制核心,外围采用模拟/数字转换电路(DAC0832)、运放电路(LM324)、按键和LED显示灯电路等,可以产生方波、三角波和锯齿波三种波形。

输出波形的周期可调,波形的频率范围为100Hz~1kHz;频率步进间隔为25Hz。

输出波形的峰值可调,波形幅度范围为0~5V,可按步进0.1V(峰-峰值)调整。

LED数码管具有显示输出波形的类型和频率的功能。

其中单片机通过软件对键盘输入的频率数值进行处理,处理结果送与D/A转换部分实现数/模转换,输出的电流再经过电流/电压转换环节,进而形成模拟电压波形,最后经过过载保护电路输出。

同时在LED数码管内显示该频率数值和所对应的波形。

波形的切换可以通过按键直接实现。

输出波形电压的峰值通过调节DAC0832的参考电压来实现。

系统中所需的电源,由独立的供电电路实现。

通过变压器将工频电压降低,经整流、滤波之后,由集成稳压芯片7812和7912将电压值稳定在+12V和-12V,实现对外围电路的稳定供电。

通过对本设计的PROTUES仿真与硬件测试,分别实现了三种波形的连续输出,并能够通过按键实现不同波形之间的相互切换;波形的频率可通过按键按25Hz的步进间隔进行调整,并能通过LED数码管实现波形类型和频率的显示。

通过对DAC0832参考电压的调整,实现了对输出波形峰值的调整。

本设计基本上实现了系统设计所要求的功能。

 

关键词:

AT89S52单片机;信号发生器;DAC0832

目录

1概述3

1.1系统功能概述3

1.2设计原理3

1.3设计思想4

1.4设计功能4

2系统总体方案及硬件设计5

2.1总体方案说明5

2.2系统各部分硬件电路设计5

3软件设计11

3.1系统总体控制功能图11

3.2各波形的产生11

4Proteus软件仿真15

4.1系统仿真环境15

4.2器件参数选取15

4.3仿真结果分析15

5课程设计体会17

参考文献17

附1:

源程序代码18

附2:

系统原理图22

1概述

1.1系统功能概述

本文是基于AT89S52单片机的多功能函数信号发生器。

这个单片机用于产生最初的信号源,通过单片机循环产生数据,再将数据传给数模转换芯片。

单片机通过内部程序控制给出数据的频率,从而控制整个系统的信号输出频率。

单片机送给数模转换芯片DAC0832的数据通过内部器件转换成模拟信号输出,这是输出的是数字信号,需要通过运算放大器转化为模拟信号,通过两级运放转化,得到双极性的信号。

本系统的设计以单片机作为控制核心,外围采用模拟/数字转换电路(DAC0832)、运放电路(LM324)、按键和LED显示灯电路等,可以产生方波、三角波和锯齿波三种波形。

输出波形的周期可调,波形的频率范围为100Hz~1kHz;频率步进间隔为25Hz。

输出波形的峰值可调,波形幅度范围为0~5V,可按步进0.1V(峰-峰值)调整。

LED数码管具有显示输出波形的类型和频率的功能。

系统中有四个按键与单片机的P1口相连,分别为方波、三角波、锯齿波和频率调整,当P1.0按键按下时,P1.0引脚为低电平,系统的输出波形为方波,同样的道理,当P1.1按键和P1.2按键分别按下时,系统的输出波形分别对应为三角波和锯齿波。

而当P1.3按键按下时,可按25Hz的频率步进间隔对输出波形的频率进行调整。

整个系统的输入设备为与P1口相连的四个按键,输出为与按键相应的波形。

1.2设计原理

数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的方法来获得所需要的波形。

AT89S52单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:

中央处理器CPU、随机存取存储器RAM、只读存储器ROM、I/O接口电路、定时器/计数器以及串行通讯接口等,只要将AT89S52再配置键盘及其接口、显示器及其接口、数模转换及波形输出、指示灯及其接口等四部分,即可构成所需的波形发生器,其信号发生器构成原理框图如图1.1所示。

 

图1.1信号发生器系统原理框图

AT89S52单片机是整个波形发生器的核心部分,通过程序的编写和执行,产生各种各样的信号,并从键盘接收数据,进行各种功能的转换和信号频率的调节。

当数字信号经过接口电路到达转换电路,将其转换成模拟信号也就是所需要的输出波形。

1.3设计思想

(1)利用单片机产生方波、正弦波、三角波和锯齿波等信号波形,信号的频率和幅度可变。

(2)将一个周期的信号分离成256个点(按X轴等分,三角波为512个点),每两点之间的时间间隔为△T,用单片机的定时器产生,其表示式为:

△T=T/512(其中三角波为△T=T/512)。

如果单片机的晶振为12MHz,采用定时器方式1,则定时器的初值为:

定时时间常数为:

MOD32表示除32取余数。

(3)一个周期被分离成256(512)个点,由单片机程序产生波形数据,通过D/A进行数模转换输出模拟波形。

(4)频率的调整通过程序进行。

由初值计算公式导出频率调整公式:

其中N为信号被分离的点数(对于方波和锯齿波N为512,对于三角波N为256),FREQ为波形的频率。

通过按键修改FREQ的值来改变装入定时器的计数初值,从而改变波形的频率。

1.4设计功能

(1)本设计利用P1口接4个独立式按键,1个LED显示器。

其中“P1.0”键代表方波输出,“P1.1”键代表三角波输出,“P1.2”键代表锯齿波输出,“P1.3”键进行频率调整。

(2)输出波形的频率范围为100Hz~1kHz;频率步进间隔≤100Hz。

(3)输出波形幅度范围0~5V,可按步进0.1V(峰-峰值)调整。

2系统总体方案及硬件设计

2.1总体方案说明

该智能函数信号发生器由电源电路、晶振电路、复位电路、下载电路、单片机、模拟/数字转换电路、运放电路、按键和LED显示灯电路组成。

可以实现方波、三角波和锯齿波三种波形的连续输出,并能够通过按键实现不同波形之间的相互切换;波形的频率可通过按键按25Hz的步进间隔进行调整,并能通过LED数码管实现波形类型和频率的显示。

并能通过对DAC0832参考电压的调整,实现对输出波形峰值的调整。

2.2系统各部分硬件电路设计

2.2.1AT89S52单片机简介与最小系统设计

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

AT89S52使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,AT89S52拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

2.2.2复位电路设计

MCS-52单片机通常采用上电自动复位、按钮电平复位、外部脉冲复位、上电+按钮电平复位、程序运行监视复位等方式。

AT89S52需要外加复位电路,本设计采用按键+上电复位,上电复位是利用电容充电来实现的,即上电瞬间RST/Vpd端的电位与Vcc相同,随着充电电流的减少,最后被嵌位在0V,采用10uF的C3和10K的R4可以保证加在引脚上的高电平持续2个机器周期,即使单片机有效地复位。

按键可以随时使电路复位,当键按下时1K的R1和10K的R2串联分压使RST为高电平,即复位。

图2.1复位电路图

2.2.3时钟晶振电路

MCS-51内部有一个用于构成震荡器的高增益反向放大器,此放大器的输入端和输出端分别是XTAL1和XTAL2,在XTAL1和XTAL2上外接晶振可构成时钟电路。

时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。

晶振频率的大小决定了单片机系统工作的快慢。

本次设计采用内部方式的外部时钟接法。

为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,电容C1、C2对频率有微调作用,故外接晶振时,C1和C2在本设计中选择30pF,振荡频率取12MHz。

晶振的两个引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。

如下图所示:

图2.2时钟晶振电路图

2.2.4显示电路

本次设计中采用共阴极数码管作为显示器。

LED的驱动电路简单,使用方便,具有耗电少、成本低廉、配置简单灵活、安装方便、耐振动、使用寿命长等优点。

LED显示器与单片机的接口一般有动态显示与静态显示接口两种电路。

1、静态显示方式:

是指当显示器显示某一字符时,发光二极管的位选始终被选中。

在这种显示方式下,每一个LED数码管显示器都需要一个8位的输出口进行控制,显示稳定,提高了CPU的工作效率。

其不足之处是占用硬件资源较多,每个LED数码管需要独占8条输出线。

随着显示器位数的增加,需要的I/O口线也将增加。

2、动态显示方式:

动态显示方式是指一位一位地轮流点亮每位显示器(称为扫描),即每个数码管的位选被轮流选中,多个数码管公用一组段选,段选数据仅对位选选中的数码管有效。

对于每一位显示器来说,每隔一段时间轮流点亮。

显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关,由于扫描速度极快,显示效果与静态驱动相同。

通过调整电流和时间参数,可以既保证亮度,又保证显示。

本次设计中,由于单片机本身提供的I/O口有限,本次设计采用动态显示,数码管采用的是共阴极接法。

用AT89S52的P0口作段码输出时,驱动能力相当大,但由于输出极为漏极开路电路,驱动拉电流负载,引脚上应外接上拉电阻。

因此,在本次设计中我们将数码管各段加上拉电阻后接单片机P0口。

把单片机的P1.0~P1.4管脚直接接到数码管的位选端作为位选信号,低电平有效。

图2.3LED显示电路图

2.2.5数摸转换电路

本设计采用DAC0832芯片构成模数转换电路。

DAC0832系列为美国国家半导体公司生产的具有2个数据寄存器的8位分辨率的D/A转换芯片。

此芯片与微处理器完全兼容,可以完全相互代换,并且价格低廉,接口简单,转换控制容易,在单片机应用系统中得到了广泛的应用。

其内部由8位输入锁存器、8位DAC寄存器、8位D/A转换器电路及转换控制电路构成,通过两个输入寄存器构成两级数据输入锁存。

DAC0832的芯片管脚图如下图所示。

图2.4DAC0832的管脚图

本设计中,让DAC0832工作在直通工作方式,其片选信号

接单片机的P3.0管脚,由程序对芯片的转换进行控制。

数据位接单片机的P2口。

写信号

及传送控制信号

的引脚全部接地,允许输入锁存信号ILE引脚+5V时。

其基准电压VREF引脚经电位计接+5V电压,通过改变基准电压值来改变输出信号的峰值电压。

在程序的控制下,数字量一旦输入,就直接进入DAC寄存器,进行D/A转换。

图2.5数模转换电路原理图

2.2.6运放电路

本设计中使用LM324芯片构成运放电路,实现对DAC0832输出的小信号的放大,并进行电流/电压的转换。

LM324系列运算放大器是价格便宜的带差动输入功能的四运算放大器。

LM324的特点如下:

1.短跑保护输出。

2.真差动输入级。

3.可单电源工作:

3V-32V。

4.低偏置电流:

最大100nA(LM324A)。

5.每封装含四个运算放大器。

6.具有内部补偿的功能。

7.共模范围扩展到负电源。

8.行业标准的引脚排列。

9.输入端具有静电保护功能。

图2.6LM324的管脚图

设计中采用双极性输出,所使用的运放电路图如下图所示。

图2.7LM324运放电路原理图

2.2.7按键电路

本设计中的按键电路由四个独立按键构成,分别与单片机的P1.4~P1.7管脚相连接,并经过74LS00(实现四输入与门的功能)与单片机的P3.2管脚(外部中断0)想接,利用中断和扫描的方式来实现波形的切换和信号频率的调整。

其中P1.4~P1.6按键分别对应方波、三角波和锯齿波,而P1.7按键用于对信号频率的调整。

按键电路如图2.8所示。

图2.8按键电路原理图

2.2.8电源电路

本设计的电源电路是通过变压器将工频电压转换成低压,然后通过整流桥的整流、电容的滤波以及7812和7912的稳压,形成稳定的+12V电压和-12V电压,实现对模数转换电路和运放电路的稳定供电。

系统中所需要的+5V电压,均通过USB直接供电。

单片机外围电路的供电电路图如下图所示。

图2.9电源电路原理图

3软件设计

3.1系统总体控制功能图

图3.1系统总体控制功能图

3.2各波形的产生

3.2.1方波的产生

此波形的实现只需开始的时候设置一个初值然后直接输出这个值就行了,输出一段时间后,然后再重新置一个数据,然后再输出这个数据一段时间,但是此时的时间一定要等于前面那段时间。

其流程图如下:

3.2.2三角波的产生

三角波的实现是设置一个初值,然后进行加数,加到某个数之后再进行减数,减到初值之后就再返回到先前的操作。

此程序输入的VREF的电压是+5V,因此对于相同的中断间隔,该波形输出的最大周期是初值为0和最终值为256,且步数为1,这样输出的波形是最大的。

程序流程图如下图所示:

3.2.3锯齿波的产生

锯齿波的实现过程是首先定义一个初值然后进行加法操作,然后加到某个数之后就再重新设置为初值,再重复执行刚刚的操作,如此循环下去。

在本程序中初值为0.最大值为255。

 

 

3.3系统按键的实现过程

波形的切换和频率的调整通过四个独立按键来实现。

按下一个开关通过P1.4为0则输出方波,P1.5为0输出三角波,P1.6为0输出锯齿波,P1.7为0则频率步进25Hz。

其流程图如下图所示:

4Proteus软件仿真

4.1系统仿真环境

本设计采用Proteus仿真软件进行仿真,Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件。

它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。

它是目前最好的仿真单片机及外围器件的工具。

首先在Proteus的元件库中找到所需的元件,按照硬件设计中的说明把各部件连接起来组成一个数字式温度计硬件系统。

然后把在Keil环境调试下生成的.HEX文件导入到AT89S52里,点击运行符号就可以使软硬件的配套设施在Proteus的环境下仿真实现,以检查是否存在错误。

4.2器件参数选取

单片机采用AT89S52,时钟频率为12MHz。

时钟产生电路的晶振为12MHz,接地电容为30pF。

复位电路的电解电容为10uF,与电容并联的电阻为1K,接地的电阻为10K。

系统的仿真原理图如图4.1所示:

图4.1系统的仿真原理图

4.3仿真结果分析

图4.2.1方波波形图4.2.2调频后的方波图4.2.3调幅后的方波

图4.2.4三角波波形图4.2.5调频的三角波图4.2.6调幅后的三角波

图4.2.7锯齿波波形图4.2.8调频后的锯齿波图4.2.9调幅后的锯齿波

5课程设计体会

课程设计是培养我们综合运用所学知识,发现、提出、分析和解决实际问题的能力。

通过这次单片机课程设计,使我们对单片机的结构、基本工作原理、单片机应用系统开发有了进一步的了解,特别是在硬件设计和软件编程方面有了很大提高。

函数信号发生器的硬件设计电路简单,但对各芯片的性能及工作原理不是很熟悉;软件设计并不太复杂,但需要搞清其工作原理,时序。

在设计的过程中,通过请教老师和同学,上网或上图书馆查资料将这些问题解决。

这样不仅巩固了以前所学过的知识,加深了我对所学知识的理解,而且学到了很多在书本上未涉及的知识,锻炼了搜集有用信息的能力。

软件编程过程中,由于采用C语言编程,以前虽然有过接触,但并不是很熟练,所以参考了别人的设计思路,琢磨研究弄懂后,又试着修改程序。

在不满足要求时反复思考,研究错误出在哪里,经过不懈努力,最终找出错误所在,满足了基本的设计要求。

在编译仿真时对软件KeivuVision4.0和Proteus认识更多,发现了Proteus的很多优点,同时也发现它的不足之处,过于理想化,如果完全依赖,则硬件有可能无法工作。

在硬件设计过程中,需要考虑很多问题,例如元器件参数的选取,单片机的实际驱动能力。

在实际电路的设计时,必须软硬件相结合,使布局合理且软件设计的简单。

但由于是第一次焊接电路板,焊工不熟练,布线不美观以至于在实际焊接时出现了不少问题。

不过,这些问题最终都被解决。

本次设计由两人共同完成,也培养了我们的团队合作精神。

总的来说,这次课程让我们收获很大。

参考文献

[1]余发山主编.单片机原理及应用技术.徐州:

中国矿业大学出版社.2003.12

[2]雷发禹,宾淼林,李永枧,等.基于单片机的信号发生器设计与仿真.邵阳学院学报(自然科学版),2009,6(3):

39-43

[3]谭浩强著.C语言程序设计.清华大学出版社.2005.7

 

附1:

源程序代码

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitsqu=P1^4;

sbittri=P1^5;

sbitser=P1^6;

sbitfreq=P1^7;

sbitcs=P3^0;

bitflag;

uintqian,bai,shi,ge;

uintFREQ;

ucharnum,cho;

ucharTIME0_H=0xff,TIME0_L=0xb1;//定时器的初值设定

ucharleddata[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39};

voidinitial()

{

FREQ=100;//初始频率设定为100Hz

cho=0;

cs=0;

TMOD=0X01;//定时器0,模式1

TH0=0xff;

TL0=0xb1;

IT0=1;//外部中断0,下降沿触发

EX0=1;

ET0=1;

EA=1;

TR0=1;

}

voidsquwave()//方波,256次间断构成一个周期。

若频率50Hz,即0.02=256*Ts,//则定时初值为65536-Ts*10^6;

{//初值计算公式:

65536-10^6/(N*FREQ)

if(++num<128)

P2=0x00;

else

P2=0xff;

}

voidtriwave()//三角波,512次间断构成一个周期

{

if(!

flag)

{

P2=num;

num+=1;

if(num==0)

{

num=255;

flag=1;

}

}

if(flag)

{

P2=num;

num-=1;

if(num==255)

{

num=0;

flag=0;

}

}

}

voidserwave()//锯齿波,256次间断构成一个周期

{

P2=num++;

}

//延时子程序

voiddelay()

{

uinti;

for(i=10;i>0;i--)

;

}

//频率调整

voidfreq_u()

{

uinttemp;

if(freq==0)

FREQ+=25;

if(FREQ==1000)//保证频率在100Hz到1KHz之间,达到边界频率时,调

//整为初始频率

FREQ=100;

if(cho==0|cho==2)

{

temp=65536-3906/FREQ;//方波和锯齿波N=256;65336-10^6/(N*FREQ)

TIME0_H=temp/256;

TIME0_L=temp%256;

}

if(cho==1)

{

temp=65536-1953/FREQ;//三角波N=512;65336-10^6/(N*FREQ)

TIME0_H=temp/256;

TIME0_L=temp%256;

}

}

//对显示的频率数据进行处理

voiddatadeal_f()

{

bai=FREQ/100;

shi=FREQ%100/10;

ge=FREQ%10;

}

//按键中断处理程序

voidkeydeal()interrupt0

{

if(squ==0)//切换为方波

{

FREQ=100;

cho=0;

qian=10;//最高位显示“A”,指示方波

}

if(tri==0)//切换为三角波

{

FREQ=100;

cho=1;

qian=11;//最高位显示“b”,指示三角波

}

if(ser==0)//切换为锯齿波

{

FREQ=100;

cho=2;

qian=12;最高位显示“C”,指示锯齿波

}

if(freq==0)

freq_u();

datadeal_f();

}

//定时器中断处理程序

voidintwave()interrupt1

{

switch(cho)

{

case0:

{TH0=TIME0_H;TL0=TIME0_L;squwave();break;}//方波

case1:

{TH0=TIME0_H;TL0=TIME0_L;triwave();break;}//三角波

case2:

{TH0=TIME0_H;TL0=TIME0_L;serwave();break;}//锯齿波

default:

;

}

}

//数码管显示

voiddisplay()

{

P0=leddata[qian];//显示波形,A代表方波,“b”代表三角波,

//“C”代表锯齿波。

P1=0xfe;

delay();

P0=0x00;

P0=leddata[bai];//显示频率第1位

P1=0xfd;

delay();

P0=0x00;

P0=leddata[shi];//显示频率第2位

P1=0xfb;

delay();

P0=0x00;

P0=leddata[ge];//显示频率第3位

P1=0xf7;

delay();

P0=0x00;

}

//主函数

voidmain()

{

initial();

while

(1)

{

display();

}

}

附2:

系统原理图

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

当前位置:首页 > 总结汇报 > 学习总结

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

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