- #include <reg51.h>
- #include <intrins.h> //OSC=12MHz
- #define uchar unsigned char
- #define uint unsigned int
- #define beathex 1800 //????????????,4???????1?,???1600?? ,????375ms???1800
- #define L 0 //??
- #define M 1 //??
- #define H 2 //??
- sbit sounder=P3^6; //sounder ??P3.7?? ???P2.4
- uchar thh0,tll0;
- bit flag;
- uint code toneH[]={0,65058,65110,65157,65178,65217,65252,65282};
- uint code toneM[]={0,64580,64684,64777,64820,64898,64968,65030};
- uint code toneL[]={0,63628,63853,64021,64103,64260,64400,64524};
- //??? 1 2 3 4 5 6 7
- //L=low, M=middle, H=High
- //uchar code duration[]={0,1, 2, 3, 4, 5,6,7,8,9,10,11,12,13,14,15,16};
- // 1/4,2/4=1/2?,3/4,4/4=1?,...
- struct music{
- uchar degree,tune,duration;
- }*pt,mv;
- struct music code sb[]= //??,1=C 4/4
- {M,5,4, M,3,2,M,5,2, H,1,8, M,6,4,H,1,4,M,5,8,
- M,5,4, M,1,2,M,2,2, M,3,4, M,2,2,M,1,2, M,2,8, M,0,8,
- M,5,4, M,3,2,M,5,2, H,1,6, M,7,2,
- M,6,4, H,1,4, M,5,8, M,5,4, M,2,2,M,3,2, M,4,6, L,7,2, M,1,8, M,0,8,
- M,6,4, H,1,4, H,1,8, M,7,4, M,6,2,M,7,2, H,1,8,
- M,6,2,M,7,2, H,1,2,M,6,2, M,6,2,M,5,2, M,3,2,M,1,2, M,2,8, M,0,8,
- M,5,4, M,3,2,M,5,2, H,1,6, M,7,2, M,6,4, H,1,4, M,5,8,
- M,5,4, M,2,2,M,3,2, M,4,6, L,7,2, M,1,12, M,0,4, M,0,0
- };
- struct music code tn[]= //?? 1=C 2/4
- { //??
- H,3,2,H,3,4,H,3,2, H,3,2,H,2,2,H,2,4, H,1,2,H,1,4,H,1,2,
- H,2,2,H,1,2, M,6,2,M,5,2, M,5,2,M,5,4,M,5,2, M,6,2,M,5,2, H,2,2,H,3,2,
- H,1,8, H,1,4,
-
- M,3,2,M,5,2, M,5,6, M,3,2, //1
-
- M,6,2,M,6,2, M,7,2,M,6,2, M,0,2,M,6,2,M,6,2,M,5,2, H,1,4,H,1,2,H,1,2,
- H,1,2,M,6,2, H,1,2,M,6,2, M,5,12, M,3,2,M,5,2, M,5,6,M,3,2,
- M,6,2,M,6,2, M,7,2,M,6,2, M,0,2,M,6,2, M,6,2,M,5,2,
-
- H,1,4,H,1,3,H,1,1, H,1,2,M,6,2, M,6,2,H,1,2, H,2,16,
- H,5,2, H,5,4, H,5,1, H,5,3,H,5,2, H,3,2,H,2,2,
- H,1,2,H,1,4, M,6,1,M,6,3,H,1,2, M,6,2,H,1,2,
-
- H,2,2,H,2,2, H,2,2,H,1,2, H,2,2,H,1,2, H,3,2,H,2,2, H,2,16,
- H,3,2, H,3,4, H,3,2, H,3,2,H,2,2, H,2,4, H,1,2, H,1,4, H,1,2,
- H,2,2,H,1,2, M,6,2,M,5,2, M,5,2,M,5,2, M,0,2,M,5,2,
-
- M,6,2,M,5,2, H,2,2,H,3,2, H,1,16,
- M,3,2,M,5,2, M,5,6, M,3,2, //2
-
- M,6,2,M,6,2, M,7,2,M,6,2, M,0,2,M,6,2,M,6,2,M,5,2, H,1,4,H,1,2,H,1,2,
- H,1,2,M,6,2, H,1,2,M,6,2, M,5,12, M,3,2,M,5,2, M,5,6,M,3,2,
- M,6,2,M,6,2, M,7,2,M,6,2, M,0,2,M,6,2, M,6,2,M,5,2,
-
- H,1,4,H,1,3,H,1,1, H,1,2,M,6,2, M,6,2,H,1,2, H,2,16,
- H,5,2, H,5,4, H,5,1, H,5,3,H,5,2, H,3,2,H,2,2,
- H,1,2,H,1,4, M,6,1,M,6,3,H,1,2, M,6,2,H,1,2,
-
- H,2,2,H,2,2, H,2,2,H,1,2, H,2,2,H,1,2, H,3,2,H,2,2, H,2,16,
- H,3,2, H,3,4, H,3,2, H,3,2,H,2,2, H,2,4, H,1,2, H,1,4, H,1,2,
- H,2,2,H,1,2, M,6,2,M,5,2, M,5,2,M,5,2, M,0,2,M,5,2,
-
- M,6,2,M,5,2, H,2,2,H,3,2, H,1,16,
- M,3,2,M,5,2, M,5,6, M,3,2, //3
-
- M,6,2,M,6,2, M,7,2,M,6,2, M,0,2,M,6,2,M,6,2,M,5,2, H,1,4,H,1,2,H,1,2,
- H,1,2,M,6,2, H,1,2,M,6,2, M,5,12, M,3,2,M,5,2, M,5,6,M,3,2,
- M,6,2,M,6,2, M,7,2,M,6,2, M,0,2,M,6,2, M,6,2,M,5,2,
-
- H,1,4,H,1,3,H,1,1, H,1,2,M,6,2, M,6,2,H,1,2, H,2,16,
- H,5,2, H,5,4, H,5,1, H,5,3,H,5,2, H,3,2,H,2,2,
- H,1,2,H,1,4, M,6,1,M,6,3,H,1,2, M,6,2,H,1,2,
-
- H,2,2,H,2,2, H,2,2,H,1,2, H,2,2,H,1,2, H,3,2,H,2,2, H,2,16,
- H,3,2, H,3,4, H,3,2, H,3,2,H,2,2, H,2,4, H,1,2, H,1,4, H,1,2,
- H,2,2,H,1,2, M,6,2,M,5,2, M,5,2,M,5,2, M,0,2,M,5,2,
-
- M,6,2,M,5,2, H,2,2,H,3,2, H,1,16,
- M,3,2,M,5,2, M,5,6, M,3,2, //4
-
- M,6,2,M,6,2, M,7,2,M,6,2, M,0,2,M,6,2,M,6,2,M,5,2, H,1,4,H,1,2,H,1,2,
- H,1,2,M,6,2, H,1,2,M,6,2, M,5,12, M,3,2,M,5,2, M,5,6,M,3,2,
- M,6,2,M,6,2, M,7,2,M,6,2, M,0,2,M,6,2, M,6,2,M,5,2,
-
- H,1,4,H,1,3,H,1,1, H,1,2,M,6,2, M,6,2,H,1,2, H,2,16,
- H,5,2, H,5,4, H,5,1, H,5,3,H,5,2, H,3,2,H,2,2,
- H,1,2,H,1,4, M,6,1,M,6,3,H,1,2, M,6,2,H,1,2,
-
- H,2,2,H,2,2, H,2,2,H,1,2, H,2,2,H,1,2, H,3,2,H,2,2, H,2,16,
- H,3,2, H,3,4, H,3,2, H,3,2,H,2,2, H,2,4, H,1,2, H,1,4, H,1,2,
- H,2,2,H,1,2, M,6,2,M,5,2, M,5,2,M,5,2, M,0,2,M,5,2,
-
- M,6,2,M,5,2, H,2,2,H,3,2, H,1,16,
- //??
- H,1,8, H,3,8, H,3,2, H,3,4, H,3,2, H,3,2,H,2,2, H,2,4, H,1,2, H,1,4, H,1,2,
- H,2,2,H,1,2, M,6,2,M,5,2, M,5,2,M,5,2, M,0,2,M,5,2,
- M,6,2,M,5,2, H,2,2,H,3,2, H,1,12, M,0,4, M,0,0
-
- };
- struct music code sszymmh[]=
- {
- M,6,6, M,5,2, M,3,4, M,5,4, H,1,4, M,6,2, M,5,2, M,6,8,
- M,3,5, M,5,2, M,6,2, M,5,5, M,3,5, M,1,2, L,6,2, M,5,2, M,3,2, M,2,8,
- M,2,7, M,3,2, M,5,2, M,6,2, M,3,3, M,2,3, M,1,8,
- M,5,8, M,3,2, M,2,2, M,1,2, L,6,2, M,1,2, L,5,16, M,0,0
- };
- void delayms(uint ms)
- {
- uint i;
- uchar j;
- for(i=0;i<ms;i++);
- for(j=0;j<120;j++);
- }
- void main()
- {
- sounder=0;
- TMOD=0x01;
- EA=1;
- ET0=1;
- flag=0;
- while(1)
- {
- if (flag==0)
- {
- pt=&sb;
- flag=1;
- }
- else
- {
- pt=&tn;
- flag=0;
- }
-
- while((pt->tune!=0)||(pt->duration!=0))
- {
- switch (pt->degree)
- {
- case M:
- if(toneM[pt->tune]==0)
- {
- sounder=0;
- }
- else
- {
- thh0=toneM[pt->tune]/256;
- tll0=toneM[pt->tune]%256;
- }
- break;
- case H:
- thh0=toneH[pt->tune]/256;
- tll0=toneH[pt->tune]%256;
-
- break;
- case L:
- thh0=toneL[pt->tune]/256;
- tll0=toneL[pt->tune]%256;
- break;
- default:break;
- }
- TR0=1;
- delayms(pt->duration*beathex);
- TR0=0;
- sounder=0;
- delayms(2);
- pt++;
- }
- delayms(60000);
- }
- }
- void yinfu_freq() interrupt 1
- {
- TH0=thh0;
- TL0=tll0;
- sounder=~sounder;
- }
復制代碼 |