1、 查阅相关资料,完成原理图设计; 2、 编写软件,使该系统能输出方波、三角波、锯齿波和梯形波;波形频率均为1khz,双极性输出。 3、 用protel软件完成系统的硬件设计,并通过电器规则检查; 4、 仿真实现; 5、 画pcb图;
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
电路原理图如下:
Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
单片机代码:
- #include <AT89X51.H>
- 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);
- }
- }
- /*************************************************************************
- //函数名称:voidsanjiaobo(void)
- //函数说明:三角波函数
- //函数功能:
- // 注意:
- *************************************************************************/
- void sanjiaobo(void)
- {
- while(1)
- {
- unsignedchar 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);
- }
- }
- /*************************************************************************
- //函数名称:voidjuchibo(void)
- //函数说明:锯齿波函数
- //函数功能:
- // 注意:
- *************************************************************************/
- void juchibo(void)
- {
- while(1)
- {
- unsignedchar 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);
- }
- }
- /*************************************************************************
- //函数名称:voidtixingbo(void)
- //函数说明:梯形波函数
- //函数功能:
- // 注意:
- *************************************************************************/
- void tixingbo(void)
- {
- while(1)
- {
- unsignedchar tixingbo_4;
- if(tixingbo_4<120)
- {P0=tixingbo_4;}
- elseif(tixingbo_4==120)
- delay1(1);
- elseif(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);
- }
- }
- /*************************************************************************
- //函数名称:voidinitial(void)
- //函数说明:初始化函数
- //函数功能:
- // 注意:
- *************************************************************************/
- void initial(void)
- {
- P0=0xff;
- P1=0xff;
- P2=0xff;
- P3=0xff;
- }
- /*************************************************************************
- //函数名称:delay(unsignedchar time1,time2,time3)
- //函数说明:延时函数
- //函数功能:
- //入口参数:unsigned chartime1,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(unsignedchar count)
- //函数说明:静态显示子函数
- //函数功能:
- //入口参数:unsigned charcount
- //出口参数:
- // 注意:
- *************************************************************************/
- 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++){}
- }
- }
复制代码
全部资料51hei下载地址:
低频信号发生器.rar
(1.53 MB, 下载次数: 38)
|