給51黑電子論壇的朋友們分享一個用51單片機做的模擬低頻DDS信號發生器系統,帶proteus仿真工程文件加單片機源程序.
下面是仿真原理圖:
0.png (29.45 KB, 下載次數: 57)
下載附件
2017-3-17 23:00 上傳
DDS信號發生器的部分單片機源程序:
- #include "sin_dds.h"
- uchar i,j;
- uint counter,step;
- /**************定時器0初始化**********************************/
- void Init_Timer0(void)
- {
- TMOD = (TMOD & 0XF0) | 0X01; //定時器0,方式1
- TH0 = 0xff; //定時器初值
- TL0 = 0xff;
- TR0 =1; //啟動定時器0
- ET0 =1; //開定時器0中斷
- }
- /*************************主函數*********************************/
- main()
- {
- Init_Timer0(); //定時器0初始化
- step=2; //數值采樣步數初始化
- EA = 1; //CPU開中斷
- while(1)
- {
- if(key_up == 0) if(step<4096) step++; //數值采樣步數加1,采樣頻率變高 ,正弦波周期變小
- if(key_dw == 0) if(step>1) step--; //數值采樣步數減1,采樣頻率變低 ,正弦波周期變大
- while((!key_up)||(!key_dw)); //若有一個鍵按下去,則正弦波周期始終保持不變
- }
- }
- /******************系統OS定時中斷服務***************************/
- void OS_Timer0(void) interrupt 1 using 2
- {
- TH0 = 0xff; //重裝定時器初值
- TL0 = 0xff;
- counter = counter + step; //counter以step的步數遞增
- dac1=type[(unsigned int)counter>>8]; //當counter加滿(256/step)次時,dac1的采樣值變化一次
- }
復制代碼
0.png (45.44 KB, 下載次數: 74)
下載附件
2017-3-17 23:02 上傳
全部資料下載(含仿真工程文件和完整代碼):
單片機模擬低頻DDS信號發生器系統.rar
(16.78 KB, 下載次數: 108)
2017-3-17 23:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|