仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- //文件、端口定義、程序開始
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit SQU_K=P1^4; //開關接口定義
- sbit SAW_K=P1^5;
- sbit TRI_K=P1^6;
- sbit SIN_K=P1^7;
- sbit SQU_L=P1^0;
- sbit SAW_L=P1^1;
- sbit TRI_L=P1^2;
- sbit SIN_L=P1^3;
- sbit ST=P3^0; //0808接口定義
- sbit EOC=P3^3;
- sbit OE=P3^4;
- sbit CS=P3^2; //0832接口定義
- sbit W_R=P3^6;
- uchar code sin_tab[]={0,0,0,0,1,1,2,3,4,5,6,8,
- 9,11,13,15,17,19,22,24,
- 27,30,33,36,39,42,46,49,
- 53,56,60,64,68,72,76,80,
- 84,88,92,97,101,105,110,114,
- 119,123,128,132,136,141,145,150,
- 154,158,163,167,171,175,179,183,
- 187,191,195,199,202,206,209,213,
- 216,219,222,225,228,231,233,236,
- 238,240,242,244,246,247,249,250,
- 251,252,253,254,254,255,255,255
- };
- //讀ADC0808子程序
- unsigned char adc0808(void)
- {
- uchar dat,i;
- ST=0;
- ST=1;
- ST=0;
- for(i=10;i>0;i--)
- while(!EOC);
- OE=1;
- dat=P2;
- return(dat);
- }
- //方波發生函數
- void square()
- {
- uchar a,b;
- for(a=0;a<127;a++)
- {
- P0=0xff;
- P2=0xff;
- b=adc0808();
- b=~b;
- while(b--); //調節相位,b的變化越大,相位變化越小
- }
- for(a=0;a<127;a++)
- {
- P0=0;
- P2=0xff;
- b=adc0808();
- b=~b;
- while(b--);
- }
- }
- //鋸齒波發生函數
- void sawtooth()
- {
- uchar a,b;
- for(a=0;a<255;a++)
- {
- P0=a;
- P2=0xff;
- b=adc0808();
- b=~b;
- while(b--);
- }
- }
- //三角波發生函數
- void triang()
- {
- uchar a,b;
- for(a=0;a<254;a=a+2)
- {
- P0=a;
- P2=0xff;
- b=adc0808();
- b=~b;
- while(b--);
- }
- for(a;a>1;a=a-2)
- {
- P0=a;
- P2=0xff;
- b=adc0808();
- b=~b;
- while(b--);
- }
- }
- //正弦波發生函數
- void sinwave()
- {
- uchar a,b;
- for(a=0;a<92;a++)
- {
- P0=sin_tab[a];
- P2=0xff;
- b=adc0808();
- b=~b;
- while(b--);
- }
- for(a=a-1;a>0;a--)
- {
- P0=sin_tab[a];
- P2=0xff;
- b=adc0808();
- b=~b;
- while(b--);
- }
- }
- //主函數
復制代碼 全部資料51hei下載地址:
信號發生器.zip
(969.18 KB, 下載次數: 245)
2019-4-13 13:42 上傳
點擊文件名下載附件
包括Proteus、源程序、課程設計報告
|