|
ADC0804信號(hào)發(fā)生器的仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.jpg (98.82 KB, 下載次數(shù): 63)
下載附件
2018-1-17 21:19 上傳
0.jpg (110.4 KB, 下載次數(shù): 80)
下載附件
2018-1-17 21:19 上傳
0.png (51.08 KB, 下載次數(shù): 83)
下載附件
2018-1-17 21:19 上傳
單片機(jī)源程序如下:
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit SQU_K =P3^4;
- sbit SAW_K =P3^5;
- sbit TRI_K =P3^6;
- sbit SIN_K =P3^7;
- sbit SQU_L =P1^0;
- sbit SAW_L =P1^1;
- sbit TRI_L =P1^2;
- sbit SIN_L =P1^3;
- sbit INTad=P3^3;
- sbit CS=P3^0; //使能端
- sbit W_R=P3^2; //寫端口
- sbit R_D=P3^1; //讀端口
- 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 };
- //*************************************************
- // 讀ADC0804子程序
- //*************************************************
- unsigned char adc0804( void )
- { uchar dat,i;
- R_D=1;
- W_R=1;
- INTad=1; //讀ADC0804 前準(zhǔn)備
- P2=0xff; //P2全部置一準(zhǔn)備
- CS=0;
- W_R=0;
- W_R=1; //啟動(dòng)ADC0804開始測電壓
- while(INT1==1); //查詢等待A/D轉(zhuǎn)換完畢產(chǎn)生的INT信號(hào)
- R_D=0; //開始讀轉(zhuǎn)換后數(shù)據(jù)
- i=i; //無意義語句,用于延時(shí)等待ADC0804 讀數(shù)完畢
- dat=P2; //讀出的數(shù)據(jù)賦與addate
- R_D=1;
- CS=1; //讀數(shù)完畢
- return(dat); //返回最后讀出的數(shù)據(jù)
- }
- //*************************************************
- //方波發(fā)生函數(shù)
- //*************************************************
- void square()
- {
- uchar a,b;
- for(a=0;a<127;a++)
- {
- P0=0xff;
- P2=0xff;
- b=adc0804();
- b=~b;
- while(b--); //調(diào)節(jié)相位,b的變化越大,相位變化越小
- }
- for(a=0;a<127;a++)
- {
- P0=0;
- P2=0xff;
- b=adc0804();
- b=~b;
- while(b--);
- }
- }
- //*************************************************
- //鋸齒波發(fā)生函數(shù)
- //*************************************************
- void sawtooth()
- {
- uchar a,b;
- for(a=0;a<255;a++)
- {
- P0=a;
- P2=0xff;
- b=adc0804();
- b=~b;
- while(b--);
- }
- }
- //*************************************************
- // 三角波發(fā)生函數(shù)
- //*************************************************
- void triang()
- {
- uchar a,b;
- for(a=0;a<254;a=a+2)
- {
- P0=a;
- P2=0xff;
- b=adc0804();
- b=~b;
- while(b--);
- }
- for(a;a>1;a=a-2)
- {
- P0=a;
- P2=0xff;
- b=adc0804();
- b=~b;
- while(b--);
- }
- }
- //*************************************************
- //正弦波發(fā)生函數(shù)
- //*************************************************
- void sinwave()
- {
- uchar a,b;
- for(a=0;a<92;a++)
- {
- P0=sin_tab[a];
- P2=0xff;
- b=adc0804();
- b=~b;
- while(b--);
- }
- for(a=a-1;a>0;a--)
- {
- P0=sin_tab[a];
- P2=0xff;
- b=adc0804();
- b=~b;
- while(b--);
- }
- }
- //*************************************************
- //主函數(shù)
- //*************************************************
- void main()
- {
- P1=0xff;
- P2=0xff;
- P3=0xff;
- while(1)
- {
- P0=0;
- if(SQU_K==0)
- {
- SQU_L=0;
- square();
- }
- SQU_L=1;
- if(SAW_K==0)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
6.1.rar
(89.09 KB, 下載次數(shù): 33)
2018-1-17 10:53 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|