为了节约钱竟自己DIY信号发生器?

电子说

1.2w人已加入

描述

搞DIY,有一台信号源是很有必要的。奈何买商品化的仪器,价格不菲,所以很有必要自己做一个性价比很高的信号发生器。

能发出-2.5V~+2.5V,可调偏置输出0.6-5V。1HZ-10MHZ的信号,但是3M以后波形变形了,实际范围只有1hz-3Mhz。板子直接拿6块一模一样的拼成一个正方体就当壳子了。

过程省略,下面是原理图和源码,希望大家喜欢~

原理图       

信号发生器

信号发生器

主要源码段       

#include "anjian.h"#include "intrins.h" bit zisuo;u8 chufa;u8 zijia; u8 anjian19(void) //按键0-9{ unsigned char a=0; P3 &= 0xe3; //键盘初始:行值=0,列值=1 P3 |= 0xe0; //P3.234=0 p3.567=1 _nop_(); //缓冲,待IO端口电位稳定 a = P3&0xe0; //得到行标志 得到P3.567电位 P3 &= 0x1f; //翻转键盘接口输出 P3 |= 0x1c; //p3.234=1 p3.567=0 _nop_(); a |= (P3&0x1c); //列标志 + 行标志 return a>>2; //返回键值 返回 P3.234567} u8 anjian1015(void) //按键10-15{ unsigned char a=0; P1 &= 0xe7; //键盘初始:行值=0,列值=1 P1 |= 0xe0; //P1.34=0 p1.567=1 _nop_(); //缓冲,待IO端口电位稳定 a = P1&0xe0; //得到行标志 得到P1.567电位 P1 &= 0x1f; //翻转键盘接口输出 P1 |= 0x18; //p1.34=1 p1.567=0 _nop_(); a |= (P1&0x18); //列标志 + 行标志 return a>>3; //返回键值 返回 P1.34567} u8 anjian1617(void){ return P2&3;} void anjian(void){ u8 a=anjian19(); u8 b=anjian1015(); u8 c=anjian1617(); if(a==0x3f&&b==0x1f&&c==3) { zijia=0; zisuo=0; } else if(zisuo==0) { zijia++; if(zijia>duananjishi) { zijia=0; zisuo=1; switch(a) { case 0x36:chufa=1;break; case 0x35:chufa=2;break; case 0x33:chufa=3;break; case 0x2e:chufa=4;break; case 0x2d:chufa=5;break; case 0x2b:chufa=6;break; case 0x1e:chufa=7;break; case 0x1d:chufa=8;break; case 0x1b:chufa=9;break; default:break; } switch(c) { case 1:chufa=17;break; case 2:chufa=10;break; default:break; } switch(b).....................篇幅限制,仅展示部分代码..........

效果展示       

1)方波的显示效果:

2)三角波的显示效果:

3)正弦波sin的显示效果:

编辑:jq

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分