标题: 单片机+DAC0832数字信号发生器仿真及源程序 [打印本页]

作者: 51黑ff    时间: 2016-9-27 16:25
标题: 单片机+DAC0832数字信号发生器仿真及源程序
这个数字信号发生器的数模转换部分是使用的dac0832芯片.下面是原理图:


源程序:
  1. #include<reg51.h>
  2. #include<absacc.h>
  3. #define DAC0832 XBYTE[0x7fff]
  4. #define ADC0808 XBYTE[0xfeff]
  5. sbit s0=P1^0;
  6. sbit s1=P1^1;
  7. sbit s2=P1^2;
  8. sbit s3=P1^3;
  9. unsigned int i;
  10. unsigned int x=0;
  11. unsigned char freq;
  12. int code table[]=
  13. {
  14. 100,102,104,107,109,112,114,117,119,121,
  15. 124,126,129,131,133,135,138,140,
  16. 142,144,147,149,151,153,155,157,
  17. 159,161,163,165,167,168,170,172,
  18. 174,175,177,178,180,181,183,184,
  19. 185,187,188,189,190,191,192,193,
  20. 194,194,195,196,197,197,198,198,
  21. 198,199,199,199,199,199,200,199,
  22. 199,199,199,199,198,198,198,197,
  23. 197,196,195,194,194,193,192,191,
  24. 190,189,188,187,185,184,183,181,
  25. 180,178,177,175,174,172,170,168,
  26. 167,165,163,161,159,157,155,153,
  27. 151,149,147,144,142,140,138,135,
  28. 133,131,129,126,124,121,119,117,
  29. 114,112,109,107,104,102,100,97,
  30. 95,92,90,87,85,82,80,78,75,
  31. 73,70,68,66,64,61,59,57,55,
  32. 52,50,48,46,44,42,40,38,36,
  33. 34,32,31,29,27,25,24,22,21,
  34. 19,18,16,15,14,12,11,10,9,
  35. 8,7,6,5,5,4,3,2,2,1,
  36. 1,1,0,0,0,0,0,0,0,0,
  37. 0,0,1,1,1,2,2,3,4,5,
  38. 5,6,7,8,9,10,11,12,14,
  39. 15,16,18,19,21,22,24,25,27,
  40. 29,31,32,34,36,38,40,42,44,
  41. 46,48,50,52,55,57,59,61,64,
  42. 66,68,70,73,75,78,80,82,85,
  43. 87,90,92,95,97,100
  44. }; //正弦波形表               
  45. void sin()
  46. {

  47. while(s0==0)
  48. {
  49. ADC0808=0;
  50. for(i=0;i<freq+1;i++)
  51. DAC0832=table[x];
  52. x++;
  53. if(x>255)x=0;
  54. }
  55. }
  56. void jvchi()
  57. {
  58. while(s1==0)
  59. {
  60. ADC0808=0;
  61. for(i=0;i<freq+1;i++)
  62. DAC0832=x;
  63. x++;
  64. if(x>255)x=0;
  65. }
  66. }
  67. void triangle()
  68. {
  69. while(s2==0)
  70. {
  71. ADC0808=0;
  72. for(i=0;i<freq+1;i++)
  73. {
  74. if(x<256)
  75. DAC0832=x;
  76. else DAC0832=512-x;
  77. }
  78. x++;
  79. if(x>511)x=0;
  80. }
  81. }
  82. void fangbo()
  83. {
  84. while(s3==0)
  85. {
  86. ADC0808=0;
  87. for(i=0;i<freq+1;i++)
  88. {
  89. if(x<256)
  90. DAC0832=0xff;
  91. else DAC0832=0;
  92. }
  93. x++;
  94. if(x>511)x=0;
  95. }
  96. }
  97. void main()
  98. {
  99. IE=0X81;
  100. ADC0808=0;
  101. sin();
  102. jvchi();
  103. triangle();
  104. fangbo();
  105. }
  106. extern0()interrupt 0
  107. {
  108. freq=ADC0808;
  109. }
复制代码


所有资料下载:
数字信号发生器.zip (26.48 KB, 下载次数: 108)



作者: 亘黑鹿    时间: 2016-10-31 23:02
可以可以 很feel!!!请问 你是如何完成的??都看了什么书??
作者: a550771322    时间: 2016-11-3 17:05
起码程序没问题!!!  一会用用试试
作者: peiwei20116    时间: 2016-12-2 18:44
正弦波很好,没有问题。。。
作者: qzm    时间: 2017-6-11 17:41
找了好多不合适,希望这个可以
作者: Andyove    时间: 2017-6-22 11:06
看了好多都不合适,总算在这找到了,看起来不错,但怎么下载
作者: 奔向你    时间: 2017-11-2 09:14
好好好
作者: likailikai    时间: 2018-3-2 08:46
图片有点模糊
作者: 请输入用户名    时间: 2018-3-2 10:03
下载了不太会用
作者: feuwudewu    时间: 2023-6-10 21:42
你好,想问下输出的是那几种波形呀
作者: 元元元。。。    时间: 2023-6-12 17:22
会使用LCD或数码管显示频率吗




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1