ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:68.91KB ,
资源ID:6968263      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6968263.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(波形发生器课程设计参考模板.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

波形发生器课程设计参考模板.docx

1、波形发生器课程设计参考模板课 程 设 计题 目 波形發生器姓 名 院 (系) 专业班级 学 号 日 期 2010年12月13日2010年12月19日摘要数模转化器可以实现将数字量转化为模拟量的功能,对于理想的数模转换器,输入的数字量的波形与输出的模拟量之间呈线性关系。因此,通过使用单片机来输出不同的数字量,再通过D/A转换,就可以得到不同的波形。本文主要讲述通过单片机产生方波、三角波、锯齿波、梯形波、正弦波的数字量,并给出相应的D/A转化电路,进而得到具有相应波形的模拟量。这五种波形的数字量都可以简单地通过定时器中断来产生。关键词:波形发生 数模转换 单片机 定时器中断一、实验原理利用单片机实

2、现波形输出的重点在于对应波形的数字量的产生。不同波形产生实质上是对输出的二进制数字量进行相应改变来实现的。在本文中,所有波形的二进制数字量的产生都通过定时器中断。在每次中断中,八位的二进制数字量通过I/O口输出,再经由D/A转化电路转化为模拟量。除正弦信号,其他波形的初始的八位二进制数字量都为0。各种波形的数字量产生如下:1)对于方波信号,在每次定时器中断时都对二进制数字量进行位取反,因此,方波信号的二进制数字量总是在0x00和0xff二者上变动。2)对于三角波信号,在每次定时器中断中,二进制数字量依次加1,达到0xff时依次减13)对于锯齿波信号,其类似于三角波信号,但在达到0xff时将二进

3、制数字量置为0x004)对于梯形波信号,其类似于三角波信号,但在达到0xff或0x00时,都会保持一段时间5)对于正弦波信号,可以直接对正弦曲线进行均匀取样后直接转化为数字量,在每次定时器中断中,都依序将这些数字量输出对于D/A转换,可以利用集成芯片DAC0832来实现。由于DAC0832输出的是电流量,在D/A转换后需要添加额外的比例运放电路来产生电压量。二、实验电路实验的流程如下:单片机在开始运行后就会不断进行键盘扫描。当按下对应波形的按钮后,单片机会产生相应波形的数字量,这个数字量作为DAC0832的输入再被转化为电流量。电流量经过两个反比例运算放大器后,转化为电压量输出到示波器中显示。

4、三、实验结果实验所产生的方波、三角波、锯齿波、梯形波、正弦波波形如下所示四、实验体会五、程序代码#include typedef unsigned char uchar;typedef unsigned int uint;/正弦曲线四分之一周期曲线的数字量uchar code sdata256 = 128,130,131,133,134,136,137,139,140,142,144,145,147,148,150,151,153,154,156,157,159,160,162,164,165,167,168,169,171,172,174,175,177,178,180,181,182,18

5、4,185,187,188,189,191,192,194,195,196,197,199,200,201,203,204,205,206,208,209,210,211,212,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,236,237,238,239,240,240,241,242,242,243,244,244,245,246,246,247,247,248,248,249,249,250,250,251,251,251,252,252,252,25

6、3,253,253,253,254,254,254,254,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,254,254,253,253,253,253,252,252,252,251,251,251,250,250,249,249,248,248,247,247,246,246,245,244,244,243,242,242,241,240,240,239,238,237,236,236,235,234,233,232,231,230,229,228,227,226,225,224,223,22

7、2,221,220,219,218,217,216,215,214,212,211,210,209,208,206,205,204,203,201,200,199,197,196,195,194,192,191,189,188,187,185,184,182,181,180,178,177,175,174,172,171,169,168,167,165,164,162,160,159,157,156,154,153,151,150,148,147,145,144,142,140,139,137,136,134,133,131,130,128;/timer用于重装时间常数static union

8、 uint time; struct uchar th; uchar tl; time_array;timer;/counter用于波形发生时的计数,从0到255static uchar counter;/state表示当前所要输出波形,1表示方波,2表示三角波,3表示锯齿玻,4表示梯形波,5表示正弦波,0表示暂停波形发生(保持P2口输出不变)static uchar state;/new_state根据P1口的电平,转化为statestatic uchar new_state;/check_state_bit用于get_state函数中static uchar check_state_bit

9、;/direction表示波形方向,direction=0表示波形处于上升,direction=1表示波形处于下降static bit direction; /delay用于梯形波中static bit delay;/stop表示暂停波形发生(保持P2口输出不变)static bit stop;/* 获取当前状态,即哪个按钮被按下 若没有按钮被按下,则state保持不变 若P1_0=0,则state=1,表示方波发生 若P1_1=0,则state=2,表示三角波发生 以此类推 若P1_5=0,则state=0,表示暂停波形发生(保持P2口输出不变)*/void get_state() /优先考

10、虑P1_5口,即优先考虑暂停波形发生 if(!P1_5) new_state = 0; return; check_state_bit = 0x01; new_state=1; while (check_state_bit & P1) & new_state6) check_state_bit=1; +new_state; if(new_state=6) new_state = state;/每次state即将发生改变,即切换输出到另一种波形时,都进行初始化void init() P2=0; direction=0; counter=0;/检查P1口,以输出相应的选择的波形void check

11、() get_state(); /如果state即将发生改变 if(state!=new_state) /当P1_5口为低电平,new_state=0 /则暂停波形发生,则暂停定时器1定时,并令P3_6口(WR)为高电平 if(new_state=0) P3_6=1; TR1=0; stop=1; return; /切换输出波形 else init(); state = new_state; if(state=4) delay=0; else if(stop) P3_6=0; TR1=1; stop=0; /当INT0脚接收到一个下降沿,则触发外部中断0/则输出波形的周期倍增void int0

12、int() interrupt 0 if(timer.time=15680) timer.time = 245; else timer.time=1; init();/定时器1用于波形的发生void timeint() interrupt 3/time.time等价于time.time=65535-time.time timer.time = timer.time + 1; TL1 = timer.time_array.tl; TH1 = timer.time_array.th; timer.time = ( timer.time -1 ); /方波发生 if(state=1) +counte

13、r; if(counter=0xff) direction = direction; P2 = P2; counter = 1; /其余波的发生 else if(state1 & state6) /当输出梯形波,若delay=1则进行延迟,即保持当前输出电平不变 if (state=4) if(!delay) P2=counter; /输出正弦波 else if(state=5) if(direction) P2 = (sdatacounter)+1; else P2 = sdatacounter; /输出三角波、锯齿波 else P2=counter; /当波形处于下降过程 if(direc

14、tion) /若counter下降至0,则改变波形方向至上升过程 if(counter = 0) /对于梯形波,下降结束后进行延迟 if(state=4) delay=delay; if(delay) counter=0xfe; else direction=direction; else direction=direction; counter+; else counter-; /当波形处于上升过程 else /若counter上升至0xff,则改变波形方向至下降过程 if(counter=0xff) /对于梯形波,上升结束后进行延迟 if(state=4) delay=delay; if(

15、delay) counter=0x01; else direction=direction; /对于锯齿波,当上升至0xff,将counter置为0 else if(state=3) counter=0; else direction=direction; counter-; else counter+; void main() IEN = 0x8F; TMOD = 0x10; PT1 = 1; IT0 = 1; IT1 = 1; state = 0xff; P3_6 = 0; /time.time等价于time.time=65535-time.time timer.time = 1960; timer.time = timer.time + 1; TL1 = timer.time_array.tl; TH1 = timer.time_array.th; timer.time = ( timer.time -1 ); TR1 = 1; while(1) check(); -精心整理,希望对您有所帮助

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

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