基于51单片机+DAC0832的信号发生器
49 {
50 DATA=Per-*Count;
51 }
52 else if(*Count==Per)
53 {
54 delay(100);
55 }
56 }
4\Key.c文件:
1 #include "Key.h"
2 #include "delay.h"
3 sbit key2=P3^3; //wave Change
4 sbit key3=P3^4; //Fre plus
5 sbit key4=P3^5; //Fre subc
6 unsigned char Key_Model(unsigned char Model,unsigned int *Pre,unsigned int *Count)
7 {
8 if(key2==0)
9 {
10 delay(10);
11 if(key2==0)
12 {
13 Model=Model+1;
14 *Pre=256;
15 *Count=0;
16 }
17 }
18 while(key2==0);
19 if(Model>3)
20 {
21 Model=0;
22 }
23 return Model;
24 }
25 unsigned int Key_Plus(unsigned int Per)
26 {
27 if(key3==0)
28 {
29 delay(10);
30 if(key3==0)
31 {
32 Per=Per+8;
33 }
34 }
35 while(key3==0);
36 if(Per>256)
37 {
38 Per=0;
39 }
40 return Per;
41 }
42 unsigned int Key_Subc(unsigned int Per)
43 {
44 if(key4==0)
45 {
46 delay(10);
47 if(key4==0)
48 {
49 Per=Per-8;
50 }
51 }
52 while(key4==0);
53 if(Per<0)
54 {
55 Per=256;
56 }
57 return Per;
58 }
5\delay.c文件:
1 void delay(unsigned int r)
2 {
3 unsigned int i,j;
4 for(i=r;i>0;i--)
5 for(j=110;j>0;j--);
6 }
Header文件(.h文件):
1\init.h文件:
1 extern void init(void);
2\single.h文件:
1 void Square_wave(unsigned int Per,unsigned int *Count);
2 void Triangle_wave(unsigned int Per,unsigned int *Count);
3 void Sawtooth_wave(unsigned int Per,unsigned int *Count);
4 void Sin_wave(unsigned int Per,unsigned int *Count);
3\Key.h文件:
1 #include "reg52.h"
2 unsigned char Key_Model(unsigned char Model,unsigned int *Pre,unsigned int *Count);
3 unsigned int Key_Plus(unsigned int Per);
4 unsigned int Key_Subc(unsigned int Per);
4\delay.h文件:
1 #include
2 void delay(unsigned int r);
3 #define NOP() _nop_()
所用的工程文件我都已经上传喽~,下面来看看仿真的结果:(大家在电路设计的时候可以进行一下滤波处理,然后对信号进行放大处理,这样的话效果可能会更好点哦~)
方波: 三角波: 锯齿波: 梯形波:
在这里要感谢GISPALAB实验室的各位老师和学长学姐的帮助!谢谢~
大家注意下,电路有个小问题,由于本人的失误,DAC0832的Iout1和Iout2的输出接口的接法应该按如下的接入方式:
需要修改的地方有:
1、电源改成双电源
2、Iout接口需要接地
感谢GISPALAB实验室的老师和同学们的帮助和支持~
- 单片机驱动dac0832输出方波三角波正玄波程序(11-30)
- 用单片机+DAC0832来解码wav音乐C51程序(11-29)
- 51单片机C编程(十三 DAC0832锯齿波的产生)(11-27)
- 单片机与DAC0832采集数据(11-23)
- DAC0832锯齿波发生器(11-18)
- DAC0832产生三角波与正弦波(11-18)