基于单片机的函数发生器设计与实现

需积分: 9 2 下载量 48 浏览量 更新于2024-09-13 收藏 322KB DOC 举报
函数发生器单片机设计报告 **函数发生器单片机设计报告** **设计要求** 本设计项目的目的是设计一个函数发生器,以单片机AT89C51为核心,利用D/A转换器实现函数发生器,并通过按键选择输出波形,能够分别产生三角波、阶梯波、正向锯齿波、负向锯齿波和方波。 **设计目的** 1. 学会使用Keil和Proteus软件进行单片机编程和仿真设计。 2. 初步了解工程设计和项目设计的基本概念和方法。 3. 完成课程设计,提高单片机编程和应用系统设计的能力。 **设计方案** 本设计采用Atmel公司的AT89C51单片机编程方法实现,利用按键输入和液晶显示电路输出数字显示的方案。将设计任务分解为按键电路、液晶显示电路等模块。AT89C51单片机是整个波形发生器的核心部分,通过程序的编写和执行,产生各种各样的信号,并从键盘接收数据,进行各种功能的转换和信号幅度的调节。 **设计原理** 本系统采用单片机作为数据处理及控制核心,由单片机完成人机界面、系统控制、信号的采集分析以及信号的处理和变换。采用按键输入,利用液晶显示电路输出数字显示的方案。将设计任务分解为按键电路、液晶显示电路等模块。 **实验结果** 实验结果表明,本设计的函数发生器可以成功地产生五种不同的波形:方波、正向锯齿波、负向锯齿波、三角波和阶梯波。实验结果见下图: **总原理图** 总原理图见下图: **源程序** 源程序使用C语言编写,使用Keil编译器编译。源程序的主要部分见下: ```c #include<reg52.h> #include<absacc.h> #define DAC0832 0x7fff sbith=P3^4; unsigned char code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //定义数组SEG7 void delay(unsigned int i) //延时函数 { while(i--); } void fang() //方波 { if(h==1) { DAC0832=0; delay(15); DAC0832=255; delay(15); } } ``` **结论** 本设计的函数发生器单片机设计报告展示了使用AT89C51单片机设计一个函数发生器的整个过程,从设计要求到实验结果,展示了设计的每一个步骤和细节。该设计可以作为单片机应用系统设计的参考和示例。