#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++){} } }
|