一、实验目的
1、学习和运用keilC的C语言;
2、学习通过proteus软件画原理图,并利用keilC软件形成的HEX文件运行;
3、实现利用单片机AT98C51和8位D/A转换芯片DAC0832共同实现方波、三角波、锯齿波、梯形波这四种常见波形的发生。
4、进一步学习和利用protel软件,画出实验原理图,并生成PCB图;
5、AT89S51为核心的单片机系统的软硬件开发过程;
6、基本信号的产生原理及函数发生器系统的设计流程
二、实验要求
设计一个低频信号发生器:
1、查阅相关资料,完成原理图设计;
2、编写软件,使该系统能输出方波、三角波、锯齿波和梯形波;波形频率均为1khz,双极性输出。
3、用protel软件完成系统的硬件设计,并通过电器规则检查;
4、仿真实现;
5、画pcb图;
6、写综合课程设计报告。
三、器件清单
1、AT80C51一个;
2、DAC0832一个;
3、OPAMP两个;
4、数码管一个;
5、按键开关一个;
6、电阻、电感若干;
四、实验原理
#include
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66}// 0 1 2 3 4
unsigned char time1; //////延时函数参数///////
/////////////////////////////变量说明//////////////////////////////////////
unsigned char time2;
unsigned char time3;
unsigned char count;
unsigned char ms;
////////////////////////////////////////函数说明////////////////////////////////
void initial(void); ////初始化函数////
//void initial_time0(void); //////定时器0初始化///////
void anjian(void); ////////////按键函数////
void delay(unsigned char time1,time2,time3); ////延时函数////
void disp(unsigned char count); /////静态显示子函数/////
void delay1(char ms);
void fangbo(void); //方波函数//
void sanjiaobo(void); //三角波函数//
void juchibo(void); //锯齿波函数//
void tixingbo(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=0;
disp(count);
anjian();
}
/*************************************************************************
//函数名称:void fangbo(void)
//函数说明:方波函数
//函数功能:
// 注意:
*************************************************************************/
void fangbo(void)
{
while(1)
{
unsigned char fangbo_1;
fangbo_1+=8;
if(fangbo_1>128&fangbo_1<256) {P0=0x00;}
if(fangbo_1<128) {P0=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)
{P0=sanjiaobo_2;}
else
{P0=255-sanjiaobo_2;}
sanjiaobo_2+=5;
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) {P0=juchibo_3;}
juchibo_3+=4;
if(juchibo_3>=180) {juchibo_3=0x00;}
if(P3_7==0)
{
delay(1,50,248);
if(P3_7==0)
{count=4;
disp(count);
tixingbo();
}
}
while(P3_7==0);
}
}
/*************************************************************************
//函数名称:void tixingbo(void)
//函数说明:梯形波函数
//函数功能:
// 注意:
*************************************************************************/
void tixingbo(void)
{
while(1)
{
unsigned char tixingbo_4;
if(tixingbo_4<120)
{P0=tixingbo_4;}
else if(tixingbo_4==120)
delay1(1);
else if(tixingbo_4<240)
{P0=240-tixingbo_4;}
if(tixingbo_4==240)
{delay1(1);}
if(tixingbo_4>240)
{
tixingbo_4=0x00;
}
tixingbo_4+=10;
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)
{
P2=table[count];
delay(1,5,248);
}
void delay1(char ms)
{
char ti;
while(ms--)
{
for(ti=0;ti<16;ti++){}
}
}
实验心得
通过该课题的设计掌握以AT89S51为核心的单片机系统的软硬件开发过程和基本信号的产生原理、测量及误差分析方法,同时掌握函数发生器系统的设计流程;培养我们综合运用所学的基本知识、基本理论和基本技能的能力,学习解决一般工程技术和有关专业问题的能力,学习工程设计和科学研究的基本方法,完成对所学知识的综合训练。
全部0条评论
快来发表一下你的评论吧 !