音乐流水灯产品设计报告(编辑修改稿)内容摘要:

main() { uchar x,w,timeLed,ad=0。 //, count1=0。 //流水灯无花样 count2=1。 //唱第一首歌 // P34=0。 //选取矩阵键盘的一列 EA=1。 //开总中断 EX0=1。 //开外部中断 0 IT0=1。 //外部中断 0下降沿触发方式 EX1=1。 //开外部中断 1 IT1=1。 //外部中断 1下降沿触发方式 TMOD=0x01。 //定时器 0工作在方式 1 TH0=0。 TL0=0。 ET0=1。 while(1) { if(count1!=0) { switch(count1) { case 1: for(w=0。 w23。 w++) { for(timeLed=0。 timeLed100。 timeLed++) {for(x=0。 x=ad。 x++) { //duan=1。 P1=huayang1[w][x]。 //duan=0。 if(count1!=1) break。 } } if(w7) ad++。 if(w14) ad。 if(w==22) ad=0。 } ad=0。 break。 11 case 2: for(w=0。 w23。 w++) { for(x=0。 x=ad。 x++) { //duan=1。 P1=huayang1[w][x]。 //duan=0。 delay1(300)。 if(count1!=2) break。 } if(w7) ad++。 if(w14) ad。 if(w==22) ad=0。 } ad=0。 break。 case 3: for(w=22。 w=0。 w) { for(timeLed=0。 timeLed100。 timeLed++) {for(x=0。 x=ad。 x++) { //duan=1。 P1=huayang1[w][x]。 //duan=0。 if(count1!=3) break。 } } if(w8) ad。 if(w15) ad++。 if(w==0) ad=0。 } ad=0。 break。 case 4: 12 for(x=0。 x8。 x++) { //duan=1。 P1=huayang4[x]。 beep()。 delay1(300)。 //duan=0。 if(count1!=4) break。 } break。 } } else { song()。 delay1(1000)。 } } } 播放音乐子程序流程图: 13 图 播放音乐子程序流程图 播放音乐子程序代码: void song() { uint temp。 uchar jp。 //jp是简谱 i=0。 while(1) 14 { if(count2==0) { break。 } if(count2==1) //选曲 temp=qnzl[i]。 if(count2==2) temp=jmszl[i]。 if(temp==0xff) break。 jp=temp/16。 //取数的高 4位 //duan=1。 //不知 何物 P1=yinyue[jp]。 //将音乐转化成相应的 LED档 ? //duan=0。 if(jp!=0) { timeh=cuzhi[jp*2]。 timel=cuzhi[jp*2+1]。 } else { TR0=0。 fm=1。 //关蜂鸣器 } delay_led(temp)。 //取数的低 4位 TR0=0。 //唱完一个音停 10MS fm=1。 delay1(10)。 TR0=1。 i++。 } TR0=0。 fm=1。 }延时程序代码: void delay_led(uint temp){ uint x,y。 for(x=temp%16。 x0。 x) for(y=19000/18。 y0。 y){ if(temp/16==0x00){ P1=P1+0X10。 P1=(P1/0X10)*0X10+0X01。 } if(temp/16==0x01){ P1=P1+0X10。 15 P1=(P1/0X10)*0X10+0X0F。 } if(temp/16==0x02){ P1=P1+0X10。 P1=(P1/0X10)*0X10+0X0E。 } if(temp/16==0x03){ P1=P1+0X10。 P1=(P1/0x10)*0X10+0X0D。 }if(temp/16==0x04){ P1=P1+0X10。 P1=(P1/0X10)*0X10+0X0C。 }if(temp/16==0x05){ P1=P1+0X10。 P1=(P1/0X10)*0X10+0X0B。 } if(temp/16==0x06){ P1=P1+0X10。 P1=(P1/0x10)*0X10+0X0A。 } if(temp/16==0x07){ P1=P1+0X10。 P1=(P1/0x10)*0X10+0X09。 } if(temp/16==0x08){ P1=P1+0X10。 P1=(P1/0x10)*0X10+0X08。 } if(temp/16==0x09){ P1=P1+0X10。 P1=(P1/0X10)*0X10+0X7。 } if(temp/16==0x0A){ P1=P1+0X10。 P1=(P1/0X10)*0x10+0x06。 } } } void delay(uint z) //延时 165MS,即十六分音符 { uint x,y。 for(x=z。 x0。 x) for(y=19000。 y0。 y)。 } void delay1(uint z) //延时 1MS 16 { uint x,y。 for(x=z。 x0。 x) for(y=112。 y0。 y)。 } 第五章 测试结果 .总体运行图 图 系统总体运行图 17 附录 程序源代码及注释 include define uchar unsigned char define uint unsigned int //sbit duan=P2^6。 sbit key1=P3^2。 //按 key1 可切换花样 sbit key2=P3^3。 //按 key2 可切换歌曲 sbit fm=P2^1。 //蜂鸣器连续的 IO 口 sbit P34=P3^4。 //矩阵键盘的一列 uchar code huayang1[23][8]={{0x00}, {0x10,0x01}, {0x20,0x11,0x02}, {0x30,0x21,0x12,0x03}, {0x40,0x31,0x22,0x13,0x04}, {0x50,0x41,0x32,0x23,0x14,0x05}, {0x60,0x51,0x42,0x33,0x24,0x15,0x06}, {0x70,0x61,0x52,0x43,0x34,0x25,0x16,0x07}, {0x88,0x71,0x62,0x53,0x44,0x35,0x26,0x17}, {0x98,0x89,0x72,0x63,0x54,0x45,0x36,0x27}, {0xA8,0x99,0x8A,0x73,0x64,0x55,0x46,0x37}, {0xB。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。