您好,欢迎来到飒榕旅游知识分享网。
搜索
您的当前位置:首页51单片机触摸电子琴

51单片机触摸电子琴

来源:飒榕旅游知识分享网
基于51单片机的简易触摸电子琴制作

(ATS51 52)

实物照片:

触摸功能是通过一颗三极管实现的,本来用两颗组成达林顿复合管,后来实验一个三极管就OK了。

20个*(NPN型三极管,我用9013,基极接360K的电阻到

触摸金属,集电极接I/o口,发射极接地,就是电源负极)。

电路背面照片:(有点乱。。。。。呵呵。。。。)

该电子琴可外插音响放大效果,耳机的话声音会有点大。。。

电路图简单就不给出来:

P1,P2口全用上,P3口用了4个(程序中其实可以五个)。音频输出P0.0,最好加上上拉电阻。

源代码如下:

已编译成功!电子琴长按发声会有点停顿感,不过感觉特殊效果还不错,毕竟不是什么专业的设计,个人小程序!望大

家指教!

/*******晶振12M 11.0592M都可以******/ #include \"reg51.h\" #define uchar unsigned char #define uint unsigned int sbit beep=P0^0; uchar love=0;

/************************************************8****9****10***11***12***13***14***15***16***17***18***19***20***21***********/

/*************1.***2.***3.***4.***5.***6.***7.***1****2****3****4****5****6****7****1'***2'***3'***4'***5'***6'***7'********************************/ uchar

th0[]={0xf8,0xf9,0xfa,0xfa,0xfb,0xfb,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff, //相应频率所对应的的定时器初值TH0。 }; uchar

tl0[]={0x8c,0x5b,0x15,0x67,0x04,0x90,0x0c,0x44,0xac,0x09,0x34,0x82,0xc8,0x06,0x22,0x56,0x85,0x9a,0xc1,0xe4,0x03,

//相应频率所对应的的定时器初值TL0。 };

void init();

//初始化

//ms*延时

void delay(uint ms); main() {

init(); //初始化 P1=0xff; P2=0xff; P3=0xff; while(1) {

if(P1!=0xff) { switch(P1)

//主程序

{ case 0xfe: love=0;break;

case 0xfd: love=1;break; case 0xfb: love=2;break; case 0xf7: love=3;break; case 0xef: love=4;break; case 0xdf: love=5;break;

}

}

case 0xbf: love=6;break; case 0x7f: love=7;break; default:break;

TR0=1; delay(100); TR0=0; beep=1;

if(P2!=0xff) { switch(P2)

{ case 0xfe: love=8;break; } TR0=1;

case 0xfd: love=9;break; case 0xfb: love=10;break; case 0xf7: love=11;break; case 0xef: love=12;break; case 0xdf: love=13;break; case 0xbf: love=14;break; case 0x7f: love=15;break; default:break;

}

delay(100); TR0=0; beep=1;

if(P3!=0xff) { switch(P3) }

{ case 0xfe: love=16;break; } TR0=1; delay(100); TR0=0; beep=1;

case 0xfd: love=17;break; case 0xfb: love=18;break; case 0xf7: love=19;break; case 0xef: love=20;break; case 0xdf: love=21;break; case 0xbf: love=22;break; case 0x7f: love=23;break; default:break;

}

}

void time0()interrupt 1 { TH0=th0[love]; } void init()

//初始化

TL0=tl0[love]; beep=!beep;

//中断处理产生声音

{ TMOD=0x01; } EA=1; ET0=1;

//定时器T0 方式1

void delay(uint ms) { uint i,j;

for(i=0;i<120;i++)

//ms*延时

}

for(j=0;j

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务