基于-单片机波形发生器C语言

上传人:dc****87 文档编号:84685880 上传时间:2022-05-04 格式:DOC 页数:15 大小:75KB
收藏 版权申诉 举报 下载
基于-单片机波形发生器C语言_第1页
第1页 / 共15页
基于-单片机波形发生器C语言_第2页
第2页 / 共15页
基于-单片机波形发生器C语言_第3页
第3页 / 共15页
资源描述:

《基于-单片机波形发生器C语言》由会员分享,可在线阅读,更多相关《基于-单片机波形发生器C语言(15页珍藏版)》请在装配图网上搜索。

1、-单片机原理及接口技术课程设计报告设计题目: 波形发生器 学 号: 1202601* 姓 名: * 指导教师: * 信息与电气工程学院二零一五年六月. z-波形发生器设计波形发生器作为一种常用的信号源,是现代测试领域应用最为广泛的通用仪器之一。在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都学要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。信号发生器是电子测量领域中最根本、应用最广泛的一类电子仪器。它可以产生多种波形信号,如正弦波,三角波,方波等,因而广泛用于通信、雷达、导航、宇航等领域。

2、本系统利用单片机AT89C51采用程序设计方法产生锯齿波、正弦波、三角波三种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,通过键盘来控制三种波形的类型选择、频率变化,并通过LED显示其各自的周期。本次关于产生不同低频信号的信号源的设计方案,不仅在理论和实践上都能满足实验的要求,而且具有很强的可行性。该信号源的特点是:体积小、价格低廉、性能稳定、实现方便、功能齐全。1. 设计任务结合实际情况,基于AT89C51单片机设计一个波形发生器。该系统应满足的功能要求为:(1) 产生三种波形三角波、锯齿波、正弦波;(2) 按键选择波形,加减键选择频率;(3

3、) 在示波器中显示三种波形;(4) 在六位数码管上显示周期;主要硬件设备:单片机实验开发系统、AT89C51单片机、DAC数模转换芯电路、六位数码管LED、矩阵键盘、8155芯片、示波器。2. 整体方案设计波形发生器系统以AT89C51单片机作为整个系统的控制核心,应用其强大的接口功能,构成整个波形发生器系统。利用 AT89S52 单片机构造多功能信号发生器,可产生正弦波,方波,三角波,锯齿波四种波形,通过 C 语言对单片机的编程即可产生相应的波形信号,并可以通过键盘进展各种功能的转换和信号频率的控制,当输出的数字信号通过数模转换成模拟信号也就得到所需要的信号波形,通过运算放大器的放大输出波形

4、,同时让显示器显示输出的波形信息。(1) 三角波产生思路首先,根据按键设定的波形频率,选择一个周期适宜的点数,根据点数和峰值计算相邻2个点的幅度的步进值,根据点数和频率设定相邻2点的时间值,计算出定时器的初值,然后,设置一个变量每进一次定时中断DA数据就加幅值步进,当等于总点数的一半时,每进一次定时中断就把DA数据减幅值步进直到DA数据为0,计数变量清零。每进一次定时中断输出刷新DA的数据就可以产生一定频率和幅值的三角波。2锯齿波产生思路首先,根据按键设定的波形频率,选择一个周期适宜的点数,根据点数和峰值计算相邻2个点的幅度的步进值,根据点数和频率设定相邻2点的时间值,计算出定时器的初值,然后

5、,定时输出刷新DA的数据就可以产生一定频率和幅值的波形。3正弦波产生思路首先,写一个表格,然后根据按键设定的波形频率,选择一个周期适宜的点数,根据点数和峰值计算相邻2个点的幅度的步进值,根据点数和频率设定相邻2点的时间值,计算出定时器的初值,然后,设置一个变量每进一次定时中断DA数据就加幅值步进,当等于总点数的一半时,每进一次定时中断就查表把DA数据减幅值步进直到DA数据为0,计数变量清零。每进一次定时中断查表输出刷新DA的数据就可以产生一定频率和幅值的正弦波。DAC0832时钟电路放大、滤波电路AT89C51复位电路示波器显示波形LED显示频率 矩阵键盘图2-1 系统的整体方案设计图 本系统

6、硬件主要由D/A转换器、显示系统、矩阵键盘等几局部组成。各模块的主要功能如下:(1) D/A转换器的功能是把单片机输出的数字信号转换成0-5V的模拟信号。(2) 显示系统中六位数码管显示波形频率,示波器显示波形。(3) 矩阵键盘选择波形,增加减少频率。3. 系统硬件电路设计3.1 时钟电路单片机的时钟信号通常用两种电路形式得到:部振荡和外部振荡方式。在引脚*TAL1 和 *TAL2 外接晶体振荡器,构成了部振荡方式。由于单片机部有一个高增益的反相放大器,当外接晶振后,就构成了自激振荡,并产生振动时钟脉冲。晶振通常选用 6MHZ、12MHZ、24MHZ。本设计中时钟电路图如图3-1,我们选择了1

7、2MHZ和晶振分别接引脚*TAL1和*TAL2,电容 C1,C2 均选择为 30pF,对振荡器的频率有稳定作用,当频率较大时,正弦波、三角波、锯齿波中每一点的延时时间为几微妙,故延时时间还要加上指令时间才能获得较大的频率波形。单片机的时序单位振荡周期:晶振的振荡周期,又称时钟周期,为最小的时序单位。机器周期:1个机器周期由12个振荡周期组成,是计算机执行一种根本操作的时间单位。指令周期:执行一条指令所需的时间。一个指令周期由1-4个机器周期组成,依据指令不同而不同.图3-1 时钟电路3.2 复位电路复位引脚 RST 通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的

8、 S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到部复位操作所需要的信号。复位电路通常采用上电自动复位和按钮复位两种方式。本设计选择了按键复位如图3-2,在系统运行时,按一下按键,就在 RST 断出现一段高电平,使器件复位。此时 ALE、PSEN、P0、图3-2时钟电路图P1、P2、P4 输出高电平,RST 上输入返回低电平以后,变退出复位状态开场工作。图3-2 复位电路单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC0000H,这说明程序从0000H地址单元开场执行。单片机冷启动后,片RAM为随机值,运行中的复位操作不改变片RAM区中的容,21个特殊功能存放器

9、复位后的状态为确定值统复位是任何微机系统执行的第一步,使整个控制芯片回到默认的硬件状态下。51单片机的复位是由RESET引脚来控制的,此引脚与高电平相接超过24个振荡周期后,51单片机即进入芯片部复位状态,而且一直在此状态下等待,直到RESET引脚转为低电平后,才检查EA引脚是高电平或低电平,假设为高电平则执行芯片部的程序代码,假设为低电平便会执行外部程序。51单片机在系统复位时,将其部的一些重要存放器设置为特定的值,至于部RAM部的数据则不变。3.3 数模转换电路DAC0832是8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机

10、应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC存放器、8位D/A转换电路及转换控制电路构成。DAC0832的主要特性参数如下:1分辨率为8位;2电流稳定时间1us;3可单缓冲、双缓冲或直接数字输入;4只需在满量程下调整其线性度;5单一电源供电+5V+15V;6低功耗,200mW。DAC0832的工作原理:利用8位D/A转换器DAC0808,可以将8位数字量转换成模拟量输出。数字量输入的围为0255,对应的模拟量输出的围在VREF-到VREF+之间。根据这一特性,可以利用单片机的并行口输出的数字量,产生常用的波形。DAC0832电路与单片机的接口电路如图3-3所示。图3-3

11、DAC0832与单片机的接口电路3.4 运算放大电路图3-4 运算放大电路 LM324的5管脚与DAC0832的IOUT212管脚相连,LM324的6管脚与DAC0832的IOUT111管脚相连,LM324的7管脚与DAC0832的REF9管脚相连.第一级运算放大器的作用是将DAC0832输出的电流信号转化为电压信号V1,第二级运算放大器的作用是将V1通过反向放大电路-R2/R1倍。 题目要求输出的电压在0-5V可调,而V1的电压大约是5V,所以R1选择5K的电阻,R2选择10K的电位器,这样最大的输出电压为5*10/2=10,最小电压为0,可以实现题目要求的0-5V。3.5 矩阵键盘电路图3

12、-5 矩阵键盘电路图中键盘独立键盘行引出的四根线接8155芯片的PC口,六根列线接8155芯片的PA口,采用线反转法扫描键盘,确定键位。如图按键K1为频率加、K2为频率减,按键K4切换三角波,按键K5切换锯齿波,按键K6切换正弦波。3.6 六位数码管LED显示电路图3-6 LED显示电路本设计选择了6位共阴极数码管如图3-6,它的6个发光二极管的阴极二极管正端连接在一起,通常公共阴极接低电平电平,其它管脚接段驱动电路输出端。当*段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及

13、额定段导通电流来确定相应的限流电阻。显示电路用于显示信号的频率,并且使系统能根据按键实时显示先关信息。该系统中添加一个74LS241 锁存器,用于驱动数码显示管,使其更易于控制,增加显示的准确性。数码管第三位用来显示波形信号的频率,频率是以100HZ步进显示。 要使显示管显示不同的数字或者字符,需要使端口输出相应的字型码,显示器的字形与字码关系如表3-6:共阴极012345673FH06H5BH4FH66H6DH7DH07H89ABCDEF7FH6FH77H7CH39H5EH79H71H4. 系统程序设计4.1 主程序流程图 开场 变量、数组、端口初始化函数初始化定时器T0初始化,开中断 按键

14、扫描波形模式选择频率加减选择 减 加查表、定时器0定时时间计算数码管显示示波器显示 给DAC0832直图4-1 主流程图 主程序首先将需要初始化的局部进展初始化,然后负责循环执行按键扫描,数码管显示、DA数据输出和示波器显示。 这些过程都是以模块化的程序实现的,程序中有,按键扫描程序、数码管扫描显示程序、定时器定时计算程序、查表程序和DA数据输出程序,通过调用这些程序完成波形的产生,幅值和频率的改变。4.2 按键处理子程序流程图程序位于函数Scan-Key()和Shao-Key()中,函数位于主循环中,每循环一次调用一次,检测键盘是否按下,如果按下去延时抖动,然后检测到底是哪个按键按下,针对不

15、同的按键按下采取不同的动作。因为按键采用的是扫描法,故需要注意消抖的处理,在此用软件法去抖动即可。软件法去抖动的实质是软件延时,即检测到*一键状态变化后延时一段时间,再检测该按键的状态是否保持着,如是则作为按键处理,否则,视为抖动,不予理睬。去抖动的延时时间一般参考资料多描述为20ms左右,在实际应用中应大于20ms。否则,会导致按一次多处理,影响程序正常执行。按键扫描入口有键按下.NY 延时该键按下.N得到按键号Y 返回图4-2 键盘控制程序流程图4.3 数码管输出子程序流程图数码管显示入口 关位码 送段码 开位码完毕图4-3 数码管子程序流程图数码管输出程序是送段选码和位选码的程序,位于主

16、程序中。轮流点亮6个数码管,每大约5ms变换一次,由于轮换的次数太快,由于视觉暂留效应,看上去是6个数码管看上去好似一直点亮。5. 系统调试5.1 Proteus软件仿真调试1键K4按下,示波器显示三角波(2) 键K5按下,示波器显示锯齿波(3) 键K6按下,示波器显示正弦波5.2 Proteus仿真原理图图5- Proteus仿真原理图5.2 硬件调试在单片机实验开发系统中,将AT89C51的P1口用8排位线接到DAC0832的Dl口,DAC0832的CS5和WR端口接地,VOUT接示波器输入端。翻开示波器,调节水平与垂直方向,屏幕上出现一条水平亮线即可。按下按键K4,示波器输出三角波形,再

17、连续按下键K1,波形周期随之增大,六位数码管显示的数字亦随之增加。按下键K6,示波器则输出正弦波,再连续按下键K2,波形周期随之减小,六位数码管显示的数字亦随之减小。按下键K5,示波器输出锯齿波,连续按下K1或K2,示波器显示的波形的周期随之增大或减小,六位数码管上显示的周期数也随之增大减小。6. 程序清单*include*include *include*include*include*define PA8155 *BYTE0*FF21*define PB8155 *BYTE0*FF22*define PC8155 *BYTE0*FF23*define PP8155 *BYTE0*FF20*

18、define uint unsigned int *define uchar unsigned char uint j,i;uint *SSJ,num,SS;uchar *i=0,*l=0*fe; uint KeyY,KeyNum,NUMM=3;uint numbsj=0,numbjc=0,numbsin=0; uchar stable16=0*3F,0*06,0*5B,0*4F,0*66,0*6D,0*7D,0*07, 0*7F,0*6F,0*77,0*7C,0*39,0*5E,0*79,0*71 ;/* 0f十六个数的代码 */uchar *table6=0*00,0*00,0*00,0*

19、00,0*00,0*00;unsigned char code Tab= /* 正弦波一周期采样256次,把幅值按比例放大*/输出电压从0到最大值正弦波1/4局部0*80,0*83,0*86,0*89,0*8D,0*90,0*93,0*96,0*99,0*9C,0*9F,0*A2,0*A5,0*A8,0*AB,0*AE,0*B1,0*B4,0*B7,0*BA,0*BC,0*BF,0*C2,0*C5,0*C7,0*CA,0*CC,0*CF,0*D1,0*D4,0*D6,0*D8,0*DA,0*DD,0*DF,0*E1,0*E3,0*E5,0*E7,0*E9,0*EA,0*EC,0*EE,0*EF

20、,0*F1,0*F2,0*F4,0*F5,0*F6,0*F7,0*F8,0*F9,0*FA,0*FB,0*FC,0*FD,0*FD,0*FE,0*FF,0*FF,0*FF,0*FF,0*FF,0*FF,/输出电压从最大值到0正弦波1/4局部0*FF,0*FF,0*FF,0*FF,0*FF,0*FF,0*FE,0*FD,0*FD,0*FC,0*FB,0*FA,0*F9,0*F8,0*F7,0*F6,0*F5,0*F4,0*F2,0*F1,0*EF,0*EE,0*EC,0*EA,0*E9,0*E7,0*E5,0*E3,0*E1,0*DF,0*DD,0*DA,0*D8,0*D6,0*D4,0*D1,

21、0*CF,0*CC,0*CA,0*C7,0*C5,0*C2,0*BF,0*BC,0*BA,0*B7,0*B4,0*B1,0*AE,0*AB,0*A8,0*A5,0*A2,0*9F,0*9C,0*99,0*96,0*93,0*90,0*8D,0*89,0*86,0*83,0*80,/输出电压从0到最小值正弦波1/4局部0*80,0*7C,0*79,0*76,0*72,0*6F,0*6C,0*69,0*66,0*63,0*60,0*5D,0*5A,0*57,0*55,0*51,0*4E,0*4C,0*48,0*45,0*43,0*40,0*3D,0*3A,0*38,0*35,0*33,0*30,0

22、*2E,0*2B,0*29,0*27,0*25,0*22,0*20,0*1E,0*1C,0*1A,0*18,0*16,0*15,0*13,0*11,0*10,0*0E,0*0D,0*0B,0*0A,0*09,0*08,0*07,0*06,0*05,0*04,0*03,0*02,0*02,0*01,0*00,0*00,0*00,0*00,0*00,0*00,/输出电压从最小值到0正弦波1/4局部0*00,0*00,0*00,0*00,0*00,0*00,0*01,0*02,0*02,0*03,0*04,0*05,0*06,0*07,0*08,0*09,0*0A,0*0B,0*0D,0*0E,0*

23、10,0*11,0*13,0*15,0*16,0*18,0*1A,0*1C,0*1E,0*20,0*22,0*25,0*27,0*29,0*2B,0*2E,0*30,0*33,0*35,0*38,0*3A,0*3D,0*40,0*43,0*45,0*48,0*4C,0*4E,0*51,0*55,0*57,0*5A,0*5D,0*60,0*63,0*66,0*69,0*6C,0*6F,0*72,0*76,0*79,0*7C,0*80;void Scan_Key(void);void Shao_Key(void) ;void delay(unsigned int *);void *ianShiSJ

24、(void);void Sanjiaobo(void) ;void Juchibo(void);void Zheng*ianbo(void);uint WW,W;void Sanjiaobo(void)/*产生三角波*/ =0*FF; for(WW=0;WW120;WW+) P1=;/*三角波最大值*/ -; for(SS=0;SSnumbsj;SS+) _nop_; for(W=0;W120;W+) P1=; +; for(SS=0;SSnumbsj;SS+) _nop_; uint QQ,QQQ; void Juchibo(void)/*产生锯齿波*/ QQQ=0*FF ;for(QQ=0

25、;QQ120;QQ+) P1=QQQ;/*锯齿波最大值*/ QQQ-; for(SS=0;SSnumbjc;SS+) _nop_; _nop_; uint AA;void Zheng*ianbo(void)/*产生正弦波*/ for(AA=0;AA255;AA+) P1=TabAA;/* 查表 */ for(SS=0;SSnumbsin;SS+) _nop_; _nop_; void *ianShiSJ(void)/*数码管显示信号周期*/ *table0=stable0; *table1=stable(*SSJ)%10);/个位 *table2=stable(*SSJ)%100)/10;/十

26、位 *table3=stable(*SSJ)%1000)/100;/百位 *table4=stable0; *table5=stable0; void T0_time() interrupt 1 /50ms TH0=(65536-50000)/256;TL0=(65536-50000)%256; num+; if(num=5) /250ms num=0; Scan_Key(); delay(10); Scan_Key(); if(KeyY=1) /有键按才会执行 KeyY=0; Shao_Key(); /求键盘号 switch(KeyNum) /键盘01的次数 case 0: numbjc=n

27、umbjc+1; numbsj=numbsj+1; numbsin=numbsin+1; break; case 1: numbjc=numbjc-1; numbsj=numbsj-1; numbsin=numbsin-1; break; default: NUMM=KeyNum;break; /不变 switch(NUMM) case 3: *SSJ=5*numbjc+10; break; case 4: *SSJ=10*numbsj+20; break; case 5: *SSJ=10*numbsin+23; break; default: break; *ianShiSJ(); void

28、 main() int q; for(q=0;q=15;q+) stableq=stableq;*SSJ=10;*ianShiSJ();/求显示数据IP=0*08; PP8155=0*43 ;EA=1;ET0=1;ET1=1;TMOD=0*11;TH0=(65536-50000)/256; / 高八位TL0=(65536-50000)%256;TH1=(65536-1000)/256; / 高八位TL1=(65536-1000)%256; TR0=1;TR1=1; while(1) while(NUMM=3) Juchibo(); while(NUMM=4) Sanjiaobo(); whil

29、e(NUMM=5) Zheng*ianbo() ;void delay(unsigned int *) for(j=0;j*;j+) for(i=0;i120;i+); void Scan_Key(void) /判断有键按下 uint i; PA8155=0*00; PB8155=0*FF; i=PC8155; i=i; i=i&0*0f; if(i!=0) KeyY=1; else KeyY=0; uchar Keyh,Keyl;void Shao_Key(void)/求键盘号 Keyl=0*fe; PB8155=0*FF; for( KeyNum=0; KeyNum=5; KeyNum+)

30、 PA8155=Keyl; Keyl=Keyl1; Keyl=Keyl+1; Keyh=PC8155; Keyh=Keyh; Keyh=Keyh&0*0f; if(Keyh!=0) return; void T1_time() interrupt 3 /1ms TH1=(65536-1000)/256; / 高八位TL1=(65536-1000)%256;PB8155=*table*i; /显示数据PA8155=*l;*l=*l1;*l=*l+1;*i+;if(*i=6) *i=0; *l=0*fe;7.小结经过将近两周的单片机课程设计,终于完成了我们的多功波形发生器的设计,根本到达设计要求,

31、从心底里来说,还是很快乐的,毕竟这次设计把实物都做了出来。在本次设计的过程中,我发现很多的问题,得到很大的锻炼。对于单片机设计,其硬件电路是比拟简单的,主要是解决程序设计的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程局部时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的构造很熟悉。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。要设计一个成功的电路,必须要有耐心,要有坚持的毅力。在整个电路的设计过程中,花费时间最多的是各个单元电路的连接及电路的细节设

32、计上,如在多种方案的选择中,我们仔细比拟分析其原理以及可行的原因。这就要求我们对硬件系统中各组件局部有充分透彻的理解和研究,并能对之灵活应用。完成这次设计后,我在书本理论知识的根底上又有了更深层次的理解。同时在本次设计的过程中,我还学会了高效率的查阅资料、运用工具书、利用网络查找资料。我发现,在我们所使用的书籍上有一些知识在实际应用中其实并不是十分理想,各种参数都需要自己去调整。偶而还会遇到错误的资料现象,这就要求我们应更加注重实践环节。同样波形发生还存在诸多问题。一,示波器的显示波形不稳定,跳动厉害;二,当频率减小到零时,便不能通过频率加恢复波形,只能通过重新运行程序来恢复;三,键盘按键有时会严重滞后,键按下后,很长时间才有反响。虽然问题多多,我会坚持完善波形发生器。最后还要在此感指导教师们和我的同学,他们在整个过程中都给予了我充分的帮助与支持。. z

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!