电子技术课程设计报告(1)(1)(1).doc
电子技术课程设计报告题 目:函数信号发生器作 者: 罗涌新 黄漫辉单 位: 揭阳职业技术学院专 业: 机电系电子信息工程技术091班指导老师: 钱德明二一一年六月八日目 录一、摘 要3二、设计要求41.4三、硬件设计43.1、电路设计4四、软件设计54.1主程序流程图54.2电路原理图7五、电路的调设六、实验总结7七、附录81、函数信号发生器的程序:82、proteus仿真电路图1515一、摘 要 函数信号发生器是一种在科研和生产中经常用到的基本波形发生器,随着大规模集成电路的迅速发展,很多功能信号发生器已被制作成专用集成电路,如用AT89C51单片机还做波形发生器,可以产生精度较高的方波、正弦波、三角波、锯齿波等多种信号。也可以采用其他的芯片如5G8038或者ICL8038单片机函数信号发生器。我们采用的是AT89C51,电路也可以通过调节外接电阻和电容的参数值进行调节,为快速准确地实现函数信号发生器提供了极大方二、设计要求1. 具有产生正弦波、方波、三角波及锯齿波四种周期性的波形。 用键盘输入编辑生成上述四种波形(同周期)的线性组合波形,以及由基波及其谐波( 5次以下)线性组合的波形。 2. 具有波形存储功能。 输出波形的频率为100Hz20KHz(非正弦波频率按10次谐波计算):重复频率可调,频 率步进间隔100Hz。 输出波形幅度范围05V(峰-峰值),可按步进0.1V(峰-峰值)调整。 具有显示输出波形的类型、重复频率(周期)和幅度的功能三、硬件设计 键盘 AT89S51 波形指示电源A/D转换基准电压电流/电压转换输出3.1、电路设计 低频信号发生器系统框图低频信号发生器系统主要由CPU、D/A转换电路、基准电压电路、电流/电压转换电路、按键和波形指示电路、电源等电路组成。其工作原理为当分别每按下按键一次就会分别出现方波、锯齿波、三角波、正弦波,并且有数码管会指示是那种波形序号,另外,发光二极管发光说明系统处于工作状态。四、软件设计软件设计上,根据功能分了几个模块编程。模块主要有:主程序模块、方波模块、三角波模块、锯齿波模块、正弦波模块、延时子程序模块等。显示波形模块是利用DAC0832的8位特点,把波形的数据以8位数据的形势送进CPU中,只要一按键就能显示波形。4.1主程序流程图开始KEY1按下1次 输出方波KEY1按下3次KEY1按下2次KEY1按下4次 N N NNNYYY Y 输出三角波 输出锯齿波 输出正弦波 本软件设计过程中主要实现利用按键来控制不同波形的输出,当按键KEY1按下1次时,函数发生器就输出方波;当按键KEY1按下2次时,函数发生器就输出三角波;当按键KEY1按下3次时,函数发生器就输出锯齿波;当按键KEY1按下4次时,函数发生器就输出正弦波。通过按键可以以任意循环方式输出不同波形,数码管上显示的数字分别对应相应的波形。按键KEY2按下时复位。4.2电路原理图五、电路的调试采用分别调试各个单元模块,调通后再进行各单元电路联机统调的方法,提高调试效 率。 (1)软件部分调试 本机的软件主要功能是完成人机接口,因此编程的时候把界面的友好性放在首位, 采用主从菜单式的操作方法。由于对51系列单片机编程比较熟悉,在软件的仿真调试过 程中没有遇到太大的问题。各软件功能均正常实现。 (2)硬件部分调试 整个硬件调试过程基本顺利,由于采用了工艺精良的双面孔化PCB板,各单元电路工作稳 定,给调试工作带来很大的方便。六、实验总结通过这次实验我们学会了很多东西,既巩固了现有的知识,自己对发生器的工作原理也有了进一步的了解。通过本次波形发生器的设计,装配,调试;了解了它在实际生活中的运用和功能。七、附录1、函数信号发生器的程序:/*/程序名称:波形发生器/设计时间:2008.8.3/设计人:祁瑞红/*/#include <AT89X51.H>/#include <INTRINS.H> /nop的头文件/#include <absacc.h>/共阴数码管的表/unsigned char code table=0xc0,0xf9,0xa4,0xb0,0x99;/0x00,0x12,0x4f,0x5b,0x72; / 1 2 3 4 unsigned char code stable= 80, 81, 83, 84, 86, 87, 89, 90, 92, 93, 95, 96, 97, 99, 100, 102, 103, 104, 106, 107, 108, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 121, 123, 124, 125, 126, 126, 127, 128, 129, 130, 131, 132, 132, 133, 134, 134, 135, 135, 136, 137, 137, 137, 138, 138, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 139, 139, 139, 138, 138, 138, 137, 137, 136, 136, 135, 135, 134, 133, 133, 132, 131, 131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 115, 114, 113, 112, 111, 109, 108, 107, 105, 104, 103, 101, 100, 98, 97, 96, 94, 93, 91, 90, 88, 87, 85, 84, 83, 81, 80, 78, 77, 75, 74, 72, 71, 69, 68, 66, 65, 64, 62, 61, 59, 58, 57, 55, 54, 53, 51, 50, 49, 47, 46, 45, 44, 43, 42, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 31, 30, 29, 28, 28, 27, 26, 26, 25, 24, 24, 23, 23, 22, 22, 22, 21, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 23, 23, 24, 24, 25, 25, 26, 27, 27, 28, 29, 30, 31, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 49, 50, 51, 52, 54, 55, 56, 58, 59, 61, 62, 63, 65, 66, 68, 69, 71, 72, 73, 75, 76, 78, 79;unsigned char time1; /延时函数参数/ /变量说明/ unsigned char time2;unsigned char time3;unsigned char count;/函数说明/void initial(void); /初始化函数/void initial_time0(void); /定时器0初始化/void anjian(void);/按键函数/void delay(unsigned char time1,time2,time3); /延时函数/void disp(unsigned char count); /静态显示子函数/void fangbo(void);/方波函数/void sanjiaobo(void);/三角波函数/void juchibo(void);/锯齿波函数/void zhengxianbo(void);/正弦波函数/void main (void)initial();while(1)anjian();/*/函数名称:void anjian(void)/函数说明:按键函数/函数功能:/ 注意:*/void anjian(void) if(P3_7=0) delay(1,50,248); if(P3_7=0) count=1; disp(count); fangbo(); while(P3_7=0)count+=1; if(count>4) count=0; disp(count);/anjian(); /*/函数名称:void fangbo(void)/函数说明:方波函数/函数功能:/ 注意:*/void fangbo(void)/while(1)是个死循环看执行一次多长时间*128求算频率,一个周期大约3ms多,这个频率为300hz左右while(1) unsigned char fangbo_1; fangbo_1+; if(fangbo_1>128&fangbo_1<256)P2=0x00; if(fangbo_1<128)P2=0xff; if(P3_7=0) delay(1,50,248); if(P3_7=0) count=2; disp(count); sanjiaobo(); while(P3_7=0); /*/函数名称:void sanjiaobo(void)/函数说明:三角波函数/函数功能:/ 注意:*/void sanjiaobo(void)while(1) unsigned char sanjiaobo_2; if(sanjiaobo_2<128)P2=sanjiaobo_2; elseP2=255-sanjiaobo_2; sanjiaobo_2+; if(sanjiaobo_2>=255)sanjiaobo_2=0x00; if(P3_7=0) delay(1,50,248); if(P3_7=0) count=3; disp(count); juchibo(); while(P3_7=0); /*/函数名称:void juchibo(void)/函数说明:锯齿波函数/函数功能:/ 注意:*/void juchibo(void)while(1) unsigned char juchibo_3; if(juchibo_3<180)P2=juchibo_3; juchibo_3+; if(juchibo_3>=180)juchibo_3=0x00;if(P3_7=0) delay(1,50,248); if(P3_7=0) count=4;disp(count); zhengxianbo(); while(P3_7=0); /*/函数名称:void zhengxianbo(void)/函数说明:正弦波函数/函数功能:/ 注意:*/void zhengxianbo(void)while(1) unsigned char zhengxianbo_4; P2=stablezhengxianbo_4; zhengxianbo_4+; if(zhengxianbo_4>=255) zhengxianbo_4=0;if(P3_7=0) delay(1,50,248); if(P3_7=0) count=0; disp(count); anjian(); while(P3_7=0);/*/函数名称:void initial(void)/函数说明:初始化函数/函数功能:/ 注意:*/void initial(void) P0=0xff; P1=0xff; P2=0xff; P3=0xff; /*/函数名称:delay(unsigned char time1,time2,time3)/函数说明:延时函数/函数功能:/入口参数:unsigned char time1,time2,time3/出口参数:/ 注意:延时时间的计算:(time1*time2*time3*8us)us time1,time2,time3可以不进行变量说明 */ void delay(unsigned char time1,time2,time3) unsigned char i,j,k; for(i=time1;i>0;i-) for(j=time2;j>0;j-) for(k=time3;k>0;k-); /*/函数名称:disp(unsigned char count)/函数说明:静态显示子函数/函数功能:/入口参数:unsigned char count/出口参数:/ 注意:*/void disp(unsigned char count) P0=tablecount; delay(1,5,248); /*/函数名称:void initial_time(void)/函数说明:定时器初始化/函数功能:/注 意:*/*void initial_time0(void)unsigued char th,tl;TMOD=0x01;/设置为定时器0方式1/th=(65536-50000)/256;/给定时器0赋初值/tl=(65536-50000)%256;TH0=th; TL0=tl;TR0=1;/开启定时器0/ET0=1;/开启定时器0溢出中断/EA=1;/开启中断总开关/ */*/函数名称:void void T0(void)interrupt 1 using 0(void)/函数说明:定时t0的中断函数/函数功能:/注 意:*/*void t0 (void)interrupt 1 using 1TR0=0;TH0=th; TL0=tl;TR0=1;*/2、proteus仿真电路图