#include<reg51.h>//51單片機頭文件 typedef unsigned char uchar; typedef unsigned int uint; sbit RS=P2^7;//LCD1602數(shù)據(jù)/命令選擇端(H/L) sbit RW=P2^6;//LCD1602讀/寫選擇端(H/L) sbit E=P2^5;//LCD1602使能信號端 sbit BEEP=P2^0;//蜂鳴器接口 sbit k1=P3^2;//下一首 sbit k2=P3^3;//上一首 sbit k3=P2^1;//播放/暫停 sbit k4=P2^2;//復位 char count2;//歌曲標志 uchar a,b,c,aa,num; uchar num1,num2; //---------------------------簡譜--------------------------------------- //編程規(guī)則:字節(jié)高位是簡譜,低位是持續(xù)時間, //代表多少個十六分音符 //1-7代表中央C調(diào),8-E代表高八度,0代表停頓 //最后的0是結(jié)束標志 uchar code table1[]={ //千年之戀 0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08,//前奏 0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,//竹林的燈火 到過的沙漠 0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,//七色的國度 不斷飄逸風中 0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,//有一種神秘 灰色的旋渦 0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,//將我卷入了迷霧中 0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,//看不清的雙手 0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02,//一朵花傳來誰經(jīng)過的溫柔 0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,//穿越千年的傷痛 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,//只為求一個結(jié)果 0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,//你留下的輪廓 指引我 0x42,0x63,0x83,0x83,0x91,0x91,//黑夜中不寂寞 0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,//穿越千年的哀愁 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,//是你在盡頭等我 0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,//最美麗的感動 會值得 0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff//結(jié)束標?//睪? }; uchar code table2[]={ //寂寞沙洲冷 0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,//自你走后心憔悴 0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,//白色油桐風中紛飛 0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,//落花似人有情 這個季節(jié) 0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,//河畔的風放肆拼命地吹 0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,//不斷撥弄離人的眼淚 0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54,//那樣濃烈的愛再也無法給 0x22,0x12,0x11,0x12,0x11,0x12,0x12,0x14,0x26,0x32,0x26,//傷感一夜一夜 0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,//當記憶的線纏繞過往支離破碎 0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,//是慌亂占據(jù)了心扉 0x31,0x81,0x81,0x81,0x61,0x91,0x82,//有花兒伴著蝴蝶 0x51,0x51,0x51,0x51,0x31,0x61,0x53,//孤雁可以雙飛 0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,//夜深人靜獨徘徊 0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52,//當幸福戀人寄來紅色分享喜悅 0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,//閉上雙眼難過頭也不敢回 0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x34,//仍然撿盡寒枝不肯安歇微帶著后悔 0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,//寂寞沙洲我該思念誰 0xff }; uchar code table3[]={ 0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20, 0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20, 0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20, 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20, 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10, 0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20, 0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20, 0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20, 0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10, 0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80, 0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20, 0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20, 0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10, 0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0xff, }; uchar code table4[]={ 0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C, 0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0x20, 0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20, 0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30, 0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30, 0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26, 0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20, 0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F, 0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20, 0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B, 0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20, 0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0xff, }; //簡譜音調(diào)對應的定時器初值 //適合12的晶振 uchar code cuzhi[]={ 0xff,0xff,//占位 0xFC,0x8E,//中央C調(diào)1-7 0xFC,0xED, 0xFD,0x43, 0xFD,0x6A, 0xFD,0xB3, 0xFD,0xF3, 0xFE,0x2D, 0xFE,0x47, //高八度1-7 0xFE,0x76, 0xFE,0xA1, 0xFE,0xC7, 0xFE,0xD9, 0xFE,0xF9, 0xFF,0x16 }; uchar code yinyue[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x00,0x00}; //將音調(diào)轉(zhuǎn)化為對應的LED樣式 //延時165MS,即十六分音符子函數(shù) void delay1(uint z) { uint x,y; for(x=z;x>0;x--) for(y=19000;y>0;y--); } //延時1MS子函數(shù) void delay2(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //LCD1602液晶寫命令子函數(shù) void write_com(uchar com) { RS=0; //選擇寫指令 RW=0; E=0; P0=com; E=1; delay2(5); //無延時不能正常工作 E=0; } //LCD1602液晶寫數(shù)據(jù)子函數(shù) void write_date(uchar date) { RS=1; //選擇寫數(shù)據(jù) RW=0; E=0; P0=date; E=1; delay2(5); //無延時不能正常工作 E=0; } //LCD1602液晶初始化子函數(shù) void LCD1602_init() //初始化 { delay2(15); //主函數(shù) void main() { TMOD=0x11;//定時器0工作在方式1 TH1=0; TL1=0; ET1=1; TH0=0; TL0=0; ET0=1; TR0=1; EA=1;//開總中斷 EX1=1;//開外部中斷1 IT1=1;//下降沿時觸發(fā)中斷 EX0=1;//開外部中斷0 IT0=1;//下降沿時觸發(fā)中斷 count2=0;//唱第一首歌 LCD1602_init(); while(1)//大循環(huán) { song(); } } //定時器0中斷子函數(shù) void t0() interrupt 1 { num2++; if(num2==5) { num2=0; key(); } } //定時器1中斷子函數(shù) void t1() interrupt 3 //用于產(chǎn)生各種音調(diào) { TH1=a; TL1=b; BEEP=~BEEP; } void wb0() interrupt 0 { TR1=0; if(k1==0) { delay2(10); if(k1==0) { count2++; c=0;//從頭開始唱 if(count2==1) { write_com(0x01); delay2(10); write_com(0x80+0); write_date(' '); write_com(0x80+1); write_date(' '); write_com(0x80+2); write_date(' '); write_com(0x80+3); write_com(0xc0+8); write_date(' '); write_com(0xc0+9); write_date('f'); write_com(0xc0+10); write_date('l'); write_com(0xc0+11); write_date('o'); write_com(0xc0+12); write_date('w'); write_com(0xc0+13); write_date('e'); write_com(0xc0+14); write_date('r'); write_com(0xc0+15); write_date('s'); } if(count2>4) { count2=1; c=0;//從頭開始唱 TR1=1; } while(!k1); } } } void wb1() interrupt 2 { TR1=0; if(k2==0) { delay2(10); if(k2==0) { count2--; c=0;//從頭開始唱 if(count2==1) } if(count2<=0) { count2=4; c=0;//從頭開始唱 TR1=1; } while(!k2); } } }
|