本設計可產生正弦波、三角波、矩形波。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:- #include<reg51.h>
- #include<absacc.h>
- #define DAC0832 XBYTE[0x7fff]
- sbit a=P3^0;
- sbit b=P3^1;
- sbit c=P3^2;
- sbit e=P3^3;
- unsigned char 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
- };
- unsigned char 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 delay(unsigned int x)
- {
- unsigned char i;
- while(x--)
- for(i=0;i<=140;i++);
- }
- void square(void)
- {
- unsigned char i;
- for(i=0;i<64;i++)
- DAC0832=juxing[i];
- /* for(i=0;i<255;i++)
- DAC0832=0xff;
- */
- }
- void sanjiaobo()
- {
- unsigned char i;
- for(i=0;i<64;i++)
- {
- DAC0832=sanjiao[i];
- }
- // for(i=255;i>0;i--)
- // {
- // DAC0832=i;
- // }
- }
- void juchibo()
- {
- int i;
- unsigned char 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
- };//??????
- for(i=0;i<64;i++)
- {
- DAC0832=sin[i];
- }
- }
- void main(void)
- {
- e=0; //???E1?????
- while(1)
- {
- switch(P1)
- {
- case 0xfe:
- delay(10);
- while(P1==0XFF)
- {square();}break;
- case 0xfd:
- delay(10);
- while(P1==0XFF)
- {sanjiaobo();} break;
- case 0xfb:
- delay(10);
- while(P1==0XFF)
- {juchibo();}break;
- default:break;
- }
- }
- }
復制代碼 仿真程序51hei下載地址:
諧波發生器.zip
(57.95 KB, 下載次數: 47)
2020-12-22 10:12 上傳
點擊文件名下載附件
|