?? music.c
字號:
#include<AT89X51.H>
#include<stdio.h>
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
unsigned char STH0,STL0;
unsigned int code music_feq[]={64021,64103,64260,64400,
64524,64580,64684,64777,
64820,64898,64968,65030,
65058,65110,65157,65178};
//*******特別注意要進行預先聲明的工作******************//
void scan_key(void);
//*****************************************************//
void delay(void);
void proc(unsigned char);
void wait_stop(unsigned char);
void main(void)
{
TMOD=0x01;
EA=1;
ET0=1;
P3=0xFF;
scan_key();
}
void TIME0(void) interrupt 1 using 0
{
TH0=STH0;
TL0=STL0;
P1_0=~P1_0;
}
void scan_key(void)
{
unsigned char key,temp;
while(1)
{
P3_4=0;
temp=P3;
temp&=0x0F;
if(temp!=0x0F)
{
delay();
temp=P3;
temp&=0x0F;
if(temp!=0x0F)
{
switch(temp)
{
case 0x0E:
key=0;
break;
case 0x0D:
key=1;
break;
case 0x0B:
key=2;
break;
case 0x07:
key=3;
break;
}
proc(key);
wait_stop(temp);
}
}
//*******如果不是第一排的按鍵被按鍵下則轉入第二排掃描**************//
P3=0xFF;
P3_5=0;
temp=P3;
temp&=0x0F;
if(temp!=0x0F)
{
delay();
temp=P3;
temp&=0x0F;
if(temp!=0x0F)
{
switch(temp)
{
case 0x0E:
key=4;
break;
case 0x0D:
key=5;
break;
case 0x0B:
key=6;
break;
case 0x07:
key=7;
break;
}
proc(key);
wait_stop(temp);
}
}
//****************第三排按鍵掃描*******************//
P3=0xFF;
P3_6=0;
temp=P3;
temp&=0x0F;
if(temp!=0x0F)
{
delay();
temp=P3;
temp&=0x0F;
if(temp!=0x0F)
{
switch(temp)
{
case 0x0E:
key=8;
break;
case 0x0D:
key=9;
break;
case 0x0B:
key=10;
break;
case 0x07:
key=11;
break;
}
proc(key);
wait_stop(temp);
}
}
//*********************第四排掃描*******************//
P3=0xFF;
P3_7=0;
temp=P3;
temp&=0x0F;
if(temp!=0x0F)
{
delay();
temp=P3;
temp&=0x0F;
if(temp!=0x0F)
{
switch(temp)
{
case 0x0E:
key=12;
break;
case 0x0D:
key=13;
break;
case 0x0B:
key=14;
break;
case 0x07:
key=15;
break;
}
proc(key);
wait_stop(temp);
}
}
}
}
void delay(void)
{
unsigned char i,j;
for(i=0;i<80;i++)
for(j=0;j<200;j++);
}
void proc(unsigned char key)
{
P1_0=~P1_0;
P0=table[key];
STH0=music_feq[key]/256;
STL0=music_feq[key]%256;
TH0=STH0;
TL0=STL0;
TR0=1;
}
void wait_stop(unsigned char temp)
{
do
{
temp=P3;
temp=0x0F;
}
while(temp!=0x0F);
TR0=0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -