1、单片机电子琴程序+详细注解#include#include #include#includesbit lie0=P23;sbit lie1=P22;sbit lie2=P21;sbit lie3=P20;sbit PWM1=P26;unsigned char temp;unsigned char key;unsigned char STH0,STL0;unsigned char jishi=0;unsigned char n=0; /n为节拍常数变量 unsigned char a7=00,59,19,3,4,8,10; /设置时间的初始值unsigned char b7; /将所更新的时间放
2、入数组b中/*1s延时程序*/void delay1s(void)unsigned char i,k;for(k=100;k0;k-)for(i=100;i0;i-);/*/*定时器0中断*/void TIMER0(void) interrupt 1 TH0=STH0; TL0=STL0; PWM1=PWM1; /*/*定时器1中断*/void int0() interrupt 3 /采用中断3 控制节拍 节拍延时 TH1=0xd8; TL1=0xef; n-; /*/*频率延时程序*/void delay (unsigned char m) /控制频率延时 unsigned i=3*m; w
3、hile(-i); /*/*毫秒延时子程序*/ void delayms(unsigned char a) while(-a); /采用while(-a) 不要采用while(a-); /*/*设置1-8曲调值*/unsigned int code tab=0xfc43,0xfd08,0,0,0xfd20,0xfd32,0,0,0xfd81,0xfdc7,0,0,0xfe05,0xfe21,0,0,;/*/*以下对应数码管0-f*/ unsigned char code table=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x11,0
4、xc1,0x63,0x85,0x61,0x71,0xff;/*/*第一首音乐老男孩*/unsigned char code music_tab_1= /*1*/0x20,0x20,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x20,0x24,0x20,0x26,0x20,0x1c,0x20,0x19,0x20,0x18,0x10,0x19,0x10,0x20,0x30,0x01,0x20,0x20,0x10,0x20,0x10,0x1c,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,
5、0x26,0x20,0x20,0x20,0x01,0x20,0x20,0x20,0x24,0x20,0x20,0x20,0x26,0x10,0x2b,0x20,0x30,0x10,0x2b,0x60,/*2*/0x20,0x20,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x20,0x24,0x20,0x26,0x20,0x1c,0x20,0x19,0x20,0x18,0x10,0x19,0x10,0x20,0x30,0x01,0x20,0x20,0x10,0x20,0x10,0x1c,0x20,0x30,
6、0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x01,0x20,0x20,0x20,0x24,0x20,0x20,0x20,0x26,0x10,0x2b,0x20,0x30,0x10,0x2b,0x60,/11767112377550x30,0x40,0x18,0x20,0x19,0x20,0x1c,0x20,0x19,0x10,0x18,0x10,0x18,0x20,0x2b,0x20,0x13,0x20,0x19,0x20,0x19,0x20,0x20,0x10,0x20,0x10,/632211170x1c,0x20,0x13,0x10,0x
7、15,0x10,0x15,0x20,0x18,0x20,0x18,0x40,0x18,0x20,0x19,0x20,/67112377550x1c,0x20,0x19,0x10,0x18,0x10,0x18,0x20,0x15,0x20,0x13,0x20,0x19,0x20,0x19,0x20,0x20,0x10,0x20,0x10,/6322110x1c,0x20,0x13,0x10,0x15,0x10,0x15,0x20,0x18,0x20,0x18,0x60,/000000x01,0x40,0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x60,/1155555
8、 5777550x18,0x10,0x18,0x10,0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x20,0x10,0x20,0x19,0x10,0x19,0x10,0x19,0x20,0x20,0x10,0x20,0x10,/555565111120x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x0e,0x20,0x10,0x20,0x18,0x10,0x18,0x10,0x18,0x20,0x18,0x10,0x15,0x10, /32443324430x13,0x20,0x15,0x10,0x12,0x10
9、,0x12,0x20,0x13,0x20,0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,/324430x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,/55110x10,0x40,0x10,0x20,0x18,0x10,0x18,0x10,/555555777550x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x20,0x10,0x20,0x19,0x10,0x19,0x10,0x19,0x20,0x20,0x10,0x20,0x10,/55556
10、5111120x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x0e,0x20,0x10,0x20,0x18,0x10,0x18,0x10,0x18,0x20,0x18,0x10,0x15,0x10,/32443321710x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,0x13,0x20,0x15,0x10,0x18,0x10,0x18,0x20,0x19,0x10,0x18,0x60,0x01,0x40,0x01,0x40, /第二次 /*3*/0x20,0x20,0x20,0x10,0x20,0x10,0x
11、20,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x20,0x24,0x20,0x26,0x20,0x1c,0x20,0x19,0x20,0x18,0x10,0x19,0x10,0x20,0x30,0x01,0x20,0x20,0x10,0x20,0x10,0x1c,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x01,0x20,0x20,0x20,0x24,0x20,0x20,0x20,0x26,0x10,0x2b,0x20,0x30,0x10,0x2b,0x60,/*4*/0x20,0x
12、20,0x20,0x10,0x20,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x20,0x24,0x20,0x26,0x20,0x1c,0x20,0x19,0x20,0x18,0x10,0x19,0x10,0x20,0x30,0x01,0x20,0x20,0x10,0x20,0x10,0x1c,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x01,0x20,0x20,0x20,0x24,0x20,0x20,0x20,0x26,0x10,0x2b,0x20,0x30,0x
13、10,0x2b,0x60,/11767112377550x30,0x40,0x18,0x20,0x19,0x20,0x1c,0x20,0x19,0x10,0x18,0x10,0x18,0x20,0x2b,0x20,0x13,0x20,0x19,0x20,0x19,0x20,0x20,0x10,0x20,0x10,/632211170x1c,0x20,0x13,0x10,0x15,0x10,0x15,0x20,0x18,0x20,0x18,0x40,0x18,0x20,0x19,0x20,/67112377550x1c,0x20,0x19,0x10,0x18,0x10,0x18,0x20,0x1
14、5,0x20,0x13,0x20,0x19,0x20,0x19,0x20,0x20,0x10,0x20,0x10,/6322110x1c,0x20,0x13,0x10,0x15,0x10,0x15,0x20,0x18,0x20,0x18,0x60,/335350x01,0x40,0x01,0x40,0x01,0x40,0x01,0x40,0x01,0x60,/1155555 5777550x18,0x10,0x18,0x10,0x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x20,0x10,0x20,0x19,0x10,0x19,0x10,0x19,
15、0x20,0x20,0x10,0x20,0x10,/555565111120x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x0e,0x20,0x10,0x20,0x18,0x10,0x18,0x10,0x18,0x20,0x18,0x10,0x15,0x10, /32443324430x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,0x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,/324430x13,0x20,0x15,0x10,0x12,0x10,0x12,
16、0x20,0x13,0x20,/55110x10,0x40,0x10,0x20,0x18,0x10,0x18,0x10,/555555777550x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x10,0x20,0x10,0x20,0x19,0x10,0x19,0x10,0x19,0x20,0x20,0x10,0x20,0x10, /555565111120x10,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x0e,0x20,0x10,0x20,0x18,0x10,0x18,0x10,0x18,0x20,0x18,0x10,0x15,
17、0x10,/32443321710x13,0x20,0x15,0x10,0x12,0x10,0x12,0x20,0x13,0x20,0x13,0x20,0x15,0x10,0x18,0x10,0x18,0x20,0x19,0x10,0x18,0x60,0x01,0x40,0x01,0x40,/结尾/3217121334233420x13,0x20,0x15,0x20,0x18,0x30,0x19,0x10,0x18,0x10,0x15,0x10,0x18,0x40,0x13,0x40,0x13,0x40,0x12,0x40,0x15,0x40, 0x01,0x40,0x01,0x40,0x01
18、,0x40,0x01,0x40,0x01,0x60,0x00 ; /*/*第二首音乐机器猫*/unsigned char code music_tab_2=0x40,0x20,0x39,0x10,0x30,0x20,0x26, 0x10,0x1c, 0x20,0x26, 0x20,0x20, 0x40,0x20,0x20,0x1c,0x10,0x20, 0x20,0x26, 0x10,0x24, 0x20,0x26, 0x10,0x2b ,0x40,0x39, 0x20,0x2b, 0x10,0x2b ,0x20,0x24,0x10,0x19 ,0x20,0x19 ,0x10,0x1c ,0x
19、20,0x20,0x10,0x24,0x40,0x24, 0x20,0x26, 0x20,0x39, 0x40,0x33,0x40,0x30,0x40,0x2b ,0x40,0x40, 0x20,0x39 ,0x10,0x30, 0x20,0x26, 0x10,0x1c, 0x20,0x26 ,0x20,0x20 ,0x40,0x20, 0x20,0x1c, 0x10,0x20,0x20,0x26, 0x10,0x24,0x20,0x26, 0x10,0x2b, 0x40,0x39, 0x20,0x2b, 0x10,0x2b,0x20,0x24, 0x10,0x19 ,0x20,0x19, 0
20、x10,0x1c ,0x20,0x20, 0x10,0x24, 0x40,0x24, 0x20,0x26, 0x20,0x33,0x40,0x2b,0x40,0x30, 0x40,0x1c, 0x40,0x1c, 0x20,0x20, 0x20,0x24, 0x20,0x20, 0x10,0x1c, 0x10,0x20, 0x40,0x2b, 0x20,0x26, 0x10,0x24 ,0x20,0x2b, 0x10,0x20, 0x40,0x1c ,0x40,0x20 ,0x40,0x24, 0x40,0x2b, 0x40,0x19, 0x20,0x1c, 0x10,0x20, 0x20,0
21、x1c, 0x10,0x20, 0x20,0x24, 0x20,0x20 ,0x20,0x1c, 0x20,0x26, 0x40,0x2b, 0x20,0x30 ,0x40,0xff; /*/*以下为主函数部分*/void main(void) unsigned char p,m; /m为频率常数变量 unsigned char i=0; TMOD=0x11; /设置定时器模式 都为模式1 IE=0x8a; /中断使能 TH1=0xd8; TL1=0xef; P2=0xa0; P3=0x0f; I2CCON=0xE8; SetTime(a); /设置时间 SwitchRTC(1); LCDIn
22、itialize(); /液晶初始化while(1) P1=0xf0;P2=0xbf;lie0=0; /扫描第一列 以下以此类推temp=P1;temp=temp & 0x0f;if (temp!=0x0f) delay1s(); /去键盘抖动 temp=P1; temp=temp & 0x0f; if(temp!=0x0f) temp=P1; temp=temp & 0x0f; switch (temp) case 0x0e: key=0; break; case 0x0d: key=4; break; case 0x0b: key=8; break; case 0x07: key=12;
23、break; P0=tablekey; STH0=tabkey/256; STL0=tabkey%256; TR0=1; temp=temp&0x0f; while(temp!=0x0f) temp=P1; temp=temp&0x0f; TR0=0; P1=0xf0;P2=0xbf;lie1=0;temp=P1;temp=temp & 0x0f;if (temp!=0x0f) delay1s(); temp=P1; temp=temp & 0x0f; if (temp!=0x0f) temp=P1; temp=temp & 0x0f; switch(temp) case 0x0e: key=
24、1; break; case 0x0d: key=5; break; case 0x0b: key=9; break; case 0x07: key=13; break; P0=tablekey; STH0=tabkey/256; STL0=tabkey%256; TR0=1; temp=temp&0x0f; while(temp!=0x0f) temp=P1; temp=temp&0x0f; TR0=0; P1=0xf0;P2=0xbf;lie2=0;temp=P1;temp=temp & 0x0f;if (temp!=0x0f) delay1s(); temp=P1; temp=temp
25、& 0x0f; if (temp!=0x0f) temp=P1; temp=temp & 0x0f; switch(temp) case 0x0e: key=2; break; case 0x0d: key=6; break; case 0x0b: key=10; break; case 0x07: key=14; break; P0=tablekey; P1=0xf0;P2=0xbf;lie3=0;temp=P1;temp=temp & 0x0f;if (temp!=0x0f) delay1s(); temp=P1; temp=temp & 0x0f; if (temp!=0x0f) tem
26、p=P1; temp=temp & 0x0f; switch(temp) case 0x0e: key=3; break; case 0x0d: key=7; break; case 0x0b: key=11; break; case 0x07: key=15; break; P0=tablekey; switch(key) case 0,4,8,12,1,5,9,13,8,7,10,11,15:break; case 2: play_1: a_1: p=music_tab_1i; if(p=0x00) i=0, delayms(1000); goto play_1; /如果碰到结束符,延时1秒,回到开始再来一遍 else if(p=0xff) i=i+1;delayms(100),TR1=0; goto a_1; /若碰到休止符,延时100ms,继续取下一音符 else m=music_tab_1i+, n=music_tab_1i+; /取频率常数 和 节拍常数 TR1=1; /开定时器1 while(n!=0) PWM1=PWM1,delay(m); /等待节
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1