1、 查閱相關(guān)資料,完成原理圖設(shè)計; 2、 編寫軟件,使該系統(tǒng)能輸出方波、三角波、鋸齒波和梯形波;波形頻率均為1khz,雙極性輸出。 3、 用protel軟件完成系統(tǒng)的硬件設(shè)計,并通過電器規(guī)則檢查; 4、 仿真實現(xiàn); 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; //////延時函數(shù)參數(shù)///////
- /////////////////////////////變量說明//////////////////////////////////////
- unsigned char time2;
- unsigned char time3;
- unsigned char count;
- unsigned char ms;
- ////////////////////////////////////////函數(shù)說明////////////////////////////////
- void initial(void); ////初始化函數(shù)////
- //void initial_time0(void); //////定時器0初始化///////
- void anjian(void); ////////////按鍵函數(shù)////
- void delay(unsigned char time1,time2,time3); ////延時函數(shù)////
- void disp(unsigned char count); /////靜態(tài)顯示子函數(shù)/////
- void delay1(char ms);
- void fangbo(void); //方波函數(shù)//
- void sanjiaobo(void); //三角波函數(shù)//
- void juchibo(void); //鋸齒波函數(shù)//
- void tixingbo(void); //正弦波函數(shù)//
- void main (void)
- {
- initial();
- while(1)
- {
- anjian();
- }
- }
- /*************************************************************************
- //函數(shù)名稱:void anjian(void)
- //函數(shù)說明:按鍵函數(shù)
- //函數(shù)功能:
- // 注意:
- *************************************************************************/
- 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();
- }
- /*************************************************************************
- //函數(shù)名稱:void fangbo(void)
- //函數(shù)說明:方波函數(shù)
- //函數(shù)功能:
- // 注意:
- *************************************************************************/
- 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);
- }
- }
- /*************************************************************************
- //函數(shù)名稱:voidsanjiaobo(void)
- //函數(shù)說明:三角波函數(shù)
- //函數(shù)功能:
- // 注意:
- *************************************************************************/
- 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);
- }
- }
- /*************************************************************************
- //函數(shù)名稱:voidjuchibo(void)
- //函數(shù)說明:鋸齒波函數(shù)
- //函數(shù)功能:
- // 注意:
- *************************************************************************/
- 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);
- }
- }
- /*************************************************************************
- //函數(shù)名稱:voidtixingbo(void)
- //函數(shù)說明:梯形波函數(shù)
- //函數(shù)功能:
- // 注意:
- *************************************************************************/
- 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);
- }
- }
- /*************************************************************************
- //函數(shù)名稱:voidinitial(void)
- //函數(shù)說明:初始化函數(shù)
- //函數(shù)功能:
- // 注意:
- *************************************************************************/
- void initial(void)
- {
- P0=0xff;
- P1=0xff;
- P2=0xff;
- P3=0xff;
- }
- /*************************************************************************
- //函數(shù)名稱:delay(unsignedchar time1,time2,time3)
- //函數(shù)說明:延時函數(shù)
- //函數(shù)功能:
- //入口參數(shù):unsigned chartime1,time2,time3
- //出口參數(shù):
- // 注意:延時時間的計算:(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--);
- }
- }
- }
- /*************************************************************************
- //函數(shù)名稱:disp(unsignedchar count)
- //函數(shù)說明:靜態(tài)顯示子函數(shù)
- //函數(shù)功能:
- //入口參數(shù):unsigned charcount
- //出口參數(shù):
- // 注意:
- *************************************************************************/
- 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++){}
- }
- }
復(fù)制代碼
全部資料51hei下載地址:
低頻信號發(fā)生器.rar
(1.53 MB, 下載次數(shù): 38)
2019-12-3 23:14 上傳
點擊文件名下載附件
|