25单片机课程设计报告书波形发生器

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

目录1、课程设计目的..........................................................................................................12、课程设计题目和实现目标......................................................................................13、设计方案..................................................................................................................14、Proteus仿真原理图.................................................................................................15、程序流程图..............................................................................................................16、程序代码..................................................................................................................17、调试总结..................................................................................................................18、设计心得体会..........................................................................................................19、参考文献..................................................................................................................11、课程设计目的《单片机原理及应用》课程设计是与《单片机原理及应用》课程相配套的实践教学环节。《单片机原理及应用》是一门实践性很强的专业基础课,通过课程设计,达到进一步理解单片机的硬件、软件和综合应用方面的知识,培养实践能力和综合应用能力,开拓学习积极性、主动性,学会灵活运用已经学过的知识,并能不断接受新的知识。培养大胆发明创造的设计理念,为今后就业打下良好的基础。通过课程设计,掌握以下知识和技能:1.单片机应用系统的总体方案的设计;2.单片机应用系统的硬件设计;3.单片机应用系统的软件程序设计;4.单片机开发系统的应用和调试能力2、课程设计题目和实现目标本次课程设计的题目是;制作一个波形发生器,产生单极性、幅度可调、周期可调的方波、锯齿波、三角波、正弦波信号,不同波形用不同符号显示在一个LED上,用一个LCD显示幅值和频率。本次课程设计的目标:设计一个波形发生器,带有四个按钮,分别是波形选择、增加频率、减少频率、调节幅度,并带有一个LCD和一个LED,LED用来显示波形的符号LCD用来显示频率、幅值。波形符号用1表示正弦波,2表示三角波,3表示方波,4表示锯齿波。频率的调节幅度是10HZ,幅值调节幅度分别是0.2V,0.02V,0.3V,0.4V。3、设计方案本次设计采用AT89C51及其外围扩展系统和PCF8591,软件方面主要是应用C语言设计程序。系统以AT89C51为核心,配置相应的外设及接口电路,用KeilC及Proteus等软件开发,用C语言编程,组成一个多功能信号发生器。用户通过按键选择输出实验室中经常使用到的几种基本波形:方波、锯齿波、正弦波和三角波。方波由AT89C51单片机将最大值和最小值输出给D/A进行转换,并由用户通过键盘选择波形周期。可采用单片机程序产生以上4种波形,并通过一片D/A转换器输出。另外,采用一片D/A转换器来控制前一片D/A转换器的参考电压,从而可以改变输出波形幅值。通过外接键盘来设定波形的类型、幅值和频率。总体方案结构图a.单片机的选择AT89C51是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,片内含4Kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机抽取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产。兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大。AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。AT89C51提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作方式。空闲工作方式停止CPU的工作,但允许RAM,定时器/计数器串口通信及中断系统继续工作,掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。AT89C51方框图PCF8591是一个单片集成、单独供电、低功耗、8-bitCMOS数据获取器件。PCF8591具有4个模拟输入、1个模拟输出和1个串行I2C总线接口。PCF8591的3个地址引脚A0,A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。PCF8591的最大转化速率由I2C总线的最大速率决定。PCF8591原理图b.输入电路键盘的接口电路在单片机控制系统中,为了实现人对系统的操纵控制及向系统输入参数,都需要为系统设置按键或键盘。键盘是一组按键的集合。键盘所使用的按键一般都是具有一对常开触点的按键开关,平时不按键时,触点处于断开(开路)状态,当按下按键时,触点才处于闭合(短路)状态,而当按键被松开后,触点又处于断开状态。C.各部分组成(1)控制部分由单片机AT89C51作为系统的主核心,包括四个按钮,按钮用来选择波形、调节频率和幅值。(2)转换部分由PCF8591组成,作为D/A转换的芯片;(3)显示部分由一片LCD和一片LED组成,LCD用来显示频率和幅值,LED用来显示数字“1,2,3,4”,数字1代表着此时输出的波形是正弦波,数字2代表输出波形是三角波,数字3代表输出是方波,数字4代表输出是锯齿波。4、Proteus仿真原理图正弦波与仿真电路图三角波与仿真电路图方波与仿真电路图锯齿波与仿真电路图5.程序流程图6、程序代码#includereg52.h#defineucharunsignedchar#defineuintunsignedint#includeI2C.H#definePCF85910x90//PCF8591地址sbitkey=P3^2;ucharwavecount;//'抽点'计数ucharTHtemp,TLtemp;//传递频率的中间变量//uintT_temp;初始化,设置常量和指针按键1按下按键1按下按键1按下跳转到主程序NNN开始LED显示1调用正弦波输出程序,输出一个周期的正弦波LED显示2调用三角波输出程序,输出一个周期的三角波LED显示3调用方波输出程序,输出一个周期的方波LED显示4调用锯齿波输出程序,输出一个周期的锯齿波按键1按下ucharjudge=1;//在方波输出函数中用于简单判别作用ucharwaveform;//当其为0、1、2,3时,分别代表三种波uinttotal_freq;//总频率ucharcodefreq_unit[4]={10,10,10,10};//三种波的频率单位ucharidatawavefreq[4]={1,1,1,1};//给每种波定义一个数组单元,用于存放单位频率的个数ucharidatalcd_hang1[16]={V};ucharidatalcd_hang2[16]={f=Hz.V};uintvolt;//电压ucharADdata;uchark,p;/*******************************************************************DAC变换,转化函数*******************************************************************/bitDACconversion(unsignedcharsla,unsignedcharc,unsignedcharVal){Start_I2c();//启动总线SendByte(sla);//发送器件地址if(ack==0)return(0);SendByte(c);//发送控制字节if(ack==0)return(0);SendByte(Val);//发送DAC的数值if(ack==0)return(0);Stop_I2c();//结束总线return(1);}/*******************************************************************ADC发送字节[命令]数据函数*******************************************************************/bitISendByte(unsignedcharsla,unsignedcharc){Start_I2c();//启动总线SendByte(sla);//发送器件地址if(ack==0)return(0);SendByte(c);//发送数据if(ack==0)return(0);Stop_I2c();//结束总线return(1);}/*******************************************************************ADC读字节数据函数*******************************************************************/unsignedcharIRcvByte(unsignedcharsla){unsignedcharc;Start_I2c();//启动总线SendByte(sla+1);//发送器件地址if(ack==0)return(0);c=RcvByte();//读取数据0Ack_I2c(1);//发送非就答位Stop_I2c();//结束总线return(c);}/***********这两组数组很重要,需要根据波形来调试,选择合适的值,使输出波形达到频率要求************/ucharcodewaveTH[]={0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xf6,0xf9,0xfb,0xfc,0xfc,0xfd,0xfd,0xfd,0xfe};ucharcodewaveTL[]={0x06,0x8a,0x10,0x4e,0x78,0x93,0xa8,0xb3,0xbe,0xc6,//正弦波频率调整中间值0xac,0xde,0x4

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功