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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

生产实习报告2.docx

1、生产实习报告2基于单片机的信号发生器设计1 方案设计实习目的掌握PWM和低通滤波器工作原理,实现一个函数信号发生器。功能要求结合键盘和数码管,设计信号发生器。键盘的功能键用来切换波形类型,包括方波、锯齿波、三角波和正弦波。数字键用来设置对应波形的频率,要求波形重复频率大于500Hz。数码管显示当前输出波形的频率。系统方案以单片机为核心,结合键盘和数码管,利用I/O口产生PWM波,通过二阶有源低通滤波器输出波形信号。二阶有源低通滤波采用OP07,为一款低噪声高精度运算放大器。数码管 显示信号频率数字键:调整信号频率选择键A:方波、锯齿波、三角波、正弦波功能键B:修改信号频率2 系统的硬件设计2.

2、1 主控制器本设计采用89S52及其外围扩展系统,软件方面主要是应用C语言设计程序。系统以89S52单片机为核心,配置相应的外设及接口电路,用C语言开发,组成一个多功能信号发生系统。该系统的软件可运行于Windows XP环境下,硬件电路设计具有典型性。同时,本系统中任何一部分电路模块均可移植于实用开发系统的设计中,电路设计具有实用性。2.2复位电路设计单片机的复位是靠外电路实现的,在时钟电路工作后,只要在单片机的RST引脚上出现24个时钟振荡脉冲(2个机器周期)以上的高电平,单片机便实现初始化状态复位。为了保证应用系统可靠地复位,通常是RST引脚保持10ms以上的高电平。复位电路连接如图3-

3、2所示。此电路仅用一个电容及一个电阻。系统上电时,在RC电路充电过程中,由于电容两端电压不能跳变,故使RESET端电平呈高电位,系统复位。经过一段时间,电容充电,使RESET端呈低电位,复位结束2。 图3-2 复位电路2.3时钟电路设计 8XX51系列单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振),就构成了内部振荡方式。由于单片机内部有一个高增益反向放大器,当外接晶振后,就构成了自激振荡器,并产生振荡时钟脉冲。晶振通常选用6MHZ、12MHZ或24MHZ。内部振荡方式如图3-3所示。图中电容C1、C2起稳定振荡频率、快

4、速起振的作用。电容值一般为530pF。内部振荡方式所得时钟信号比较稳定,实用电路中使用较多。 外部振荡方式是把已有的时钟信号引入单片机内。这种方式适宜用来使单片机的时钟与外部信号保持一致。外部振荡方式电路如图3-4所示。 对HMOS的单片机(8031,8031AH等),外部时钟信号由XTAL2引入;对于CHMOS的单片机(8XCXX),外部时钟信号由XTAL1引入。图3-3 内部振荡 图3-4外部振荡2.4 信号产生电路DAC0808简介:DAC0808是八位电流输出型D/A转换器件,由4脚输出转换电流,其简化电路图及引脚结构如图3-7所示。VREF为参考电源,VEE负电压供电;D0是高数据位

5、(MSB),D7才是地数据位(LSB)。DAC0808的电源极性:VCC=+5V,VEE=-15V,VREF=+15V。D0D7是数据输入端,I0是电流输出端,COMP是接电容进行补偿。在单片机应用系统中通常需要的是电压信号,电流信号与电压信号之间的转换可由运算放大器实现。DAC0808不带锁存器,所以在使用时必须加一个74LS373进行数据锁存。 图3-7 DAC0808简化电路框图和管脚排列工作原理:本系统由VREF提供参考电压,相应参考电流为I=VREF/R1。电容C4提供补偿,OUT输出电流,经过LM324运算放大器转换成电压。所以输出电压: =5K (35)根据DAC0808的特性设

6、计出本系统的D/A转换电路如图3-8所示。图3-8 系统D/A实现2.3 显示电路本机显示采用软件译码动态显示,系统显示电路如图3-1所示。采用软件译码动态显示的理由如下:1)如果用静态显示,单片机的接口资源肯定不够用,那么还要进行接口的扩展,增加了系统的复杂度;2)如果要制成印刷线路板,得占相当大一块面积;3)另外,采用动态显示,可以明显的降低功耗,因为每一时刻只有一个LED发光,其功耗为静态显示的18。一个LED最大电流为120mA,如用静态显示,8个LED就耗电流960mA综上分析,采用动态显示才是最经济的方案。 在显示的时候,只要把显示的字码输送到P2口,再经过74LS373进行数据锁

7、存,P3口作为位选控制信号。由于采用的是共阴极数码管,当需要显示哪一位的时候,只要在相应的位选控制信号输出低电平就行。例如,要在第一个数码管显示P,那么在P2口就要输出73H字段码,同时P3口输出FEH位选码。2.4 键盘电路工作原理如下:1检测键盘上是否有键按下:将行线送入低电平,列线送入高电平。读入P1口的状态来判别。其具体过程如下:P1口输出0FH,即所有行线置成高电平,所有列线置成低电平,然后将P1口状态读入与0FH比较。如果有键按下,总会有一根行线电平被拉至低电平,从而使行输入状态不全为1。2识别键盘中哪一个键按下:确认有键按下后,保存行扫描时有键按下时的状态X 。P1口输出F0H,

8、进行列扫描,保存列扫描状态Y,取出键值Z=X|Y.例如第一行第一列有键按下,那么行扫描读入的状态为00001110,列扫描读入的状态为11100000,最后键值Z=11101110=EEH,然后转去执行相应的服务程序。3 系统的软件设计3.1 主程序(见附录2)3.2 信号产生3.2.1 方波产生方波发生程序运用延时的方法实现,只用一个主程序即可,因为产生一个方波只需要高低两个数,所以程序比较简单。要给一个频率,再计算所需的延时即可。实现方波的程序如下:else if( wave_choice = 3 ) / 方波 k = zk * 256 / 100; d +; if(d = k) P0 =

9、 0x00; else P0 = 0xff; 3.2.2 锯齿波产生锯齿波中的斜线用一个个小台阶来逼近,在一个周期内从最小值开始逐步递增,当达到最大值后又回到最小值,如此循环,当台阶间隔很小时,波形基本上近似于直线。适当选择循环的时间,可以得到不同周期的锯齿波。锯齿波发生原理与方波类似,只是高低两个延时的常数不同,所以用延时法,来产生锯齿波。else if(wave_choice = 4) /锯齿波 if(e = 255) P0 = 255 - e; else P0=0; e+; 3.2.3 三角波产生可直接通过如下程序段实现。else if( wave_choice = 2 ) /三角波 i

10、f(c = 128) P0 = c; else P0 = 255 - c; c +; 3.2.4 正弦波产生#includemain()int n,i=0,j,k; float y=0, a=3.1415926,b=0,c=2.5000,d=0; for(n=0;n=64;n+) y=2.5*sin(a*n/128)+2.5; b=y; /b,y为当前幅度值 d=b-c; /d为递增率 j=d/0.0196; /j为数字递增率,0.0196为 k=128+j; /k为数字量 printf(“%d,%f,%f,%d,%dn”,i,y,d,j,k); i+;3.3 键盘扫描键盘扫描流程图如下:键盘

11、扫描源程序如下:void judge(void) unsigned char X,Y,Z; P1 = 0xff; P1 = 0x0f; /先对P1置数行扫描 if(P1 != 0x0f) /判断是否有键按下 delay10ms(); /延时,软件去干扰 if(P1 != 0x0f) /确认按键按下X = P1; X = P1; /保存行扫描时有键按下时状态 P1 = 0xf0; /列扫描 Y = P1; /保存列扫描时有键按下时状态 Z = X | Y; /取出键值 switch ( Z ) /判断键值(那一个键按下) case 0x7d: key1(); break; case 0xee:

12、key2(); break; /对键值赋值 case 0xde: key3(); break; case 0xbe: key4(); break; case 0x7e: key5(); break; case 0xed: key6(); break; case 0xdd: key7(); break; case 0xbd: key8(); break; 3.5 键盘处理/*键选择发波类型,1为正弦波,2为三角波,3为方波*/void key1(void) if(wave_choice4) wave_choice = wave_choice + 1; else wave_choice = 1;

13、4 系统的测试在调试过程中,会有各种各样的问题,出现问题是,可以从两方面入手,一个是硬件方面,看原件是否焊接正确,是否存在虚焊;另一个方面就是从软件入手,看程序中是否从在错误。5 总结单片机控制多功能信号发生器可以用于“单片机技术”的教学实践,也可以用于实验信号的产生。其比较典型的接口电路设计也为实际应用提供参考。该仪器的研制既解决了实验教学的需求,也节约了实验设备投资,降低了实验成本。经过进一步完善后,可由学生利用课程设计的机会,亲自动手制作,这样还可以进一步降低成本,同时极大地提高了学生的动手能力,是一件一举多得的好事。随着科学技术的不断发展,以及实验教学要求的不断更新,要求我们开发的应用

14、系统具有良好的可扩充性和更新能力,作为一名技术人员,应时刻跟踪科技发展的步伐,不断丰富专业知识,不断完善我们开发的系统。 参考文献1 周润景等编著. Proteus在MCS-51&ARM7系统中的应用百例:电子工业出版社,20062 杨宁编著.单片机与控制技术.北京:北京航空航天大学出版社,20053 李朝青.单片机原理及接口技术M.北京:北京航空航天大学出版社,2005附录1 原理图1、系统总体结构框图设计:2、初始化流程图:3、信号发生器电路图:附录2 源程序清单#include #define uchar unsigned char uchar code number_tab10=0x3

15、f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/0-9数字共阴极uchar code init_tab8=0X73,0x73,0x73,0x76,0x79,0x38,0x38,0x3f;/ PPP. HELLO共阴极uchar code to_sin256=0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5, 0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca, 0xcc,0xcf,0xd1,

16、0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7, 0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9, 0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8, 0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0

17、xe9,0xe7,0xe5, 0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7, 0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2, 0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c, 0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55, 0x51,0x4e,0x4c,0x48,0

18、x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30, 0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15, 0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04, 0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0

19、x08,0x09, 0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e, 0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d, 0x40,0x43,0x45,0x48,0x4c,0x4e ,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 ;/正弦波数据uchar b=0,c=0,d=0,e=0,i,k,tl,th;int ww=

20、0,qw=0,bw=9,sw=8,gw=3,zkgw=0,zksw=5;/ww为万位数字,qw为千位数字,bw为百位数字, /sw为十位数字,gw为个位数字,zkgw为占空比个位数字,zksw为占空比十位数字int t,f,m,wave_choice=1,zk=50;/t为时间变量,f为频率变量,choice为波形类型选择变量,zk为占空比变量,默认占空比为50%void delay10ms() /延时10ms程序 unsigned char i,j; for(i = 10; i 0; i-) for(j = 120; j 0; j-); void chushihua(void)/初始化显示

21、PPP.HELLO P3 = 0xfe; P2 = init_tab0; for(i = 0; i = 60; i+); P3 = 0xfd; P2 = init_tab1; for(i = 0; i = 60; i+); P3 = 0xfb; P2 = init_tab2; for(i = 0; i = 60; i+); P3 = 0xfb;/小数点显示 P2 = 0x80; for(i = 0; i = 60; i+); P3 = 0xf7; P2 = init_tab3; for(i = 0; i = 60; i+); P3 = 0xef; P2 = init_tab4; for( i=

22、0;i=60;i+); P3 = 0xdf; P2 = init_tab5; for(i = 0; i = 60; i+); P3 = 0xbf; P2 = init_tab6; for(i = 0; i = 60; i+); P3 = 0x7f; P2 = init_tab7; for(i = 0; i = 60; i+); /*键选择发波类型,1为正弦波,2为三角波,3为方波*/void key1(void) if(wave_choice4) wave_choice = wave_choice + 1; else wave_choice = 1; /*频率个位调整*/void key2(v

23、oid) if(gw 9) gw = gw + 1; else gw = 0;/*频率十位调整*/void key3(void) if(sw 9) sw = sw + 1; else sw = 0;/*频率百位调整*/void key4(void) if(bw 9) bw = bw + 1; else bw = 0;/*频率千位调整*/void key5(void) if(qw 9) qw = qw + 1; else qw=0;/*频率万位调整*/void key6(void) if(ww 5) ww=ww+1; else ww=0;/*方波占空比加大*/void key7(void) if

24、(zk = 1) zk=zk-1; else zk=0;/*计算显示数字*/void jisuan(void) TR0 = 0; /关闭定时器 f = 100000 * ww + 1000 * qw + 100 * bw + 10 * sw + gw; t = 1000000 / f; th = -t / 256; tl = -t % 256; ww = f / 10000; f = f % 10000; qw = f / 1000; f = f % 1000; bw = f / 100; f = f % 100; sw = f / 10; gw = f % 10; zkgw = zk % 1

25、0; zksw = zk / 10; TR0 = 1;/*显示*/void display (void) P3 = 0xfb; P2 = number_tabwave_choice; for(i = 0; i = 60; i+); P3 = 0xfb; P2 = 0x80; /小数点显示 for(i = 0; i = 60; i+); P3 = 0xf7; P2 = number_tabww; for(i = 0; i = 60; i+); P3 = 0xef; P2 = number_tabqw; for(i = 0; i = 60; i+); P3 = 0xdf; P2 = number_

26、tabbw; for(i = 0; i = 60; i+); P3 = 0xbf; P2 = number_tabsw; for(i = 0; i = 60; i+); P3 = 0x7f; P2 = number_tabgw; for(i = 0; i = 60; i+); if(wave_choice = 3) P3 = 0xfd; P2 = number_tabzkgw; for(i = 0; i = 60; i+); P3 = 0xfe; P2 = number_tabzksw; for(i = 0; i = 60; i+); P3 = 0xfd; P2 = 0x80; /小数点显示

27、for(i = 0; i = 60; i+); /*键盘扫描*/void judge(void) unsigned char X,Y,Z; P1 = 0xff; P1 = 0x0f; /先对P1置数 行扫描 if(P1 != 0x0f) /判断是否有键按下 delay10ms(); /延时,软件去干扰 if(P1 != 0x0f) /确认按键按下X = P1; X = P1; /保存行扫描时有键按下时状态 P1 = 0xf0; /列扫描 Y = P1; /保存列扫描时有键按下时状态 Z = X | Y; /取出键值 switch ( Z ) /判断键值(那一个键按下) case 0x7d: k

28、ey1(); break; case 0xee: key2(); break; /对键值赋值 case 0xde: key3(); break; case 0xbe: key4(); break; case 0x7e: key5(); break; case 0xed: key6(); break; case 0xdd: key7(); break; case 0xbd: key8(); break; void main(void) /主函数 int n; for(n = 0; n 500; n+) chushihua(); TMOD = 0X01; TR0 = 1; th = -t / 256; tl = -t % 156; TH0 = th; TL0 = tl; ET0 = 1; EA = 1; while(1) jisuan(); for(i = 0; i = 50; i+); display(); judge();/键盘扫描 void time0_int(void) interrupt 1 /

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

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