欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
心形LED閃光燈單片機程序
[打印本頁]
作者:
li_xf
時間:
2018-4-26 16:44
標題:
心形LED閃光燈單片機程序
#include<reg52.h>
#include <intrins.h>
#define FREQ 12000000
unsigned int i;
unsigned int j;
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit K=P3^6;
sbit SPK=P3^7;
//數據定義:
//音樂編碼,存儲器定義
//音符碼格式:| D7 |D6 D5 D4| D3 |D2 D1 D0|
// |變調| 節拍|升降| 音符 |
// |高4位=0時是功能碼|根據低4位轉換 |
unsigned char code music1[]={ //梁祝
0xcb, //示例:0xcb=11001011B,升半調/1/4拍,3Mi低音
0x35,0x16,0xb9,0x12,0x96,0x99,0xa5,
0xbd,0x99,0x96,0x15,0x13,0x15,0x62,
0x32,0x13,0xa7,0x26,0x25,0x16,0xa9,0x22,
0xa3,0xa9,0x96,0x15,0x16,0x99,0xe5,
0xbb,0x15,0xa7,0xaa,0x96,0x99,0xd5,
0x13,0x15,0x23,0x15,0x16,0x17,0x9a,0xd6,0x15,0x16,
0xb9,0x12,0x25,0x23,0x23,0x22,0x13,0x12,0x21,0x96,0x15,
0x43,0xc9,0x96,0x99,0x96,0x15,0x13,0x15,0x16,0x99,
0xd5,
0x00, //最后字節為功能碼必須==0x00退出
};
unsigned char code music_l_tab[8]={0,1,2,3,4,6,8,16};//音樂節拍
unsigned char code music_freq_tab[64]={ //音符定時器值表
0xff,0xea, //0 休止符
255-FREQ/24/131/256, //256-FREQ/24/x/256 //1 do 高字節
256-FREQ/24/131%256, //256-FREQ/24/x%256 //1 do 低字節
255-FREQ/24/147/256,256-FREQ/24/147%256, //2 re
255-FREQ/24/165/256,256-FREQ/24/165%256, //3 mi
255-FREQ/24/175/256,256-FREQ/24/175%256, //4 fa
255-FREQ/24/196/256,256-FREQ/24/196%256, //5 suo
255-FREQ/24/221/256,256-FREQ/24/221%256, //6 la
255-FREQ/24/248/256,256-FREQ/24/248%256, //7 xi
0xff,0xea, //0 休止符
255-FREQ/24/262/256,256-FREQ/24/262%256, //1 do
255-FREQ/24/294/256,256-FREQ/24/294%256, //2 re
255-FREQ/24/330/256,256-FREQ/24/330%256, //3 mi
255-FREQ/24/350/256,256-FREQ/24/350%256, //4 fa
255-FREQ/24/393/256,256-FREQ/24/393%256, //5 suo
255-FREQ/24/441/256,256-FREQ/24/441%256, //6 la
255-FREQ/24/495/256,256-FREQ/24/495%256, //7 xi
0xff,0xea, //0 休止符
255-FREQ/24/525/256,256-FREQ/24/525%256, //1 do
255-FREQ/24/589/256,256-FREQ/24/589%256, //2 re
255-FREQ/24/661/256,256-FREQ/24/661%256, //3 mi
255-FREQ/24/700/256,256-FREQ/24/700%256, //4 fa
255-FREQ/24/786/256,256-FREQ/24/786%256, //5 suo
255-FREQ/24/882/256,256-FREQ/24/882%256, //6 la
255-FREQ/24/990/256,256-FREQ/24/990%256, //7 xi
0xff,0xea, //0 休止符
255-FREQ/24/1049/256,256-FREQ/24/1049%256, //1 do
255-FREQ/24/1178/256,256-FREQ/24/1178%256, //2 re
255-FREQ/24/1322/256,256-FREQ/24/1322%256, //3 mi
255-FREQ/24/1400/256,256-FREQ/24/1400%256, //4 fa
255-FREQ/24/1572/256,256-FREQ/24/1572%256, //5 suo
255-FREQ/24/1665/256,256-FREQ/24/1665%256, //6 la
255-FREQ/24/1869/256,256-FREQ/24/1869%256, //7 xi
};
unsigned char code music_frequp_tab[64]={ //升半音
0xff,0xea, //0 休止符
255-FREQ/24/139/256, //1 do 高字節 //255-FREQ/24/x/256
256-FREQ/24/139%256, //1 do 低字節 //256-FREQ/24/x%256
255-FREQ/24/156/256,256-FREQ/24/156%256, //2 re
255-FREQ/24/175/256,256-FREQ/24/175%256, //3 mi
255-FREQ/24/185/256,256-FREQ/24/185%256, //4 fa
255-FREQ/24/208/256,256-FREQ/24/208%256, //5 suo
255-FREQ/24/234/256,256-FREQ/24/234%256, //6 la
255-FREQ/24/262/256,256-FREQ/24/262%256, //7 xi
0xff,0xea, //0 休止符
255-FREQ/24/278/256,256-FREQ/24/278%256, //1 do
255-FREQ/24/312/256,256-FREQ/24/312%256, //2 re
255-FREQ/24/350/256,256-FREQ/24/350%256, //3 mi
255-FREQ/24/371/256,256-FREQ/24/371%256, //4 fa
255-FREQ/24/416/256,256-FREQ/24/416%256, //5 suo
255-FREQ/24/467/256,256-FREQ/24/467%256, //6 la
255-FREQ/24/525/256,256-FREQ/24/525%256, //7 xi
0xff,0xea, //0 休止符
255-FREQ/24/556/256,256-FREQ/24/556%256, //1 do
255-FREQ/24/624/256,256-FREQ/24/624%256, //2 re
255-FREQ/24/700/256,256-FREQ/24/700%256, //3 mi
255-FREQ/24/742/256,256-FREQ/24/742%256, //4 fa
255-FREQ/24/833/256,256-FREQ/24/833%256, //5 suo
255-FREQ/24/935/256,256-FREQ/24/935%256, //6 la
255-FREQ/24/1049/256,256-FREQ/24/1049%256, //7 xi
0xff,0xea, //0 休止符
255-FREQ/24/1112/256,256-FREQ/24/1112%256, //1 do
255-FREQ/24/1248/256,256-FREQ/24/1248%256, //2 re
255-FREQ/24/1400/256,256-FREQ/24/1400%256, //3 mi
255-FREQ/24/1484/256,256-FREQ/24/1484%256, //4 fa
255-FREQ/24/1618/256,256-FREQ/24/1618%256, //5 suo
255-FREQ/24/1764/256,256-FREQ/24/1764%256, //6 la
255-FREQ/24/1968/256,256-FREQ/24/1968%256, //7 xi
};
unsigned char ly_TH0;
unsigned char ly_TL0;
//函數定義:
void music_delay(unsigned char timer); //音樂節拍延時
void music_play(unsigned char *pmsc); //播放音樂子程序
//---------------------------------------------------------------------------//
void music_int0 (void) interrupt 1 using 1 //定時中斷1//
{
SPK=~SPK;
TH0=ly_TH0;
TL0=ly_TL0;
}
//---------------------------------------------------------------------------//
void music_delay(unsigned char timer) //延時 125*n 毫秒
{
unsigned char i=125,j;
do{
do{
for(j=0; j<230; j++)
_nop_();
}while(--i);
}while(--timer);
}
//---------------------------------------------------------------------------//
void music_play(unsigned char *pmsc) //音樂
{
unsigned char music_freq=32; //音高
unsigned char music_long; //節拍延時
unsigned char music_data=0; //音符數據
bit music_up=0; //升半音
bit music_break=0; //斷奏
ly_TH0=0xff;
ly_TL0=0xea; //關輸出(輸出超聲波)
ET0=1; //開T1定時器中斷
TR0=1;
//---------------------------------------------------------
while (*pmsc != 0x00)
{
music_data=*pmsc & 0x07;
music_long=*pmsc>>4;
//---------------------------------------------------------
if (music_long != 0){ //是音符,非功能碼
if (*pmsc&0x80){ //需升降調
if (((*pmsc) & 0x08) == 0)
{if(music_freq >= 16) music_freq -= 16;} //音高下降
else
{if(music_freq < 48) music_freq += 16;} //音高上升
}
//---------------------------------------------------------
if (music_up==1){ //升半音
ly_TH0=music_frequp_tab[(music_freq + (music_data <<1))];
ly_TL0=music_frequp_tab[(music_freq + (music_data <<1)+1)];
}
else{ //不升半音
ly_TH0=music_freq_tab[(music_freq + (music_data <<1))];
ly_TL0=music_freq_tab[(music_freq + (music_data <<1)+ 1)];
}
//---------------------------------------------------------
if (music_break){ //斷奏
music_delay(music_l_tab[music_long&0x07]-1);
ly_TH0=0xff;
ly_TL0=0xea;
music_delay(1);
}
else //連奏
music_delay(music_l_tab[music_long&0x07]);
}
//---------------------------------------------------------
else //是功能碼
{
switch(music_data){
case 0x04:
music_up=0; break; //不升半音
case 0x05:
music_up=1; break; //升半音
case 0x06:
music_break=0; break; //斷奏
case 0x07:
music_break=1;break; //連奏
}
}
//---------------------------------------------------------
pmsc++;
}
ET0=0; //播放結束,關T1中斷
TR0=0;
SPK=1; //關輸出
}
/*====================================================================
設定延時時間:x*1ms
====================================================================*/
void DelayMs(unsigned int Ms)
{
unsigned int i,TempCyc;
for(i=0;i<Ms;i++)
{
TempCyc = 250;
while(TempCyc--);
}
}
/*====================================================================
讀鍵
====================================================================*/
void keypros()
{
if(K==0) //檢測按鍵K1是否按下
{
DelayMs(10); //消除抖動 一般大約10ms
if(K==0) //再次判斷按鍵是否按下
{
j+=1; //led狀態取反
}
while(!K); //檢測按鍵是否松開
}
}
void main()
{
while (1)
{
j=0;
P0=0xff;P1=0xff;P2=0xff;
P0=0;P2=0;LED1=0;LED2=0;
TMOD=0x01; //定時器模式
EA=1;
EX0=0;
TR0=0;
music_play(music1); //播放音樂
P0=0xff;P2=0xff;LED1=1;LED2=1;DelayMs(150);
P0=0xfe;DelayMs(150);
P0=0xfc;DelayMs(150);
P0=0xf8;DelayMs(150);
P0=0xf0;DelayMs(150);
P0=0xe0;DelayMs(150);
P0=0xc0;DelayMs(150);
P0=0x80;DelayMs(150);
P0=0;DelayMs(150);
P2=0x7f;DelayMs(150);
P2=0x3f;DelayMs(150);
P2=0x1f;DelayMs(150);
P2=0x0f;DelayMs(150);
P2=0x07;DelayMs(150);
P2=0x03;DelayMs(150);
P2=0x01;DelayMs(150);
P2=0;DelayMs(150);
LED1=0;DelayMs(150);
LED2=0;DelayMs(150);
while(j==0)
{keypros();DelayMs(10);}
P0=0xff;P2=0xff;LED1=1;LED2=1;
for (i=0;i<5;i++)
{
P0=0xfe;DelayMs(20);
P0=0xfd;DelayMs(20);
P0=0xfb;DelayMs(20);
P0=0xf7;DelayMs(20);
P0=0xef;DelayMs(20);
P0=0xdf;DelayMs(20);
P0=0xbf;DelayMs(20);
P0=0x7f;DelayMs(20);
P0=0xff;
P2=0x7f;DelayMs(20);
P2=0xbf;DelayMs(20);
P2=0xdf;DelayMs(20);
P2=0xef;DelayMs(20);
P2=0xf7;DelayMs(20);
P2=0xfb;DelayMs(20);
P2=0xfd;DelayMs(20);
P2=0xfe;DelayMs(20);
P2=0xff;
LED1=0;DelayMs(20);LED1=1;
LED2=0;DelayMs(20);LED2=1;
}
for (i=0;i<10;i++)
{
P0=0xfe;P2=0xbf;DelayMs(20);P0=0xff;P2=0xff;
P0=0xfd;P2=0xdf;DelayMs(20);P0=0xff;P2=0xff;
P0=0xfb;P2=0xef;DelayMs(20);P0=0xff;P2=0xff;
P0=0xf7;P2=0xf7;DelayMs(20);P0=0xff;P2=0xff;
P0=0xef;P2=0xfb;DelayMs(20);P0=0xff;P2=0xff;
P0=0xdf;P2=0xfd;DelayMs(20);P0=0xff;P2=0xff;
P0=0xbf;P2=0xfe;DelayMs(20);P0=0xff;P2=0xff;
P0=0x7f;LED1=0;DelayMs(20);P0=0xff;LED1=1;
P2=0x7f;LED2=0;DelayMs(20);LED2=1;P2=0xff;
}
for (i=0;i<20;i++)
{
P0=0xb6;P2=0xb6;DelayMs(20);P0=0xff;P2=0xff;DelayMs(20);
P0=0x6d;P2=0xdb;LED1=0;DelayMs(20);P0=0xff;P2=0xff;LED1=1;DelayMs(20);
P0=0xdb;P2=0x6d;LED2=1;DelayMs(20);P0=0xff;P2=0xff;LED2=1;DelayMs(20);
}
for (i=0;i<20;i++)
{
P0=0xaa;P2=0x55;LED1=0;DelayMs(20);P0=0xff;P2=0xff;LED1=1;DelayMs(20);
P0=0x55;P2=0xaa;LED2=0;DelayMs(20);P0=0xff;P2=0xff;LED2=1;DelayMs(20);
}
}
}
復制代碼
這是我用一周時間做的心形七彩閃光燈程序
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1