- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如何利用STC89C52单片机做一个多种信号发生器
下面先贴上 仿真的电路图(仿真的软件是Protuse,上传一个大点的图,方便大家看的清楚点):
原件清单:STC89C52 单片机X1、 DAC0832 转换器X1、12M晶振X1、 电容22pfX2、10uf的电容X1、1nf陶瓷电容X1、独立按键X4、10千欧 排阻X1、10KΩ 电阻X5、LM358 单电源运放X1。仿真就需要这些原件,具体的 硬件设计大家定好了在制作~
下面上传一下C程序吧~(使用的IDE环境是 Keil 4,语言是 C语言)
Source文件(.c文件):
1\main.c文件:
1 #include “reg52.h”
2 #include “init.h”
3 #include “single.h”
4 #include “delay.h”
5 #include “Key.h”
6 int main(void)
7 {
8 unsigned char Model=0;//0-方波 1-三角波 2-锯齿波 3-正弦波
9 unsigned int Count=0;//计数器
10 unsigned int Squ_Per=256;
11 unsigned int Tri_Per=256;
12 unsigned int Saw_Per=256;
13 unsigned int Sin_Per=256;
14 init();
15 while(1)
16 {
17 while(Model==0)
18 {
19 Square_wave(Squ_Per,Count);
20 Count+=4;
21 Squ_Per=Key_Plus(Squ_Per);
22 Squ_Per=Key_ Subc(Squ_Per);
23 Model=Key_Model(Model,Squ_Per,Count);//每次退出当前while时记得复原Period和Count的数据
24 }
25 while(Model==1)
26 {
27 Triangle_wave(Tri_Per,Count);
28 Count+=4;
29 Tri_Per=Key_Plus(Tri_Per);
30 Tri_Per=Key_Subc(Tri_Per);
31 Model=Key_Model(Model,Tri_Per,Count);
32 }
33 while(Model==2)
34 {
35 Sawtooth_wave(Saw_Per,Count);
36 Count+=4;
37 Saw_Per=Key_Plus(Saw_Per);
38 Saw_Per=Key_Subc(Saw_Per);
39 Model=Key_Model(Model,Saw_Per,Count);
40 }
41 while(Model==3)
42 {
43 Sin_wave(Sin_Per,Count);
44 Count+=4;
45 Sin_Per=Key_Plus(Sin_Per);
46 Sin_Per=Key_Subc(Sin_Per);
47 Model=Key_Model(Model,Sin_Per,Count);
48 }
49 }
50 return 0;
51 }
2\init.c文件:
1 #include “reg52.h”
2 sbit CS_DAC=P1^5;//DAC0832的片选 端口
3 sbit WR_DAC=P1^6;//DAC0832的数据写入端口
4 ex tern void init(void)
5 {
6 P0=0xff;
7 P1=0xff;
8 P2=0xff;
9 P3=0xff;
10 CS_DAC=0;//一直片选中DAC0832,低电平有效啊~
11 WR_DAC=0;//一直写入数据到DAC0832
12 }
3\single.c文件
1 #include “reg52.h”
2 #include “single.h”
3 #include “delay.h”
4 #define DATA P0
5 void Square_wave(unsigned int Per,unsigned int *Count)
6 {
7 if(*Count》=Per) *Count=0;
8 if(*Count
9 {
10 DATA=0x00;
11 }
12 else
13 {
14 DATA=0xFF;
15 }
16 }
17 void Triangle_wave(unsigned int Per,unsigned int *Count)
18 {
19 if(*Count》=Per) *Cou
您可能关注的文档
最近下载
- 【龙岩物理试题】2023年龙岩市初三5月质检卷.pdf VIP
- Q_GDW 1894-2013 变压器铁心接地电流在线监测装置技术规范.PDF
- 在线网课学习课堂《积极心理学(上)厚德载物篇(清大 )》单元测试考核答案.docx
- 海氏工作评价法.doc VIP
- 广西壮族自治区柳州市2021-2022学年八年级下学期期末数学试题及答案.docx VIP
- 第二小学“县管校聘”工作实施方案.docx
- 医院加强信息化建设 提高信息化水平工作情况四篇.docx VIP
- 沉浸式剧本杀《祝福》公开课+课件+2024--2025学年高一语文统编版必修下册.pptx VIP
- 游乐园安全培训课件模板.pptx
- 中国画及作品赏析课件.pptx VIP
文档评论(0)