仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (274.99 KB, 下載次數: 73)
下載附件
2021-10-31 00:42 上傳
7{{TH[32NC_GY]F}JW17`IW.png (26.35 KB, 下載次數: 77)
下載附件
2021-10-31 00:34 上傳
51hei.png (97.97 KB, 下載次數: 75)
下載附件
2021-10-31 00:41 上傳
64PDA@AV_OE258C{VEZYHX6.png (76.23 KB, 下載次數: 75)
下載附件
2021-10-31 00:35 上傳
單片機源程序如下:
- #include<reg51.h> //51頭文件
- #define uchar unsigned char
- #define uint unsigned int
- sbit s1=P3^2;
- sbit s2=P3^3;
- uchar k=0,p=0,delay=0;
- uchar bxxz=0;pinglv=0;
- uchar a=1,b=0,c=0,d=0;
- //正弦波數據
- uchar code sin[64]={
- 135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,
- 146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128
- };
- //方波數據報表
- uchar code juxing[64]={
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- };
- //鋸齒波數據
- uchar code juchi[64]={
- 0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,130,134,138,142,
- 146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,239,243,247,251,255
- };
- //三角波數據
- uchar code sanjiao[64]={
- 0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,
- 248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0
- };
- void delay1() //延時 ms級
- {
- int a,b;
- for(a=1;a>0;a--)
- for(b=122;b>0;b--);
- }
- void int0() interrupt 0 //外部中斷0 P3.2 中斷處理,用于波形切換
- {
- EX0=0;
- delay1();
- if(s1==0)
- {
- bxxz++;
- if(bxxz==4)
- bxxz=0;
- switch(bxxz)
- {
- case 0 :
- {a=1,b=0,c=0,d=0;} //正弦波
- break;
- case 1 :
- {a=0,b=1,c=0,d=0;} //方波
- break;
- case 2 :
- {a=0,b=0,c=1,d=0;} //鋸齒波
- break;
- case 3 :
- {a=0,b=0,c=0,d=1;} //三角波
- break;
- }
- delay1();
- while(!s1);
- }
- while(!s1);
- EX0=1;
- }
- void int1() interrupt 2 //外部中斷1 P3.3 中斷處理,用于頻率調節
- {
- EX1=0;
- delay1();
- if(s2==0){
- p++;
- if(p==8)
- p=0;
- switch(p)
- {
- case 1 :
- pinglv=4; //400Hz
- break;
- case 2 :
- pinglv=8; //250Hz
- break;
- case 3 :
- pinglv=16; //140Hz
- break;
- case 4 :
- pinglv=32; //75Hz
- break;
- case 5 :
- pinglv=64; //40Hz
- break;
- case 6 :
- pinglv=125; //20Hz
- break;
- case 7 :
- pinglv=255; //10Hz
- break;
- default :
- pinglv=0; //1000Hz
- break;
- }
- delay1();
- while(!s2);
- }
- while(!s2);
- EX1=1; //開中斷
- }
- void main()
- {
- EA=1;
- IT0=1;
- EX0=1;
- IT1=1;
- EX1=1;
- pinglv=15;
- while(1)
- {
-
- while(a) //產生正弦波
- {
- delay=pinglv; //獲取周期數據
- P2=sin[k]; //數據數P2口進行波形轉換
- k++;
- if(k==64) //一個周期取64點波數據
- k=0;
- while(delay) //延時處理
- delay--;
- }
- while(b) //產生方波
- {
- delay=pinglv;
- P2=juxing[k];
- k++;
- if(k==64)
- k=0;
- while(delay)
- delay--;
- }
- while(c) //產生鋸齒波
- {
- delay=pinglv;
- P2=juchi[k];
- k++;
- if(k==64)
- k=0;
- while(delay)
- delay--;
- }
- while(d) //產生三角波
- {
- delay=pinglv;
- P2=sanjiao[k];
- k++;
- if(k==64)
- k=0;
- while(delay)
- delay--;
- }
- }
- }
復制代碼
所有資料51hei附件下載:
資料.7z
(94.29 KB, 下載次數: 50)
2021-10-31 00:45 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|