基于51单片机的数字秒表设计及基于51单片机的波形发生器_第1页
基于51单片机的数字秒表设计及基于51单片机的波形发生器_第2页
基于51单片机的数字秒表设计及基于51单片机的波形发生器_第3页
基于51单片机的数字秒表设计及基于51单片机的波形发生器_第4页
基于51单片机的数字秒表设计及基于51单片机的波形发生器_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

页单片机课程设计报告基于51单片机的数字秒表设计专业:通信工程目录课程名称………………1设计目的和意义………1任务要求………………1任务分析、设计方案…………………1具体实现过程…………9仿真、实验验证过程及实现结果、现象……………12结论……………………14总结与体会……………14课题名称基于51单片的数字秒表设计目的和意义1、通过本次课程设计可以灵活运用单片机的基础知识,依据课程设计内容,能够完成从硬件电路图设计,到电路搭建焊接,再到软件编程及系统调试实现系统功能,完成课程设计,加深对单片机基础知识的理解,并灵活运用,将各门知识综合应用。

2、本次课程设计还可以通过上网查询器件资料,培养对新知识新技术的独立的学习能力和应用能力。3、在这次课程设计中,我们运用到了很多一切所学的知识和一些很有用的软件和工具,如keil4编程软件、Proteus仿真软件、Visio软件、等。4、通过独立完成一个小的数字秒表系统设计,从硬件设计到软件设计,增强分析问题、解决问题的能力,为日后的毕业设计及科研工作奠定良好的基础。5、掌握51单片机软件编程知识、实现功能、设计方法,及KEIL软件使用方法;6、应用所学模拟电子线路的知识,掌握电路的设计与应用;7、熟悉PROTEUS的设计与仿真;8、STC——ISP的使用方法;9、掌握焊接电子元器件的方法以及查阅元件功能与参数的方法、步骤。设计目标或任务要求1、设计目标以单片机为核心,设计数字秒表。通过硬件电路设计,软件设计,电路搭建,作品调试。最后完成本次课程设计。2、设计要求1、计时范围:0~59分59.59秒,整数四位数和小数两位数显示;2、计时精度10毫秒;3、复位按钮,计时器清零,并做好下次及时准备;4、可以对三个对象(A、B)计时,具有启/停控制;5、设开始、停止A、停止B、显示A、显示B、复位按钮。任务分析、设计方案任务分析数字电子秒表具有显示直观、读取方便、精度高等优点,在计时中广泛使用。本设计用单片机组成数字电子秒表,力求结构简单、精度高为目标。设计中包括硬件电路的设计和系统程序的设计。其硬件电路主要有主控制器,计时与显示电路和回零、启动和停表电路等。主控制器采用单片机89C52显示电路采用共阳极LED数码管显示计时时间。本设计利用89C52单片机的定时器/计数器定时和记数的原理,使其能精确计时。利用中断系统使其能实现开始暂停的功能。P0口输出段码数据,P2.0-P2.4口作列扫描输出,P1.1、P3.2、P3.3、P2.5口接四个按钮开关,分别实现开始、暂停、清零和查看上次计时时间功能。电路原理图设计最基本的要求是正确性,其次是布局合理,最后在正确性和布局合理的前提下力求美观。硬件电路图按照图1.1进行设计。图1.1数字秒表硬件电路基本原理图计时采用定时器T0中断完成,定时溢出中断周期为1ms,当一处中断后向CPU发出溢出中断请求,每发出一次中断请求就对毫秒计数单元进行加一,达到10次就对十毫秒位进行加一,依次类推,直到99.99秒重新复位。再看按键的处理。这四个键可以采用中断的方法,也可以采用扫描的方法来识别。复位键和查看主要功能在于数值复位和查询上次计时时间,对于时间的要求不是很严格。而开始和停止键则是用于对时间的锁定,需要比较准确的控制。因此可以对复位和查看按键采取扫描的方式。而对开始和停止键采用外部中断的方式。设计中包括硬件电路的设计和系统程序的设计。其硬件电路主要有主控制器,显示电路和回零、启动、查看、计次电路等。主控制器采用单片机89C52,显示电路采用共阳极LED数码管显示计时时间,四个按键均采用触点式按键。2、单片机的选择本课题在选取单片机时,充分借鉴了许多成形产品使用单片机的经验,并根据自己的实际情况,选择了stc公司的89C52。89C52单片机采用40引脚的双列直插封装方式。图1.2为引脚排列图,40条引脚说明如下:主电源引脚Vss和Vcc①Vss接地②Vcc正常操作时为+5伏电源外接晶振引脚XTAL1和XTAL2①XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。当采用外部振荡器时,此引脚接地。②XTAL2内部振荡电路反相放大器的输出端。是外接晶体的另一端。当采用外部振荡器时,此引脚接外部振荡源。图1.28051单片机引脚图控制或与其它电源复用引脚RST/VPD,ALE/,和/Vpp输入/输出引脚P0.0-P0.7,P1.0-P1.7,P2.0-P2.7,P3.0-P3.7。①P0口(P0.0-P0.7)是一个8位漏极开路型双向I/O口,在访问外部存储器时,它是分时传送的低字节地址和数据总线,P0口能以吸收电流的方式驱动八个LSTTL负载。②P1口(P1.0-P1.7)是一个带有内部提升电阻的8位准双向I/O口。能驱动(吸收或输出电流)四个LSTTL负载。③P2口(P2.0-P2.7)是一个带有内部提升电阻的8位准双向I/O口,在访问外部存储器时,它输出高8位地址。P2口可以驱动(吸收或输出电流)四个LSTTL负载。④P3口(P3.0-P3.7)是一个带有内部提升电阻的8位准双向I/O口。能驱动(吸收或输出电流)四个LSTTL负载。(1)运算器运算器的功能是进行算术运算和逻辑运算。可以对半字节(4位)、单字节等数据进行操作。(2)程序计数器PC程序计数器PC用来存放即将要执行的指令地址,共16位,可对64K程序存储器直接寻址。执行指令时,PC内容的低8位经P0口输出,高8位经P2口输出。(3)令寄存器指令寄存器中存放指令代码。CPU执行指令时,由程序存储器中读取的指令代码送入指令寄存器,经译码后由定时与控制电路发出相应的控制信号,完成指令功能。3、显示电路的选择与设计对于数字显示电路,通常采用液晶显示或数码管显示。本设计的显示电路采用7段数码管作为显示介质。数码管显示可以分为静态显示和动态显示两种。由于本设计需要采用五位数码管显示时间,如果静态显示则占用的口线多,硬件电路复杂。所以采用动态显示。图1.3显示电路基本原理图动态显示是一位一位地轮流点亮各位\o"数码管"数码管,这种逐位点亮显示器的方式称为位扫描。通常各位\o"数码管"数码管的段选线相应并联在一起,由一个8位的I/O口控制;各位的公共阴极位选线由另外的I/O口线控制。动态方式显示时,各\o"数码管"数码管分时轮流选通,要使其稳定显示必须采用扫描方式,即在某一时刻只选通一位\o"数码管"数码管,并送出相应的段码,在另一时刻选通另一位\o"数码管"数码管,并送出相应的段码,依此规律循环,即可使各位\o"数码管"数码管显示将要显示的字符,虽然这些字符是在不同的时刻分别显示,但由于人眼存在视觉暂留效应,只要每位显示间隔足够短就可以给人同时显示的感觉。数码显示管分为共阳数码管和共阴数码管两种共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起,如图1.4(b),通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。图1.4(a)数码管引脚图(b)共阳极内部结构图(c)共阴极内部结构图最大4、按键电路的选择与设计本设计中有四个按键,分别实现开始、暂停、复位和计次功能。这四个键可以采用中断的方法,也可以采用查询的方法来识别。对于复位键和查看键,主要功能在于数值复位和对上次计时时间的查看,对于时间的要求不是很严格,而开始和暂停键主要用于时间的锁定,需要比较准确的控制。因此可以考虑,对复位键和查看键采用查询的方式,而对于开始和暂停键采用外部中断。四个按键均采用低电平有效,具体电路连接图如图1.5所示。5、时钟电路的选择与设计单片机的时钟信号用来提供单片机内各种微操作的时间基准,8051片内设有一个由反向放大器所构成的振荡电路,XTAL1和XTAL2分别为振荡电路的输入和输出端,8051单片机的时钟信号通常用两种电路形式得到:内部振荡方式与外部振荡方式。外部方式的时钟很少用,若要用时,只要将XTAL1接地,XTAL2接外部振荡器就行。对外部振荡信号无特殊要求,只要保证脉冲宽度,一般采用频率低于11.05926MHz的方波信号。图中,电容器C1

、C2起稳定振荡频率、快速起振的作用,电容值一般为5~33pF。但在时钟电路的实际应用中一定要注意正确选择其大小,并保证电路的对称性,尽可能匹配,选用正牌的瓷片或云母电容,如果可能的话,温度系数尽可能低。本设计中采用大小为30pF的电容和11.05926MHz的晶振。图1.6内部振荡电路6、复位电路的选择与设计当8051单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就完成了复位操作。如果RST持续为高电平,单片机就处于循环复位状态,而无法执行程序。因此要求单片机复位后能脱离复位状态。而本系统选用的是11.05926MHz的晶振,因此一个机器周期为1.09μs,那么复位脉冲宽度最小应为2.18μs。在实际应用系统中,考虑到电源的稳定时间,参数漂移,晶振稳定时间以及复位的可靠性等因素,必须有足够的余量。根据应用的要求,复位操作通常有两种基本形式:上电复位、手动复位。图1.10单片机复位电路7、系统总电路的设计系统总电路由以上设计的显示电路,时钟电路,按键电路和复位电路组成,只要将单片机与以上各部分电路合理的连接就组成了系统总电路。系统总电路图附录B所示。8051单片机为主电路的核心部分,各个电路均和单片机相连接,由单片机统筹和协调各个电路的运行工作。8051单片机提供了XTAL1和XTAL2两个专用引脚接晶振电路,因此只要将晶振电路接到两个专用引脚即可为单片机提供时钟脉冲,但在焊接晶振电路时要尽量使晶振电路靠近单片机,这样可以为单片机提供稳定的始终脉冲。复位电路同晶振电路,单片机设有一个专用的硬件复位接口,并设置为高电平有效。按键电路与单片机的端口连接可以由用户自己设定,本设计中软件复位键和查看键分别接单片机的P1.1和P2.5,均设为低电平有效。而另外的开始键和暂停键两键使用了外部中断,所以需要连接到单片机的特殊接口P3.3和P3.2,这两个I/O口的第二功能分别为单片机的外部中断1端口和外部中断0端口。同样设置为位低电平有效。显示电路由五位数码管组成,采用动态显示方式,因此有8位段控制端和5位位控制端,八位段控制接P0口,P0.0~P0.7分别控制数码显示管的a、b、c、d、e、f、g、dp显示,8051的P0口没有集成上拉电阻,高电平的驱动能力很弱,所以需要接上拉电阻来提高P0的高电平驱动能力。五位位控制则由低位到高位分别接到P2.0~P2.4口,NPN三极管9013做为位控制端的开关,当P2.0~P2.4端口任意一个端口为高电平时,与其相对应的三极管就导通,对应的数码管导通显示。通过以上设计已经将各部分电路与单片机有机的结合到一起,硬件部分的设计以大功告成,剩下的部分就是对单片机的编程,使单片机按程序运行,实现数字电子秒表的全部功能。具体实现过程1、对数字秒表设计进行分析,敲定几组方案;2、在PROTUES软件中,画电路图,进行仿真、调试;3、对自己想要实现的秒表现象进行编程,运用KEIL软件;并于Proteus联调。4、调试过程中要不断改进自己的方案;6、测试各个所需元件,STC89C52RC,数码管。7、将方案敲定之后,对LED数字秒表进行焊接其中最主要的是对最小系统的焊接时非常关键的,在进行焊接数码管时,很关键。8、将最小系统焊接好以后要用数字万用表进行测试,首先要测试有没有短接、断接的地方,再将焊好的板子放在电源上进行加电,看电路板子是否正常工作。9、将最小系统板子与数码管板子连在一个,通过USB口与电脑相连,打开串口助手,将KEIL软件中的程序下载到单片机中,进行验证。10、具体程序/*********************************************************文件名: 秒表.c*描述: 基于51单片机的数码管数字秒表; 带有指示灯,蜂鸣器,按键(启动、清零、计次)*创建人: 罗宏*单位: 佳木斯大学信息电子技术学院电子协会*日期: 2014.6.26*开发环境: Keil4*邮箱: 744544126@*晶振: 11.05926MHZ*版本号: *********************************************************/#include<reg52.h>#defineuintunsignedint //宏定义无符号整型#defineucharunsignedchar //宏定义无符号字符型#defineDUAN (P0) //宏定义数码管段代码#defineWEI (P2) //宏定义数码管位代码sbitkeystart_stop= P3^2; //定义启动/停止按键sbitkeyrest = P3^3; //定义复位/清零按键sbitkeyrecord = P3^4; //定义计数/存储按键sbitkeydispaly = P3^5; //定义计数/显示按键sbitbeep = P3^6; //定义蜂鸣器sbitled = P3^7; //定义ucharx,msec5,msec10,second,minute; //时间变量ucharmsec,sec,min; //显示变量ucharcodetable1[]={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管数组不带点显示ucharcodetable2[]={0x40,0x79,0x24,0x30, 0x19,0x12,0x02,0x58,0x00,0x10}; //共阳数码管带点显示/********************************函数名称:延时函数delay功能:延时指定毫秒参数:ucharx返回值:无********************************/voiddelay(ucharx){ uintb,c; for(b=x;b>0;b--) for(c=110;c>0;c--);}/********************************函数名称:定时器初始化函数time_init(void)功能:定时器初始化参数:无返回值:无*********************************/voidtime_init(void){ msec5=0; TMOD=0x01; TH0=(65536-9174)/256; TL0=(65536-9174)%256; ET0=1; TR0=1; EA=1; }/********************************函数名称:显示函数display()功能:数码管显示参数:ucharmsec,ucharsec,ucharmin返回值:无*********************************/voiddisplay(ucharmsec,ucharsec,ucharmin){ DUAN=table1[(msec%10)%10];//0.01秒5.64%10=64%10=0.04 WEI=0x01; delay(2); WEI=0x00; DUAN=table1[(msec/10)%10];//0.1秒5.64/10=56%10=0.6 WEI=0x02; delay(2); WEI=0x00; DUAN=table2[(sec%10)];//1秒 564%10=6 WEI=0x04; delay(2); WEI=0x00; DUAN=table1[(sec/10)];//10秒 564/10=56%10=6 WEI=0x08; delay(2); WEI=0x00; DUAN=table1[(min%10)];//1分 564/10=56%10=6 WEI=0x10; delay(2); WEI=0x00; DUAN=table1[(min/10)];//10分 564/10=56%10=6 WEI=0x20; delay(2); WEI=0x00;}/********************************函数名称:蜂鸣器函数功能:蜂鸣器发声参数:无返回值:无*********************************/voidbeep_led(){ beep=0; delay(600); beep=1; delay(600); led=0; delay(600); led=1;}/********************************函数名称:按键函数功能:调试按键的函数参数:无返回值:无*********************************/voidkeys(){ if(keystart_stop==0) { delay(5); if(keystart_stop==0) TR0=~TR0; beep_led(); while(!keystart_stop); } if(keyrest==0) { delay(5); if(keyrest==0) TR0=0; msec5=0; msec10=0, second=0; minute=0; beep_led(); while(!keyrest); }}/********************************函数名称:主函数功能:参数:无返回值:*********************************/voidmain(){ucharjishu=0;ucharflag=0;ucharmsec1=0,sec1=0,min1=0;ucharmsec2=0,sec2=0,min2=0;time_init();while(1){ keys();//键盘的扫描函数一定要放在while循环里边 msec=msec10; sec=second; min=minute; if(flag==1) { display(msec1,sec1,min1); } elseif(flag==0) { display(msec,sec,min); } else { display(msec2,sec2,min2); } if(keyrecord==0) { delay(5); if(keyrecord==0) { beep_led(); jishu++; if(jishu>2) { jishu=0; } elseif(jishu==1) { msec1=msec10; sec1=second; min1=minute; } elseif(jishu==2) { msec2=msec10; sec2=second; min2=minute; } } while(!keyrecord); } if(keydispaly==0) { delay(5); if(keydispaly==0) { beep_led() ; flag++; if(flag>2) flag=0; } while(!keydispaly); } }}/**********************************函数名称:中断函数功能:参数:无返回值:***********************************/voidtimer0()interrupt1{TH0=(65536-9174)/256; TL0=(65536-9174)%256; msec10++; // msec10加一次等于10ms if(msec10==100) // j=100为1s { msec10=0; second++; if(second==60) //second=60为1minute { second=0; minute++; if(minute==60) //minute=60为1hour { minute=0; } }} }仿真、实验验证过程及实现结果、现象结论本设计的数字电子秒表系统采用89C52单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计计时器。将软、硬件有机地结合起来,使得系统能够实现八位LED显示,显示时间为0~59分59.59秒,计时精度为0.01秒,能正确地进行计时,同时能记录两次时间,并在计时后对上一次计时时间进行查询。其中软件系统采用C语言编写程序,包括显示程序,定时中断服务,延时程序,按键扫描程序等,并在keil4中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。八、总结(体会)开始做设计的时候总是会犯一些错误,只有经过不停的改错,不断地编译得到正确的程序,说明作为一名编程人员是不能粗心大意的,一个程序的质量的高低与你的细心与否有着很大的联系,在编程时,我充分地使用了结构化的思想,这样程序检查起来也比较方便,调试时也会方便很多。只要一个模块一个模块的进行调试就可以了,充分体现了结构化编程的优势。在设计中要求我要有耐心和毅力,细心是最重要的,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要有足够的耐心,通过这次设计和设计中遇到的问题,我也积累了一定的经验。为了能完成这次设计,我还复习了《数字电子技术》、《模拟电子技术》、《微机接口技术》、《单片机技术》、《C语言》。通过这次单片机课程设计,我了解到自己在单片机方面还有很多不足,特别是单片机指令系统及stc89C52单片机各引脚的第二功能等等知识不够了解.因此我在设计中遇到不懂的东西就马上查资料或请教同学.这不仅加深了我对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为自己的东西。毕业论文任务书课题名称基于单片机原理的波形发生器指导教师姓名工作单位广西民族大学信息科学与工程学院一、主要内容:利用单片机80C51采用程序设计方法产生方波、三角波、正弦波、锯齿波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产100Hz-20KHz的波形。通过键盘来控制四种波形的选择、频率选择,并通过LED显示其当前的频率。二、基本要求(基本技术要求与数据)1.熟悉汇编语言的语法和结构,学会应用汇编语言编写一些简单的源程序。

2.熟悉PROTEUS软件的基本功能,学会应用PROTEUS软件仿真一些简单的程序。

3.设计一个利用单片机80C51采用程序设计方法产生方波、三角波、正弦波、锯齿波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产100Hz-20KHz的波形。通过键盘来控制四种波形的类型选择、频率变化,并通过LED显示其各自的频率。

4.用汇编语言编写本系统的源程序,并用PROTEUS软件进行仿真,模拟各功能模块的实现。

5.按时完成开题报告、论文报告。三、论文(设计)工作起始日期:自20年12月1日起,至20年12月11日四、进度与应完成的工作:五、主要参考文献、资料[1]童诗白,华成英.模拟电子技术基础〔M〕.北京:高等教育出版社,2003.345-362[2]潘永雄,沙河,刘向阳.电子线路CAD实用教程〔M〕.西安:西安电子科技大学出版社,2001.13-118.[3]张毅刚,彭喜源,谭晓昀,曲春波.MCS-51单片机应用设计[M].哈尔滨:哈尔滨工业大学出版社,1997.53-61目录摘要…………...1一、题目要求及分析……….3二、总体系统方案设计…….42.1总体设计思路………….52.2总体框图………………..52.3信号发生部分…………..52.4显示部分………………..62.5按键部分…6三、硬件电路……………73.1功能与基本原理……….73.2资源分配……………….83.3波形转换(D/A)电路………………..93.4红外电路………………103.5复位电路……………….113.6外部时钟电路………….123.7LCD显示部分电路…………………….133.8电源部分……………133.9独立按键部分………….143.10串口通信模块………...14四、软件设计………………..154.1程序流程图……………154.2LCD显示流程图………16五、系统仿真…………………..175.1仿真电路图……………175.2输出波形图……………17六、硬件和软件测试…………..196.1硬件调试………………196.2软件调试………………19七、设计心得…………………..20八、参考文献…………………..21九、致谢………..22十、附件………..23基于单片机原理的波形发生器摘要:本系统采用单片机C8051为控制核心,输出数字量,然后由DAC0832把数字量转换成模拟量;但是输出的是电流,需要用运放(OP07),把电流转换成电压量。显示利用的是LCD1602的液晶,显示其波形,幅值。按键应用的是独立按键,用来波形的切换,幅值,频率的调解。其运算核心,我们通过MATLAB对正弦波,三角板,正弦波进行采样,得到一组组数据,然后同过数组存储;利用中断对数组进行扫描。其频率的调解就是调节其中断间隔的时间,幅值就是调节其数字的大小(同时乘以某个小于1的数)。为了波形的合成,我们采用的点的个数都是20个。关键词:AT-89C51DAC0832独立按键OP07TheDesignofWaveformGeneratorBasedon51Abstract:Thissystemadoptssingle-chipC8051asthecontrolcore,digitaloutput,andthenbyDAC0832convertdigitaltoanalog;Buttheoutputiscurrent,theneedtouseoperationalamplifier(OP07),theamountofcurrentintoavoltage.DisplayusingtheLCD1602LCD,displaythewaveformamplitude.Keyapplicationsisindependent,switchtowaveform,amplitude,frequencyofmediation.Itscoreoperation,weuseMATLABtosinewave,triangle,thesinewavesamples,groupsofdata,andthenwithanarrayofstorage;Usingtheinterruptforscanningarray.Thefrequencyofmediationistoadjustoneintervaltime,amplitudeisadjustingthesizeofitsdigital(multipliedbyacertainnumberoflessthan1)atthesametime.Forthewaveformsynthesis,weadoptthenumberofpointsis20.Keywords:AT-89C51DAC0832SeparatebuttonOP07一、题目要求及分析设计任务:设计制作一个波形发生器,该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定形状波形。示意图如下:图1设计要求图设计要求:1.具有产生正弦波、方波、三角波三种周期性波形的功能;2.用键盘输入编辑生成上述三种波形(同周期)的线性组合波形,以及由基波及其谐波(5次以下)线性组合的波形。3.具有波形存储功能。4.输出波形的频率范围为100Hz~20kHz(非正弦波频率按10次谐波计算);重复频率可调,频率步进间隔≤100Hz。5.输出波形幅度范围O~5V(峰—峰值),可按步进0.1V(峰—峰值)调整。6.具有显示输出波形的类型、重复频率(周期)和幅度的功能。7.增加红外配置功能(串口配置程序或其他方式)二、总体系统方案设计题目要求实现的任务是设计并制作一个函数信号发生器,能够产生正弦波、方波、三角波,要求不用DDS和专用的波形产生芯片,频率范围在1Hz~1MHZ可调,在频率范围为1HZ~10KHz时,步进不大于10Hz在频率范围为10KHz~1MHz时,步进不大于100Hz,并且电压范围在0~5V可调,步进为0.1V,能够实时的显示波形的类型及其频率和幅值。现在对以下方案进论证和验证。2.1总体设计思路根据题目的要求,经过仔细的考虑各种要素,制定了整体方案:以AT89C51单片机为控制核心,P0口接DAC0832信号输入并进行数模转换,P1口接矩阵键盘,P2口接液晶显示器LCD1602,由程序控制P0口产生波形(分别是正弦波、方波、三角波),再由按键及按键次数控制产生波形的种类及频率和幅值在一定范围内可调,并且能够按任意键实现波形频率和幅值的设定(不通过步进按键设定来控制)。由运放OP07实现DAC0832输出电流到电压的转换,即实现数字信号到模拟信号的转换。在LCD上实时的显示波形的频率和幅值,波形在示波器上产生。其波形的存储方式,我们通过按键确定,一旦按键按下后,就把当时的波形对应的参数存储起来,例如幅度值,频率值等参数。波形的合成:为了波形的合成,我们在采样的时候,对正弦波,三角波,方波都只取乐20个点;因为点越少,其频率达到的值就会越大;合成时就是对幅值点进行一个叠加后赋给DAC0832输出一组波形。红外,通过外部中断高低电平的延时的时间来进行解码。2.2总体框图本系统总体框图如图2所示:图2系统总体框图2.3信号发生部分方案一:采用模拟分立元件或单片压控函数发生器,可以产生正弦波、方波、三角波,通过调整外部元件可以改变输出频率,但采用模拟元器件由于元件分散性太大,因而产生频率稳定性较差,精度低,地抗干扰能力低,成本高,而且灵活心性较差,不能实现任意波形以及波形运算输出等智能化的功能。方案二:采用锁相式频率合成方案,锁相式频率合成一个高稳定度和精确度的大量离散技术,他在一定程度上解决了既要频率稳定精确又要频率在较大的范围内可调的矛盾,但是频率受VCO可便频率范围的影响,高低频率比不可能做的很高,而且只能产生正弦波或方波,不能满足任意波形的要求。方案三:采用单片机和数模转换DAC0832实现波形的产生。波形的产生是通过AT89C51执行方波波形程序,向D/A转换器的输入端按一定的规律发生数据,从而在DA转换电路输出端得到相应的电压波形。在AT89C51的P1口接矩阵按键,通过软件编程来选择波形、幅值、频率,每种波形对应一个按键,此方案原理简单,实现起来比较容易。经比较,方案三能够更好的实现题目的要求,三种波形的产生可有程序控制,并通过按键选择波形的输出,在示波器上显示波形。波形的周期与频率步进也可以用程序控制,具有线路简单、结构紧凑等优点。在本设计的基础上,加上LCD显示器,则可以通过按键设定波形频率,并在LCD显示频率、幅值电压。输出的波形稳定,精度高,滤波好,抗干扰效果好,连接简单,性价比高。综上所述,我们选择第三种方案。2.4显示部分方案一:数码管显示,由于本题要求实时的显示输出信号的幅度、频率,而数字不能显示字符。方案二:LED点阵显示,LED点阵显示虽然能够显示数字和字符,但是显示的效果不好,而且不易编程。方案三:LCD液晶显示,LCD液晶显示不但能显示字符和数字,而且效果较好,且容易实现。2.5按键部分方案一:采用独立按键,他的按键的数目比少,但是它的结构简单,方便操作,执行效率高等优势。方案二:采用矩阵键盘,它以较少得IO口实现了按键的功能,随之其操作比较复杂。经对比,由于我们需求的按键比较少,但是对执行的效率比较高,所以采用独立按键。三、硬件电路本系统由单片机、波形转换(D/A)电路、显示接口电路、键盘电路、电源电路、串口电路等六部分组成。电路图如图3.1所示:图3硬件电路原理图3.1功能与基本原理功能:形成扫描码、键值识别、案件处理、参数设置、字符设置等形成液晶显示波形的类型及频率和幅值;通过定时器0产生定时中断,形成波形的数字编码,并输出到D/A接口电路和显示驱动电路。AT89C51外接12M晶振作为时钟频率,并采用电源复位设计。复位电路采用上电复位,其工作原理是,当通电时,电容两端相当于短路,于是TST引脚为高电平,然后对电容充电。RST端电压慢慢下降,降到一定程度,即为低电平,单片机开始工作。产生方波程序思路:对于小于100Hz的频率,根据定时器溢出时间1us,将频率值换算为定时器溢出次数,当达到规定的次数时,将输出管脚的状态取反达到方波的产生;对于大于100HZ的频率,直接根据频率值设置其定时溢出的时间,当溢出时间达到时,将输出管脚取反达到方波的产生。产生三角波程序思路:要产生峰值电压为5V的三角波,一个周期需要定时510次,由此便可以计算出每次定时溢出的时间,再将每次定时的电压加权便可以达到三角波的波形;产生正弦波程序思路:给正弦波的一个周期设定table表,由20个数据,相当于每个周期定时255次,则每次定时溢出的时间便可计算出,每个点的电压加权便可得到正弦波的电压,即,形成正弦波。3.2资源分配软、硬件设计是比不可少的,为了满足功能和指标的要求,资源分配为:单片机用12MHz晶振,P0口与DAC0832相连;P1口接矩阵按键,实现频率、幅值以及波形的选择;P2口接LCD1602液晶显示器,实时显示波形的频率、幅值、类型。3.2.1显示接口电路功能:驱动LCD液晶显示、扫描按钮。由LCD1602液晶显示器和矩阵按键组成。当某一按键按下时,扫描程序扫描到之后,通过P2口将数字信号发送到LCD1602,LCD1602液晶专门用于显示字母、数字、符号等点阵式LCD,其外接电压时5V。扫描利用软件程序实现,当某一按键按下时,扫描立即检测到,随即调用子程序,执行相应的功能。其与单片机连接如图4所示:图4显示部分电路图3.3波形转换(D/A)电路功能:将波形样值得编码转换成模拟值,完成波形的输出。由一片DAC0832和LF356运放组成。DAC0832是一个具有两个输入数据寄存器的8位DAC。目前生产的DAC芯片分为两类,一类芯片内部设置有数据寄存器,不需要外加电路就可以直接与微型计算机接口。另一类芯片内没有数据寄存器,输出信号随数据输入线的状态的变化而变化,因此不能直接与微型计算机接口,必须通过并行口与微型计算机接口。DAC0832是具有20条引线的双列直插式CMOS器件,它内部具有两级数据寄存器,完成8位电流D/A转换,股不需要外加电路。DAC0832是电流输出型,示波器上显示波形,通常需要电压信号,电流信号到电压信号的转换可以用运算放大器LF356实现。单片机想DAC0832发送数字编码,产生不同的输出。先利用采样定理对各种波形进行抽样,然后把各种采样值进行编码,收到的数字量存入各个波形表,执行程序时通过查表的方法依次取出,经过D/A转换后输出就可以得到波形。假如N个点构成波形的一个周期,则DAC0832输出N个样点值后,样值点形成运动轨迹,即,一个周期。重复输出N个点后,成为第二个周期。利用单片机的晶振控制输出周期的速度,也就是控制输出的波形的频率。这样就控制了输出波形的及其幅值和频率,例如:正弦波,取20个样值点。具体连接的电路图如图5所示:图5D/A转换的电路连接图3.4红外电路图6红外电路红外的工作原理:51单片机对遥控的解码和我们前面所讲的串口并口通信不同,他不是单纯的用高电平代表1,低电平代表0。这一点大家要从思想上面转变过来。他是发送一连串的数据帧,这个数据帧就是一连串的二进制代码,单片机通过区分高电平的持续时间来区别红外编码的。我们就以HC6800单片机上的红外接头为例来说明,当高电平的脉冲宽度为1.12ms的时候单片机认为它为0,当高电平的脉冲宽度为2.25的时候单片机认为它为1。单片机是通过判断脉冲的宽度来得到信息位为0还是为1的。当我们按下遥控器的按键时,遥控器将发出如图2的一串二进制代码,我们称它为一帧数据。根据各部分的功能。可将它们分为5部分,分别为引导码、地址码、地址码、数据码、数据反码。遥控器发射代码时.均是低位在前。高位在后。由图2分析可以得到.引导码高电平为4.5ms,低电平为4.5ms。当接收到此码时.表示一帧数据的开始。单片机可以准备接收下面的数据。地址码由8位二进制组成,共256种.图中地址码重发了一次。主要是加强遥控器的可靠性.如果两次地址码不相同.则说明本帧数据有错.应丢弃。不同的设备可以拥有不同的地址码.因此。同种编码的遥控器只要设置地址码不同,也不会相互干扰。。在同一个遥控器中.所有按键发出的地址码都是相同的。数据码为8位,可编码256种状态,代表实际所按下的键。数据反码是数据码的各位求反,通过比较数据码与数据反码.可判断接收到的数据是否正确。如果数据码与数据反码之间的关系不满足相反的关系.则本次遥控接收有误.数据应丢弃。在同一个遥控器上.所有按键的数据码均不相同。在图2中,数据码为十六进制的0CH,数据反码为十六进制的0F3H(注意低位在前).两者之和应为0FFH。3.5复位电路这种复位电路的工作原理是:单片机的复位电路在刚接通电时,刚开始电容是没有电的,电容内的电阻很低,通电后,5V的电通过电阻给电容进行充电,电容两端的电会由0V慢慢的升到4V左右(此时间很短一般小于0.3秒),RC构成的微分电路在上电瞬间产生一个微分脉冲,其宽度大于两个机器周期,89C51将复位。正因为这样,复位脚的电由低电位升到高电位,引起了内部电路的复位工作,RST端电压慢慢下降,降到一定电压值以后,即为低电平,单片机开始正常工作(这是单片机的上电复位,也叫初始化复位);当按下复位键时,电容两端放电,电容又回到0V了,于是又进行了一次复位工作(这是手动复位原理)。图7复位电路3.6外部时钟电路图3采用11.0592MHz的晶振和两个22pf的电容组成时钟电路部分图8外部时钟电路3.7LCD显示部分电路为了节约成本,采用1602来作为显示器,用独立按键来控制不同的显示,能完成基本的显示功能。图9LCD液晶显示电路3.8电源部分本电源设计了两个接口,方便不同接口的电源接入,并且在电源部分加上滤波电容,起过滤接入电源的杂波的作用,为了电路中得到+12V、-12V和+5V的直流工作电压,用变压器变压后再通过芯片和电容设计出所需要的电路。图10电源电路3.9独立按键部分图八为用独立按键来控制不同的输出波形图11独立按键3.10串口通信模块图中通过MAX232进行TTL电平和232电平转换,从而单片机和上位机之间通信提供通道。图12串口通信电路通信电路的目的就是让通信双发的电平匹配,单片机用的是TTL电平,上位机的串口用的是232电平。TTL电平的逻辑1的电压范围是+3.3V到+5V,逻辑0的电压范围是0到+3.3V;232电平的逻辑1的电压范围是-15V到-5V,逻辑0的电压范围是+5V到+15V。因此设计串口通信电路就是让这两种电平统一。四、软件设计主程序和子程序都存放在AT89C51单片机中。主程序的功能是:开机以后负责查键,即做出键盘扫描及显示工作,然后根据用户所按的键转到相应的子程序进行处理。子程序的功能有:延时子程序、中断程序、显示子程序、按键子程序,按键子程序中有任意频率的设置的数字键(0~9)及确定键、幅值和频率的加和减键、幅值频率的转换键、波形的转换键等共15个键。主程序的流程图如图4.1所示:完成全部硬件和软件过后,将程序下载到单片机中进行测试,通过反复测试,反复的修改函数的功能,同时完善硬件的功能,使系统达到最优控制。4.1程序流程图图13程序流程图4.2LCD显示流程图图14LCD显示框图五、系统仿真5.1仿真电路图通过Proteus软件和电路原理图绘制出如下仿真电路图,对程序和电路功能进行测试图15proteus仿真电路图5.2输出波形图将编写好的程序下载到单片机中进行仿真,通过反复测试,反复的修改函数的功能,使系统输出如下波形:图16正弦波图17方波图18三角波图19正弦波、方波、三角波三种波形叠加后的波形六、硬件和软件测试6.1硬件调试整个硬件调试过程基本顺利,由于采用了分单元模块制作,各个单元电路工作稳定,给调试工作带来很大的方便。放大模块部分在实物模拟时,出现发送信号不稳定、跳变的问题,经过仔细的检查,电路连线路劲和线路连接问题,最终发现电路连接是出现连接未牢固的问题,从而得以解决。6.2软件调试虽然对于单片机的变成较熟悉,但是还存在一些问题,主要有以下问题:(1)在写调幅值的程序时,按照自己的想法写好,下载带单片机中,发现,每按一次键,幅值一次性增大到5V或者一次性减为0V,经过对程序的分析得知,当按下键时,程序循环很多次,为次添加一条键按下时死循环的语句使每次按下键幅值加一次后的只保持住,从而解决了问题。(2)当幅值和显示调试成功后,写调频程序时,在硬件电路中调试时发现,三种波形融合到一起出现,在经过添加定时器中断的方法,结果使P0口不能够输出模拟信号,经过努力,最后终于解决了这个问题。(3)由于AT89C51本身性能的问题,而且硬件方面又没有用倍频电路,产生的三角波和方波的频率没有达到1MHz,只达到2KHz,但是方波达到了1MHz。七、设计心得本次课程设计,我系统电路的主要设计,在做课程设计的时间了我学到了很多东西,总的来说有如下收获:(1)通过对电路的设计,对51系列单片机的原理和功能有了进一步的了解,学到了更多的电路知识,如复位电路的原理,晶振电路的作用,旁路电容的作用,上拉电阻的功能,串口通信电路,熟悉了ULN2003芯片的原理和功能,认识了温湿度传感器DHT21,并且能对其进行应用。(2)通过原理图和PCB图的绘制,学会了AltumDesigner软件的使用,并且能用它完成一些简单的电路设计,并且对元器件的封装有了一定的了解和认识。(3)通过元器件的购买和电路板的焊接,增强了自身的实践动手能力,对电路原理的应用有了更深刻的认识。(4)在测试阶段,尤其是在硬件电路的检查阶段,有很深的体会,有时候一个简单的错误就有可能造成电路无法正常工作,通过找错排错,更加熟悉了电路的原理和51单片机的工作原理。(5)通过本次课程设计,我更加深刻的认识到团队合作的重要性,小组成员分工合作,是设计成功的关键,只有大家团结一致,才能更快更好的完成任务,但是从本课程设计中,我也看到了自身还存在许多不足,在实践动手能力方面比较弱,对一些电路知识掌握得不是很好。八、参考文献[1]童诗白,华成英.模拟电子技术基础〔M〕.北京:高等教育出版社,2003.345-362[2]潘永雄,沙河,刘向阳.电子线路CAD实用教程〔M〕.西安:西安电子科技大学出版社,2001.13-118.[3]张毅刚,彭喜源,谭晓昀,曲春波.MCS-51单片机应用设计[M].哈尔滨:哈尔滨工业大学出版社,1997.53-61九、致谢本次毕业设计共历时两个多月的时间,在各位老师和同学们的关心帮助下才得以顺利完成。在这段时间里,不仅大大提高了我的实践经验,也使我学到了许多书本上不曾接触的只是,开拓了视野,增广了知识面,醉重要的是学会了如何利用信息资源帮助自己寻早资料,提高了自己的徐学能力。我对本课题的内容本来知道的很少,经过了这次的学习和知道老师的悉心教导,现在已经对它有了深刻的认识,虽然无法达到专业水平,但也是有了巨大的收获,感觉自己受益匪浅。在论文完成之际,我首先谨向在我做毕业设计期间给予我无微不至的关怀、诲人不倦的老师致以崇高的敬意和真诚的谢意;起床对朝夕相处的同学和在毕业设计期间给予我支持和帮助的朋友送上我深深的谢意!十、附件源代码JUCHI EQU 50H SANJI EQU 51H FANGB EQU 52H TIXIN EQU 53H KU EQU 55H ORG 0000H ;程序入口 AJMP MAIN ;指向主程序 ORG 0003H ;主程序入口地址 AJMP INTT0 ;指向按键中断程序 ORG 0030H ;中断程序入口地址MAIN: ;主程序 MOV P2,#00H ;将P2口初始化为0 SETB EA ;开总中断 SETB EX0 ;开启外部中断0 SETB IT0 ;将外部中断0设置为下降沿有效 MOV DPTR,#00FFH ;设置输入寄存器地址 MOV JUCHI,#00H ;初始化 MOV SANJI,#00H MOV FANGB,#00H MOV TIXIN,#00H;***************************************************START: MOV A,KU ;将键码送累加器ACJNE A,#00H,W1 ;将累加器A和00H比较,如果相等,则00键按下顺序执行,否则跳到W1再判断01键是否按下 MOV SANJI,#00H ;屏蔽其他波形 MOV FANGB,#00H MOV TIXIN,#00H AJMP JCB ;跳转到锯齿波形 W1:CJNE A,#01H,W2 ;判断01键是否按下 MOV JUCHI,#00H ;屏蔽其他波形 MOV FANGB,#00H MOV TIXIN,#00H AJMP SJB ;跳转到三角波形W2:CJNE A,#02H,W3 ;判断02键是否按下 MOV TIXIN,#00H MOV JUCHI,#00

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论