搞DIY,有一台信号源是很有必要的。奈何买商品化的仪器,价格不菲,所以很有必要自己做一个性价比很高的信号发生器。
能发出-2.5V~+2.5V,可调偏置输出0.6-5V。1HZ-10MHZ的信号,但是3M以后波形变形了,实际范围只有1hz-3Mhz。板子直接拿6块一模一样的拼成一个正方体就当壳子了。
过程省略,下面是原理图和源码,希望大家喜欢~
←左右滑动,查看代码→
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的显示效果: