基于单片机的波形发生器方案设计书.docx
《基于单片机的波形发生器方案设计书.docx》由会员分享,可在线阅读,更多相关《基于单片机的波形发生器方案设计书.docx(20页珍藏版)》请在冰豆网上搜索。
基于单片机的波形发生器方案设计书
课程设计报告
学校:
安徽建筑大学
课题名称:
基于单片机的波形发生器
学号:
10205900143
班级:
10城建电子1班
学生:
圣茂芳
指导教师:
严辉,夏巍,丁刚
时间:
2013年6月17日至2013年6月30日
第一章:
引言
1.1设计目的,任务和要求
1.2摘要
1.3波形发生器概述
1.4总体方案介绍
1.4.1整体流程图
1.4.2基于proteus电路的整体框图
2.1AT89C51单片机最小系统
2.2MCS-51单片机的内部结构
2.2.1典型的MCS-51单片机由以下几个基本部分组成
2.2.2MCS-51单片机的引脚描述
2.3晶振电路
2.4 4x4矩阵键盘的设计
2.5显示模块
第三章系统软件设计
3.1开发软件KeiluVision3简介
3.2各模块程序编写
3.2.1键盘矩阵模块
3.2.2锯齿波程序编写
3.2.3三角波程序编写
3.2.4方波程序编写
第四章附件
4.1原理图
4.2个人总结
4.3参考文献
第一章:
引言
1.1设计目的、任务和要求
一:
设计目的
课程设计是一项重要的实践性教育环节,是学生在完成本专业所有课程学习后必须接受的一项结合本专业方向的、系统的、综合的工程训练。
在指导教师的指导下,运用工程的方法,通过一个较复杂的课题的设计练习,可使学生通过综合的系统设计,熟悉设计过程、设计要求、完成的工作内容和具体的设计方法,掌握必须提交的各项工程文件。
二:
设计任务
1.掌握数/模转换器的控制原理;
2.结合8051设计一个8位的D/A控制系统;
3.设计一4×4键盘,其中0—9号键为数字键,用于A/D的输出点压设置,K0—K5键作为功能键;
4.K4键为设置键,用于A/D的上下限电压设置,K5键为确认键,用于设置A/D输出电压的确认;
5.K0键,输出三角波波形;
6.K1键,输出锯齿波波形;
7.K2键,输出阶梯波波形;
8.K3键,输出梯形波波形;
三:
设计要求
1.方案论证
按系统功能实现要求,决定控制系统的实现方案,选择芯片,做出系统框图。
2.硬件设计电路
根据设计内容设计出硬件电路图并作详细的设计说明,并绘出电路图。
3.系统程序设计
采用模块化设计方法,画好程序流程图,用汇编语言或C语言编写相应的控制程序。
1.2.摘要
本系统是基于AT89C51单片机的数字式低频信号发生器。
采用AT89C51单片机为控制核心,外围采用数字/模理转换电路(DAC0832)、运放电路(LM324)、按键和8位数码管等。
通过按键控制可产生方波、三角波、梯形波、阶梯波。
其设计简单、性能优好,可用于多种需要低频信号的场所,具有一定的实用性。
各种各样的信号是通信领域的重要组成部分,其中方波、三角波和阶梯波、梯形波等是比较常见的几种波形发生装置。
为了实验、研究方便,研制一种灵活适用、功能齐全、适用方便的信号源是十分必要的。
本文介绍的事利用AT89C51单片机和数模转换器件DAC0832产生所需不同信号的低频信号源,其信号幅度和频率都是可以按要求控制的。
文中简要介绍了DAC0832数模转换的结构原理和使用方法,AT89C51的基础理论,以及与设计电路有关的各种芯片。
文中着重介绍了如何利用单片机控制D/A转换器产生上述的硬件电路和软件编程。
本次关于产生不同低频信号的信号源的设计方案,不仅在理论和实践上都能满足实验的要求而且具有很强的可行性。
该信号源的特点是:
体积小、价格低廉、性能稳定、实现方便、功能齐全。
关键字:
AT89C51,DAC0832,LM324,双极性输出电路,LCD。
1.3波形发生器概述
在电子工程、通信工程、自动控制、遥测控制、测量仪器、仪表和计算机等技术领域,经常需要用到各种各样的信号波形发生器,随着集成电路的迅速发展,用集成电路可以很方便地构成各种信号波形发生器,用集成电路实现的号波形发生器与其他信号号波形发生器相比,其波形质量、幅度和频率稳定性等性能指标,都有了很大的提高。
波形发生器也称函数发生器,作为实验信号源,是现今各种电子电路实验设计应用中必不可少的仪器设备之一。
目前,市场上常见的波形发生器多为纯硬件的搭接而成,且波形种类有限,多为锯齿波,正弦波,方波,三角波等波形。
1.4总体方案介绍
本次课题设计是由AT89C51为核心板,由4×4的键盘矩阵输入信号,先读键值,从AT89C51输出数字量,再由DAC0832转换为模理量,最后由双极性电路输出电压值,在示波器上显示,在LCD上显示频率和输出电压上下限值。
1.4.1整体流程图
Y
N
Y
1.4.2系统电路图
波形的产生是通过AT89S52单片机执行某一波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。
AT89S52单片机的最小系统有三种联接方式。
一种是两级缓冲器型,即输入数据经过两级缓冲器型,即输入数据经过两级缓冲器后,送D/A转换电路。
第二种是单级缓冲器型,输入数据经输入寄存器直接送入DAC寄存器,然后送D/A转换电路。
第三种是两个缓冲器直通,输入数据直接送D/A转换电路进行转换。
本电路仿真的总图如下:
图1.1电路图
第2章:
硬件结构
2.1AT89C51单片机最小系统
构建良好的硬件平台。
按照题目要求,需要设计的硬件模块包括AT89C51单片机最小系统、DAC0832、4x4矩阵键盘和显示模块五大部分。
2.2MCS-51单片机的内部结构
2.2.1典型的MCS-51单片机由以下几个基本部分组成:
1.一个8位的CPU
2.128B或256B的单元内部存储器
3.4KB或8KB的程序存储器
4.32条I/O口线
5.一个具有五个中断源,2个优先级的嵌套中断结构
6.一个全双工的串行I/O口UART
7.4个并行的I/O口P0-P3
8.一个片内振荡器和时钟电路
2.2.2MCS-51单片机的引脚描述
1.主电源引脚Vss和Vcc
Vss接地
Vcc正常操作、对EPROM编程和验证时接+5伏电源
第3章外接晶振引脚XTAL1和XTAL2
XTAL1外接晶体的一个引脚。
在单片内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。
当采用外部振荡器时,对HMOS单片机,此引脚应接地;对CHMOS单片机,此引脚应悬浮。
XTAL2外接晶体的另一个引脚。
在单片内部,接至上述振荡器的反相放大器的输出端,当采用外部振荡器时,对HMOS单片机,此引脚应接振荡器的信号,即把此信号直接接到内部时钟发生器的输入端;对CHMOS单片机,此引脚应悬浮。
3控制或其他电源复用引脚RST/Vpd、ALE等
RST/Vpd当振荡运行时,在此引脚上出现两个周期的高电平将使单片机复位。
推荐在此引脚与Vss引脚之间接一个约8.2K的下拉电阻,与Vcc引脚之间连接一个约10uF的电容,以保证可靠的复位。
Vcc掉电期间,此引脚上可接备用电源,以保持内部的RAM的数据。
当Vcc下掉到低于规定的水平,而Vpd在其规定的电压范围内,Vpd就向内部的RAM提供备用电源。
ALE当访问外部存储器时,ALE的输出用于锁存地址的低位字节。
即使不访问外部存储器,ALE端仍以不变的频率周期性的输出正脉冲信号,此频率为振荡器频率的1/6。
因此,它可用作对外输出的时钟,或用于定时的目的。
2.3晶振电路
晶振大小一般选取11.0592M或者12M,+5V供电,各参数通过计算或者理论得到。
2.4 4x4矩阵键盘的设计
2.4.14x4矩阵键盘工作原理
给P1赋值0xf0,这时P1^4,P1^5,P1^6,P1^7为高电平,P1^0,P1^1,P1^2,P1^3为低电平。
如果这时候有按键按下那么P1^4,P1^5,P1^6,P1^7就有一个会变成低电平。
因此P1的值就不等于0xf0,这是就可以判断有按键按下。
然后延时一段时间去抖动,然后给P1赋值0xfe,也就是P1^0为低电平,其他为高电平,这时如果有在P1^0线上的P1^4,P1^5,P1^6,P1^7有按键按下,那么就会出现低电平,从而判断哪个按键按下;如果没有那么就给P1赋值0xfd,也就是P1^1为低电平,其他为高电平.,相同方法判断是否有按键按下;如果没有那么就给P1赋值0xfb·····如此类推,一共四次检测。
2.4.24x4矩阵键盘应用电路
2.5显示模块
第三章系统软件设计
3.1开发软件KeiluVision3简介
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。
如果你使用C语言编程,那么Keil几乎就是你的不二之选。
3.2各模块程序编写
3.2.1键盘矩阵模块
#include
-CONFIG(0X1832)。
intresult。
voiddelay()。
voidinit()。
voidscan()。
vioddisplay(intx)。
voidmain()
{
while
(1)
{
init()。
scan()。
display(result)。
}
}
voidinit()
{
ADCON1=OX07。
TRISA=OX0F。
TRISC=OX00。
PORTA=OXFF。
}
voidscan()
{
PORTC=OXF7。
ASM("NOP")。
result=portc。
result=result&OX07。
if(result!
=OXf0)
{
result=result|OX07。
}
else
{
PORTC=OXFb。
ASM("NOP")。
result=portc。
result=result&OXf0。
if(result!
=OXf0)
{
result=result|OX07b。
}
else
{
PORTC=OXFd。
ASM("NOP")。
result=portc。
result=result&OXf0。
if(result!
=OXf0)
{
result=result|OX0d。
}
else
{
PORTC=OXFe。
ASM("NOP")。
result=portc。
result=result&OX07。
if(result!
=OX0e)
{
result=result|OX0e。
}
else
{
rresut=OXff。
}
}
}
}
}
3.2.2锯齿波程序编写:
voidjuchi()
{
uinti。
i=0。
while
(1)
{
p0=i。
delay(t)。
i=i+1。
p0=i。
delay(t)。
xianshiqi(t)。
if(i==256)
{
i=0。
}
if(s5==0)
t=t+1。
}
if(s6==0)
{
t=t-1。
}
}
}
3.2.3三角波程序编写:
voidsanjiaobo()
{
uintj=0。
while
(1)
{
p0=j。
delay(t)。
j=j+1。
p0=j。
delay(t)。
xianshiqi(t)。
if(j==256)
{
if(j!
=0)
{
j=j-1。
p0=j。
delay(t)。
xianshiqi(t)。
if(s5==0)
{t=t+1。
}
if(s6==0)
{
t=t-1。
}
}
}
3.2.4方波程序编写:
voidfangbo()
{
while
(1)
{
p0=256。
delay(t)。
p0=0。
delay(t)。
xianshiqi(t)。
if(s5==0)
{
t=t+1。
}
if(s6==0)
{
t=t-1。
}
}
第4章:
附件
4.1原理图
4.2个人总结
经过将近三周的单片机课程设计,终于完成了我的数字温度计的设计,基本达到设计要求,从心底里来说,还是很高兴的,毕竟这次设计把实物都做了出来。
但高兴之余不得不深思呀!
在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多。
对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。
因此在整个设计过程中大部分时间是用在程序上面的。
很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。
因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。
要设计一个成功的电路,必须要有耐心,要有坚持的毅力。
在整个电路的设计过程中,花费时间最多的是各个单元电路的连接及电路的细节设计上,如在多种方案的选择中,我们仔细比较分析其原理以及可行的原因。
这就要求我们对硬件系统中各组件部分有充分透彻的理解和研究,并能对之灵活应用。
完成这次设计后,我在书本理论知识的基础上又有了更深层次的理解。
同时在本次设计的过程中,我还学会了高效率的查阅资料、运用工具书、利用网络查找资料。
我发现,在我们所使用的书籍上有一些知识在实际应用中其实并不是十分理想,各种参数都需要自己去调整。
偶而还会遇到错误的资料现象,这就要求我们应更加注重实践环节。
最后还要在此感谢各位毕业设计的指导老师们和我的组员们,他们在整个过程中都给予了我充分的帮助与支持。
设计总结
此课程设计,让我感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。
4.3参考文献
[1]《计算机控制技术》于海生2009.9
[2]《MCS-51/96系列单片机原理及应用》北京航空航天大学
[3]谭浩强,C语言程序设计[M].清华大学出版社,2006.1
[4]《51单片机》视频教程