51单片机电子琴设计C语言设计实例Word格式文档下载.docx

上传人:b****5 文档编号:16634031 上传时间:2022-11-25 格式:DOCX 页数:9 大小:15.96KB
下载 相关 举报
51单片机电子琴设计C语言设计实例Word格式文档下载.docx_第1页
第1页 / 共9页
51单片机电子琴设计C语言设计实例Word格式文档下载.docx_第2页
第2页 / 共9页
51单片机电子琴设计C语言设计实例Word格式文档下载.docx_第3页
第3页 / 共9页
51单片机电子琴设计C语言设计实例Word格式文档下载.docx_第4页
第4页 / 共9页
51单片机电子琴设计C语言设计实例Word格式文档下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

51单片机电子琴设计C语言设计实例Word格式文档下载.docx

《51单片机电子琴设计C语言设计实例Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《51单片机电子琴设计C语言设计实例Word格式文档下载.docx(9页珍藏版)》请在冰豆网上搜索。

51单片机电子琴设计C语言设计实例Word格式文档下载.docx

ucharcodefreq[36*2]={

0xA9,0xEF,//00220HZ,1//0

0x93,0xF0,//00233HZ,1#

0x73,0xF1,//00247HZ,2

0x49,0xF2,//00262HZ,2#

0x07,0xF3,//00277HZ,3

0xC8,0xF3,//00294HZ,4

0x73,0xF4,//00311HZ,4#

0x1E,0xF5,//00330HZ,5

0xB6,0xF5,//00349HZ,5#

0x4C,0xF6,//00370HZ,6

0xD7,0xF6,//00392HZ,6#

0x5A,0xF7,//00415HZ,7

0xD8,0xF7,//00440HZ1//12

0x4D,0xF8,//00466HZ1#//13

0xBD,0xF8,//00494HZ2//14

0x24,0xF9,//00523HZ2#//15

0x87,0xF9,//00554HZ3//16

0xE4,0xF9,//00587HZ4//17

0x3D,0xFA,//00622HZ4#//18

0x90,0xFA,//00659HZ5//19

0xDE,0xFA,//00698HZ5#//20

0x29,0xFB,//00740HZ6//21

0x6F,0xFB,//00784HZ6#//22

0xB1,0xFB,//00831HZ7//23

0xEF,0xFB,//00880HZ`1

0x2A,0xFC,//00932HZ`1#

0x62,0xFC,//00988HZ`2

0x95,0xFC,//01046HZ`2#

0xC7,0xFC,//01109HZ`3

0xF6,0xFC,//01175HZ`4

0x22,0xFD,//01244HZ`4#

0x4B,0xFD,//01318HZ`5

0x73,0xFD,//01397HZ`5#

0x98,0xFD,//01480HZ`6

0xBB,0xFD,//01568HZ`6#

0xDC,0xFD,//01661HZ`7//35

};

//定时中断0,用于产生唱歌频率

timer0()interrupt1

{

TL0=tl0_f;

TH0=th0_f;

//调入预定时值

BEEP=~BEEP;

//取反音乐输出IO

}

//按键控制音阶声音输出(电子琴)

voidmain(void)//主程序

ulongn;

ucharcodejie8[8]={12,14,16,17,19,21,23,24};

//`1八个音符在频率表中的位置

TMOD=0x01;

//使用定时器0的16位工作模式

TR0=0;

ET0=1;

EA=1;

while

(1)

if(!

K1)

tl0_f=freq[jie8[0]*2];

//置一个音符的值

th0_f=freq[jie8[0]*2+1];

TR0=1;

for(n=0;

n<

10000;

n++);

//延时

K2)

tl0_f=freq[jie8[1]*2];

th0_f=freq[jie8[1]*2+1];

K3)

tl0_f=freq[jie8[2]*2];

th0_f=freq[jie8[2]*2+1];

K4)

tl0_f=freq[jie8[3]*2];

th0_f=freq[jie8[3]*2+1];

/*******************************新的好用的电子琴*************************/

#include<

intrins.h>

absacc.h>

#defineucharunsignedchar

//#defineucharunsignedchar//定义一下方便使用

#defineulongunsignedlong

sbitBEEP=P3^0;

ucharrr;

uchark;

ucharkeydata;

//定时中断0,用于产生唱歌频率

voidkey_scan(void);

//键盘函数定义段;

ucharkey_tab(uchark);

voiddelay(void);

voidkey_in(uchark);

codeunsignedcharledmap[]={0x3F,0x06,0x5B,0x4F,0x66,

0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x00};

//8段显示

//---------------------------------------------------------------

voidmain(void)

{//ulongn;

ucharcodejie8[8]={12,14,16,17,19,21,23,24};

TMOD=0x01;

TR0=0;

ET0=1;

EA=1;

while

(1)

{P2=0x00;

key_scan();

tl0_f=freq[jie8[keydata]*2];

th0_f=freq[jie8[keydata]*2+1];

TR0=1;

//延时

P0=ledmap[keydata];

}

}//---------------------------------------------------------------------------------------------

voidkey_scan(void)

{ucharsccode,recode,i;

P1=0xf0;

if((P1&

0xf0)!

=0xf0)

{

delay();

0xf0)!

sccode=0xfe;

for(i=0;

i<

4;

i++)

P1=sccode;

recode=(P1&

0xf0)|0x0f;

k=(~recode)+(~sccode);

rr=P1;

key_in(k);

break;

else

sccode=(sccode<

<

1)|0x01;

//do{ta=P2;

}while(ta==rr);

}

voiddelay()//去抖动

{inta=2500;

while(--a);

voidkey_in(uchark)

{ucharta;

//ucharkeydata;

do{ta=P1;

keydata=key_tab(k);

//-------------------------------------------------------------

ucharkey_tab(uchark)

{ucharkb;

switch(k)

{case0x11:

kb=0x0c;

break;

case0x21:

kb=0x0d;

case0x41:

kb=0x0e;

case0x81:

kb=0x0f;

case0x12:

kb=0x08;

case0x22:

kb=0x09;

case0x42:

kb=0x0a;

case0x82:

kb=0x0b;

case0x14:

kb=0x04;

case0x24:

kb=0x05;

case0x44:

kb=0x06;

case0x84:

kb=0x07;

case0x18:

kb=0x00;

case0x28:

kb=0x01;

case0x48:

kb=0x02;

case0x88:

kb=0x03;

default:

returnkb;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 中医中药

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1