基于单片机的信号发生器设计.doc

上传人:rrsccc 文档编号:9136303 上传时间:2021-02-04 格式:DOC 页数:28 大小:597.66KB
返回 下载 相关 举报
基于单片机的信号发生器设计.doc_第1页
第1页 / 共28页
基于单片机的信号发生器设计.doc_第2页
第2页 / 共28页
基于单片机的信号发生器设计.doc_第3页
第3页 / 共28页
基于单片机的信号发生器设计.doc_第4页
第4页 / 共28页
基于单片机的信号发生器设计.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《基于单片机的信号发生器设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的信号发生器设计.doc(28页珍藏版)》请在三一文库上搜索。

1、 本科学生单片机课程设计报告题 目 基于单片机的信号发生器设计 姓 名 XXX 学 号 201X18XXXX 院 (系) 职业技术学院 专业、年级 XXXXXXXX 指导教师 XXXX 课程设计成绩评定表项目评分依据满分得分设计作品电路板焊接工艺10功能完整20性能指标10程序运行可靠20人机交互友好,操作方便10设计报告内容完整10写作规范10设计报告篇幅符合要求10实评总分 指导教师签名 目 录1 设计要求4 1.2 方案设计与论证4 1.2.1 信号发生电路方案论证 4 1.2.2 单片机的选择论证 4 1.2.3 显示方案论证 5 1.2.4 键盘方案论证 52 硬件电路设计6 2.1

2、 单片机最小系统的设计 6 2.2 波形产生模块设计 7 2.3 显示模块的设计 8 2.4 键盘显示模块的设计 93 程序设计94 总结 10参考文献 10附件一:电路原理图 10附件二:程序清单 111、 系统设计 经过考虑,我们确定方案如下:利用AT89S52单片机采用程序设计方法产生锯齿波、正弦波、矩形波三种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,通过键盘来控制三种波形的类型选择、频率变化,最终输出显示其各自的类型以及数值。1.1、设计要求 1)、利用单片机采用软件设计方法产生三种波形 2)、三种波形可通过键盘选择 3)、波形频率

3、可调 4)、需显示波形的种类及其频率1.2方案设计与论证 1.2.1 信号发生电路方案论证 方案一:通过单片机控制D/A,输出三种波形。此方案输出的波形不够稳定,抗干扰能力弱,不易调节。但此方案电路简单、成本低。方案二:使用传统的锁相频率合成方法。通过芯片IC145152,压控振荡器搭接的锁相环电路输出稳定性极好的正弦波,再利用过零比较器转换成方波,积分电路转换成三角波。此方案,电路复杂,干扰因素多,不易实现。 方案三:利用MAX038芯片组成的电路输出波形。MAX038是精密高频波形产生电路,能够产生准确的三角波、方波和正弦波三种周期性波形。但此方案成本高,程序复杂度高。考虑到配合本学期所学

4、的知识,选择方案一。1.2.2 单片机的选择论证 AT89S52单片机是一种高性能8位单片微型计算机。它把构成计算机的中央处理器CPU、存储器、寄存器、I/O接口制作在一块集成电路芯片中,从而构成较为完整的计算机、而且其价格便宜。故而采取此种方案。 1.2.3 显示方案论证 方案一:采用LED数码管。LED数码管由8个发光二极管组成,每只数码管轮流显示各自的字符。由于人眼具有视觉暂留特性,当每只数码管显示的时间间隔小于1/16s时人眼感觉不到闪动,看到的是每只数码管常亮。使用数码管显示编程较易,但要显示内容多,而且数码管不能显示字母。 方案二:采用LCD液晶显示器1602。其功率小,效果明显,

5、显示编程容易控制,可以显示字母。以上两种方案综合考虑,选择方案二。1.2.4 键盘方案论证方案一:矩阵式键盘。矩阵式键盘的按键触点接于由行、列母线构成的矩阵电路的交叉处。当键盘上没有键闭合时,所有的行和列线都断开,行线都呈高电平。当某一个键闭合时,该键所对应的行线和列线被短路。方案二:编码式键盘。编码式键盘的按键触点接于74LS148芯片。当键盘上没有闭合时,所有键都断开,当某一键闭合时,该键对应的编码由74LS148输出。以上两种方案综合考虑,选择方案一。1.3总体系统设计该系统采用单片机作为数据处理及控制核心,由单片机完成人机界面、系统控制、信号的采集分析以及信号的处理和变换,采用按键输入

6、,利用液晶显示电路输出数字显示的方案。将设计任务分解为按键电路、液晶显示电路等模块。图(1)为系统的总体框图 图(1) 总体方框图2、硬件实现及单元电路设计 2.1单片机最小系统的设计89C51是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单可靠。用80C51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如图(2) 89C51单片机最小系统所示。由于集成度的限制,最小应用系统只能用作一些小型的控制单元。其应用特点:(1) 有可供用户使用的大量I/O口线。(2) 内部存储器容量有限。(3) 应用系统开发具有特殊性。图(2) 89C51单片机最小系统2.2

7、波形产生模块设计 由单片机采用编程方法产生三种波形、通过DA转换模块DAC0832在进过滤波放大之后输出。其电路图如下: 图(3)波形产生电路如上图所示,单片机的P0口连接DAC0832的八位数据输入端,DAC0832的输出端接放大器,经过放大后输出所要的波形。DAC0832的为八位数据并行输入的,其结构图如下: 图(4)DAC0832的内部结构2.3 显示模块的设计通过液晶1602显示其电路图如右图: 图(5)液晶显示如上图所示,1602的八位数据端接单片机的P0口,其三个使能端RS、RW、EN分别接单片机的P1.2P1.4。通过软件控制液晶屏可以显示波形的种类以及波形的频率。2.4 键盘模

8、块的设计本系统采用独立键盘,其连接电路图如下: 图(6)键盘如图开关S2用来调节输出信号的频率、默认输出频率为10KHz,其次按照1KHz、100Hz、10Hz、1Hz递减输出。开关S3用来切换输出信号的波形。3、软件设计流程本系统采用AT89S52单片机,用编程的方法来产生三种波形,并通过编程来切换三种波形以及波形频率的改变。具体功能有:(1)各个波形的切换;(2)各种参数的设定;(3)频率增减等。软件调通后,通过编程器下载到AT89S52芯片中,然后插到系统中即可独立完成所有的控制。4、总结通过这次毕业设计,使我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了大学三

9、年的学习成果,进一步加深了我对专业知识的了解和认识以及动手的能力。虽然在这次设计中对于所学知识的运用和衔接还不够熟练,作品完成的还不是很出色。但是我将在以后的工作和学习中继续努力、不断完善。这个设计是对我们过去所学知识的系统提高和扩充的过程,为今后的发展打下了良好的基础。参考文献 1 戴仙金主编 51单片机及其C语言汇编程序开发实例 清华大学出版社,20082 高吉祥主编 全国大学生电子设计竞赛培训系列教程 电子工业出版社,20073 杨素行主编 模拟电子技术基础简明教程 高等教育出版社,20074 蒋辉平主编 单片机原理与应用设计 北京航空航天大学出版社 2007附件一:电路原理图附件二:程

10、序清单#include lcd.h#include /sbit csda=P13; /DAC0832的片选信号,低电平有效sbit wr=P11; /输入寄存器的写选通输入端,负脉冲有效sbit s1=P32; /波形选择中断入口sbit s2=P33; /频率选择中断入口uchar k=0,p=0,delay=0;uchar bxxz=0;pinglv=1,count=0;uchar a=1;/正弦波低频数据uchar code sin256=128,131,134,137,140,144,147,150,153,156,159,162, 165,168,171,174,177,179,18

11、2,185,188,191,193,196,199, 201,204,206,209,211,213,216,218,220,222,224,226,228, 230,232,234,235,237,239,240,241,243,244,245,246,248, 249,250,250,251,252,253,253,254,254,254,255,255,255, 255,255,255,255,254,254,254,253,253,252,251,250,250, 249,248,246,245,244,243,241,240,239,237,235,234,232, 230,228,

12、226,224,222,220,218,216,213,211,209,206,204, 201,199,196,193,191,188,185,182,179,177,174,171,168, 165,162,159,156,153,150,147,144,140,137,134,131,128, 125,122,119,116,112,109,106,103,100,97,94,91,88,85,82, 79,77,74,71,68,65,63,60,57,55,52,50,47,45,43,40,38,36, 34,32,30,28,26,24,22,21,19,17,16,15,13,

13、12,11,10,8,7,6, 6,5,4,3,3,2,2,2,1,1,1,1,1,1,1,2,2,2,3,3,4,5,6,6,7,8,10, 11,12,13,15,16,17,19,21,22,24,26,28,30,32,34,36,38,40,43, 45,47,50,52,55,57,60,63,65,68,71,74,77,79,82,85,88,91,94, 97,100,103,106,109,112,116,119,122,125,128;/正弦波高频数据uchar code sin128= 128,134,140,147,153,159,165,171,177,182,18

14、8, 193,199,204,209,213,218,222,226,230,234,237, 240,243,245,248,250,251,253,254,254,255,255, 255,254,254,253,251,250,248,245,243,240,237, 234,230,226,222,218,213,209,204,199,193,188, 182,177,171,165,159,153,147,140,134,128,122, 116,109,103,97,91,85,79,74,68,63,57,52,47,43, 38,34,30,26,22,19,16,13,11

15、,8,6,5,3,2,2,1,1,1, 2,2,3,5,6,8,11,13,16,19,22,26,30,34,38,43,47, 52,57,63,68,74,79,85,91,97,103,109,116,122,128;uchar code sin100= 128,136,144,152,160,167,175,182,189,196,203, 209,215,221,226,231,235,239,243,246,249,251, 253,254,255,255,255,254,253,251,249,246,243, 239,235,231,226,221,215,209,203,1

16、96,189,182, 175,167,160,152,144,136,128,120,112,104,96,89, 81,74,67,60,53,47,41,35,30,25,21,17,13,10,7,5, 3,2,1,1,1,2,3,5,7,10,13,17,21,25,30,35,41,47,53, 60,67,74,81,89,96,104,112,120,128;uchar code sin33=128,153,177,199,218,234,245,253,255,253,245, 234,218,199,177,153,128,103,79,57,38,22,11,3,1,3,

17、11,22,38,57,79,103,128;uchar code sin17=128,177,218,245,255,245,218,177,128,79,38,11,1,11,38,79,128; /方波低频数据uchar code juxing256=255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,

18、255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255

19、,255, 255,255,255,255,255,255,255,255,255,255,255,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

20、,0,0,0,0,0;/方波高频数据uchar code juxing128= 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,2

21、55, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;uchar code juxing100= 255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,25

22、5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;uchar code juxing32=255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;uchar code juxing16=255,2

23、55,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0;/三角波数据/uchar code sanjiao256256=;/uchar code sanjiao128128=;uchar code sanjiao100=128,133,138,143,148,153,158,164,169,174,179, 184,189,194,199,204,209,214,219,225,230,235,240,245,250,255,250,245,240,235,230,225,219,214,209,204,199,194,189,184,179,174,169,

24、164,158,153,148,143,138,133,128,127,122,117,112,107,102,97,91,86,81,76,71,66,61,56,51,46,41,36,30,25,20,15,10,5,0,5,10,15,20,25,30,36,41,46,51,56,61,66,71,76,81,86,91,97,102,107,112,117,122,127,128;uchar code sanjiao32=128,144,160,176,192,207,223,239,255,239, 223,207,191,176,160,144,128,112,96,80,64

25、,49,33,17, 1,17,33,49,65,80,96,112,128;uchar code sanjiao29=128,146,164,182,200,218,236,255,236,218, 200,182,164,146,128,110,92,74,56,37,18,0, 19,37,55,73,91,110,128;uchar code sanjiao17=128,153,178,204,229,255,229, 204,178,153,128,102,78,52,26,0,26,52,78,102,128;void delay1() /延时程序int a,b;for(a=1;a

26、0;a-)for(b=122;b0;b-);void int0() interrupt 0 /采用T0中断 改变频率TR0=0;EX0=0;delay1();/延时,判断S2是否真的键被按下if(s1=0)/若真的被按下,为消除按键抖动影响p+;if(p=6) p=0;/输出波形的每一点设定延时时间长短,以便选择频率switch(p)case 1 :pinglv=10;display1KHz();break;case 2 :pinglv=100;display100Hz();break;case 3 :pinglv=1000;display10Hz();break;case 4:pinglv=

27、10000;display1Hz();break; case 5 : pinglv=1; display10KHz();break;default :pinglv=1;break;delay1();while(!s1);while(!s1);EX0=1;TR0=1;void int1() interrupt 2/采用T1中断改变波形TR0=0;EX1=0;delay1();if(s2=0)bxxz+;if(bxxz=3)bxxz=0;switch(bxxz)case 0 : /默认为正弦波a=1; displayzhengxian(); /在液晶的第一行显示正弦波break; case 1 :

28、 /选择方波a=2; displayfangbo(); /在液晶的第一行显示方波break;case 2 :/三角波a=3; displaysanjiao(); /在液晶的第一行显示三角波break;delay1();/延时,判断键按S1是否真的被按下while(!s2);/若真的被按下,为消除按键抖动影响while(!s2);/等待按键松开EX1=1;TR0=1;void timer0()interrupt 1 /定时器0中断服务程序 if(pinglv!=1 & pinglv!=10)if(a=1)/默认为正弦波;频率最高 P2=sin100k; k+;if(k=100)k=0; if(a

29、=2)/方波 P2=juxing100k; k+;if(k=100)k=0;if(a=3) P2=sanjiao100k; k+;if(k=100)k=0;if(pinglv=100) TH0=(65536-92)/256; /再次装定时器初值 TL0=(65536-92)%256;if(pinglv=1000) TH0=(65536-990)/256; /再次装定时器初值 TL0=(65536-990)%256;if(pinglv=10000) TH0=(65536-10000)/256; /再次装定时器初值 TL0=(65536-10000)%256;void main()/主程序 ini

30、t();/液晶初始化wr=0; /AUXR =0x80;/定时器0时钟为Fosc,即1TEA=1;IT0=1; / 低电平触发方式EX0=1; / 打开外部中断0IT1=1; /低电平触发方式EX1=1; / 打开外部中断1 TMOD=0x01; /设置定时器0工作模式1 TH0=(65536-1)/256; /定时器装初值10/12 微秒 TL0=(65536-1)%256; ET0=1; /开定时器0中断 TR0=1; / 启动定时器0*/ while(1) if(pinglv=1) TR0=0; if(a=1)/默认为正弦波;频率最高 P2=sin17k; k+;if(k=16)k=0;

31、 if(a=2)/方波 P2=juxing16k; k+;if(k=16)k=0;if(a=3) P2=sanjiao17k; k+;if(k=16)k=0;/_nop_(); if(pinglv=10) delay=3; TR0=0; if(a=1)/默认为正弦波;频率最高 P2=sin100k; k+;if(k=100)k=0; while(delay) delay-;if(a=2)/方波 P2=juxing100k; k+;if(k=100)k=0; while(delay) delay-;if(a=3) P2=sanjiao100k; k+;if(k=100)k=0;while(del

32、ay) delay-;TR0=1; 液晶显示程序:#include lcd.huchar num;uchar code table2=sin(x): ;uchar code table3=sanjiao(x):;uchar code table4=fangbo(x): ;uchar code table1=sin(x) ;/定义初始上电时液晶默认显示状态uchar code table6=10KHz ;uchar code table7=1000Hz ;uchar code table8=100Hz ;uchar code table9=1Hz ;uchar code table10=10Hz

33、 ;void dela(uint z) /延时函数 uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void write_com(uchar com) /液晶写命令函数rw=0; rs=0; lcden=0; P0=com; dela(5); lcden=1; dela(5); lcden=0;void write_date(uchar date) /液晶写数据函数 rw=0; rs=1; lcden=0; P0=date; dela(5); lcden=1; dela(5); lcden=0;void init() /初始化函数 uchar num; wr

34、ite_com(0x38);dela(5);write_com(0x08);dela(5);write_com(0x01);dela(5);write_com(0x06);write_com(0x0c);dela(5); write_com(0x80); /设置显示初始值 for(num=0;table1num!=0;num+) write_date(table1num); dela(5); write_com(0x80+0x40); for(num=0;table6num!=0;num+) write_date(table6num); dela(5); void displayzhengxi

35、an() write_com(0x80); /在液晶的第一行显示正弦波 for(num=0;table2num!=0;num+) write_date(table2num); dela(5); void displayfangbo() write_com(0x80); /在液晶的第一行显示方波 for(num=0;table4num!=0;num+) write_date(table4num); dela(5); void displaysanjiao() write_com(0x80); /在液晶的第一行显示三角波 for(num=0;table3num!=0;num+) write_date(table3num); dela(5); void display10KHz() write_com(0x80+0x40)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1