欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機lcd1602音樂播放器 仿真 源碼
[打印本頁]
作者:
51ren
時間:
2017-1-10 23:30
標題:
單片機lcd1602音樂播放器 仿真 源碼
51單片機做的lcd1602音樂播放器原理圖:
0.png
(25.83 KB, 下載次數: 107)
下載附件
2017-1-10 23:28 上傳
單片機源程序:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
/*------------------------------------------------
硬件端口定義
------------------------------------------------*/
sbit SPK=P2^0; //定義音樂輸出端口
sbit key1=P3^2; //定義按鍵 用于 暫停
sbit key2=P3^3; //定義按鍵 用于 切換
sbit rs=P2^1;
sbit rw=P2^2;
sbit ep=P2^3;
void delay1(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
rs=0;
rw=0;
ep=0;
P0=com;
delay1(2);
ep=1;
delay1(2);
ep=0;
delay1(2);
}
void write_dat(uchar dat)
{
rs=1;
rw=0;
ep=0;
P0=dat;
delay1(2);
ep=1;
delay1(2);
ep=0;
delay1(2);
}
void write_zfc(uchar *p)
{
while(*p!=0)
write_dat(*p++);
}
void init_1602()
{
write_com(0x38);
write_com(0x01);
write_com(0x06);
write_com(0x0c);
}
unsigned char W=0,T; //用于選擇音樂
unsigned char Timer0_H,Timer0_L,Time;
void delay5ms(void) //誤差 0us
{
unsigned char a,b;
for(b=185;b>0;b--)
for(a=12;a>0;a--);
}
void delay500ms(void) //誤差 0us
{
unsigned char a,b,c;
for(c=205;c>0;c--)
for(b=116;b>0;b--)
for(a=9;a>0;a--);
}
//世上只有媽媽好 數據表 音譜,高中低音,音長
code unsigned char MUSIC[102]={ 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,
6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,
6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,
5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,
2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0
};
//送別 數據表 音譜,高中低音,音長
code unsigned char MUSIC1[174]={ 5,2,2, 3,2,1, 5,2,1, 1,3,4,
6,2,2, 1,3,2, 5,2,4,
5,2,2, 1,2,1, 2,2,1, 3,2,2, 2,2,1, 1,2,1,
2,2,8,
5,2,2, 3,2,1, 5,2,1, 1,3,3, 7,2,1,
6,2,2, 1,3,2, 5,2,4,
5,2,2, 2,2,1, 3,2,1, 4,2,3, 7,1,1,
1,2,8,
6,2,2, 1,3,2, 1,3,4,
7,2,2, 6,2,1, 7,2,1, 1,3,4,
6,2,1, 7,2,1, 1,3,1, 6,2,1, 6,2,1, 5,2,1, 3,2,1, 1,2,1,
2,2,8,
5,2,2, 3,2,1, 5,2,1, 1,3,3, 7,2,1,
6,2,2, 1,3,2, 5,2,4,
5,2,2, 2,2,1, 3,2,1, 4,2,3, 7,1,1,
1,2,8
};
//新年好 數據表 音譜,高中低音,音長
code unsigned char MUSIC2[90]={ 1,2,1, 1,2,1, 1,2,2, 5,1,2,
3,2,1, 3,2,1, 3,2,2, 1,2,2,
1,2,1, 3,2,1, 5,2,2, 5,2,2,
4,2,1, 3,2,1, 2,2,4,
2,2,1, 3,2,1, 4,2,2, 4,2,2,
3,2,1, 2,2,1, 3,2,2, 1,2,2,
1,2,1, 3,2,1, 2,2,2, 5,1,2,
7,1,1, 2,2,1, 1,2,4
};
//童年 數據表 音譜,高中低音,音長
code unsigned char MUSIC3[423]={ 5,1,1, 5,1,1, 3,1,1, 5,1,2, 3,1,1, 5,1,2,
6,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 1,2,2,
2,2,1, 2,2,1, 3,2,1, 2,2,2, 5,1,1, 6,1,1, 5,1,1,
1,2,1, 1,2,1, 5,1,1, 1,2,1, 1,2,1, 1,2,2, 1,2,1,
1,2,1, 5,1,2, 1,2,1, 6,1,1, 5,1,1, 3,1,1, 2,1,1,
1,1,2, 3,1,1, 5,1,1, 5,1,2, 5,1,1, 3,1,1,
6,1,1, 6,1,1, 1,2,1, 6,1,1, 6,1,1, 6,1,1, 6,1,1, 5,1,1,
1,2,2, 1,2,1, 1,2,1, 1,2,1, 6,1,1, 1,2,1, 6,1,1,
5,1,2, 0,2,1, 3,1,1, 6,1,1, 1,2,1, 6,1,1, 5,1,1,
3,1,1, 2,1,1, 3,1,1, 5,1,1, 5,1,2, 5,1,1, 3,1,1,
6,1,1, 6,1,1, 1,2,1, 6,1,1, 6,1,1, 6,1,1, 6,1,1, 5,1,1,
1,2,2, 1,2,1, 1,2,1, 1,2,1, 6,1,1, 6,1,1, 1,2,1,
2,2,2, 0,2,1, 5,1,1, 2,2,1, 5,2,1, 2,2,2,
5,2,1, 5,2,2, 5,2,1, 5,2,1, 5,2,1, 3,2,1, 2,2,1,
1,2,1, 1,2,2, 6,1,1, 6,1,1, 1,2,1, 6,1,1, 1,2,1,
2,2,1, 2,2,1, 2,2,1, 2,2,1, 2,2,1, 1,2,1, 3,2,1, 2,2,1,
2,2,8,
3,2,1, 3,2,2, 3,2,1, 3,2,2, 2,2,2,
1,2,1, 1,2,2, 1,2,1, 2,2,1, 1,2,1, 6,1,1, 5,1,1,
5,1,1, 5,1,2, 5,1,1, 6,1,1, 5,1,1, 2,2,1, 3,2,1,
1,2,8,
1,2,1, 5,1,2, 1,2,1, 6,1,1, 5,1,1, 3,1,1, 2,1,1,
1,2,6, 0,2,2
};
// 音階頻率表 高八位
code unsigned char FREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
} ;
// 音階頻率表 低八位
code unsigned char FREQL[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
/*------------------------------------------------
uS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
長度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延時1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
節拍延時函數
各調1/4節拍時間:
調4/4 125ms
調2/4 250ms
調3/4 187ms
------------------------------------------------*/
void delay(uchar t)
{
uchar i;
for(i=0;i<t;i++)
DelayMs(250);
TR0=0;
}
/*------------------------------------------------
定時器0中斷
------------------------------------------------*/
void TIM0_ISR() interrupt 1
{
TR0=0;
SPK=!SPK;
TH0=Timer0_H;
TL0=Timer0_L;
TR0=1;
}
/*------------------------------------------------
歌曲處理函數
------------------------------------------------*/
void Song()
{
TH0=Timer0_H;//賦值定時器時間,決定頻率
TL0=Timer0_L;
TR0=1; //打開定時器
delay(Time); //延時所需要的節拍
}
/*------------------------------------------------
主函數
------------------------------------------------*/
void led(unsigned char a);
void main(void)
{
unsigned int i;
unsigned char k;
TMOD|=0x01; //置定時器0工作方式1
EA=1; //打開全局中斷
ET0=1; //打開 定時器0 中斷
EX0=1; //打開 外部中斷0 中斷
IT0=1; //設置為下降沿中斷
EX1=1; //打開 外部中斷1 中斷
IT1=1; //設置為下降沿中斷
PX1=1; //設置 外部中斷1 為高優先級
init_1602();
while(1)
{
//i=0;
if(W==0)
{
T=W;
write_com(0x81);
write_zfc("shishangziyou");
write_com(0xc4);
write_zfc("mamahao");
for(i=0;i<100;i=i+3)
{ //音樂數組長度 ,唱完從頭再來
led(MUSIC[i]);
k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振蕩頻率所需數據
Timer0_H=FREQH[k];
Timer0_L=FREQL[k];
Time=MUSIC[i+2]; //節拍時長
// i=i+3;
Song();
if(T!=W)
break;
}
}
if(W==1)
{
T=W;
write_com(0x01);
write_com(0x80);
write_zfc(" songbie ");
for(i=0;i<174;i=i+3)
{ //音樂數組長度 ,唱完從頭再來
led(MUSIC1[i]);
k=MUSIC1[i]+7*MUSIC1[i+1]-1;//去音符振蕩頻率所需數據
Timer0_H=FREQH[k];
Timer0_L=FREQL[k];
Time=MUSIC1[i+2]; //節拍時長
// i=i+3;
Song();
if(T!=W)
break;
}
}
if(W==2)
{
T=W;
write_com(0x80);
write_zfc(" xinnianhao ");
for(i=0;i<90;i=i+3)
{ //音樂數組長度 ,唱完從頭再來
led(MUSIC2[i]);
k=MUSIC2[i]+7*MUSIC2[i+1]-1;//去音符振蕩頻率所需數據
Timer0_H=FREQH[k];
Timer0_L=FREQL[k];
Time=MUSIC2[i+2]; //節拍時長
// i=i+3;
Song();
if(T!=W)
break;
}
}
if(W==3)
{
T=W;
write_com(0x80);
write_zfc(" tongnian ");
for(i=0;i<423;i=i+3)
{ //音樂數組長度 ,唱完從頭再來
led(MUSIC3[i]);
k=MUSIC3[i]+7*MUSIC3[i+1]-1;//去音符振蕩頻率所需數據
Timer0_H=FREQH[k];
Timer0_L=FREQL[k];
Time=MUSIC3[i+2]; //節拍時長
// i=i+3;
Song();
if(T!=W)
break;
}
}
}
}
// 頻譜函數
void led(unsigned char a)
{
switch(a)
{
case 0:P1=0xff;break;
case 1:P1=0x7f;break;
case 2:P1=0x7e;break;
case 3:P1=0x7c;break;
case 4:P1=0x78;break;
case 5:P1=0x70;break;
case 6:P1=0x60;break;
case 7:P1=0x40;break;
case 8:P1=0x00;break;
}
}
// 外部中斷0 中斷服務程序 用于暫停
void zhongduan0() interrupt 0
{
delay5ms(); //按鍵去抖
if(!key1)
{
while(!key1); //松手檢測
while(key1&&T==W); //檢測按鍵是否按下
delay5ms(); //按鍵去抖
while(key1&&T==W); //檢測按鍵是否按下
while(!key1&&T==W); //松手檢測
}
}
// 外部中斷1 中斷服務程序
void zhongduan1() interrupt 2
{
delay5ms(); //按鍵去抖
if(!key2)
{
if(W==3)
W=0;
else
W++;
while(!key2); //松手檢測
delay500ms();
}
}
復制代碼
0.png
(73.76 KB, 下載次數: 111)
下載附件
2017-1-10 23:27 上傳
所有資料下載:
1602音樂播放器.rar
(62.63 KB, 下載次數: 59)
2017-1-10 23:29 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
碩005
時間:
2017-1-11 10:24
哈哈哈,很有意思,多來幾首吧!
作者:
越快樂越墮落
時間:
2017-1-26 21:02
我還以為是插卡的,,,
作者:
天123
時間:
2017-11-24 17:12
這個程序的話怎么連lcd1602到開發板上呢
作者:
changle11
時間:
2017-11-24 18:03
多來幾首!
作者:
瑟瑟的萌新
時間:
2017-12-5 16:36
樓主有PCB的原理圖嗎
作者:
huangld
時間:
2017-12-7 19:41
在哪修改音樂呢
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1