資源簡介
輸入為4*4按鍵,每個按鍵代表不同的音符,預先已經設置好音符表,即使蜂鳴器發出不同頻率的聲音

代碼片段和文件信息
#include
#define?uint?unsigned?int
#define?uchar?unsigned?char
uchar?temp;
uchar?key;
uchar?ij;
uchar?STH0;
uchar?STL0;
sbit?beer=P1^0;
sbit?P34=P3^4;sbit?P35=P3^5;
sbit?P36=P3^6;sbit?P37=P3^7;
uint?code?tab[]={64021641036426064400645246458064684647776482064898649686503065058651106515765178};?//音符表
/**********************主函數*******************/
void?main(void)
{
TMOD=0x01;???????//設置定時器為工作方式1,16位定時/計數器模式
ET0=1;???????//打開定時器0
EA=1;?????//允許所有中斷
while(1)
{
??P3=0xff;
P34=0;
temp=P3;
temp=temp&0x0f;????
if(temp!=0x0f)??//從第一行開始掃描鍵盤
{
for(i=50;i>0;i--)??//延時,反彈跳
for(j=200;j>0;j--);
temp=P3;
temp=temp&0x0f;???
if(temp!=0x0f)?
?{
temp=P3;
temp=temp&0x0f;???
switch(temp)???//讀取按鍵值
{
case?0x0e:?key=0;break;
case?0x0d:?key=1;break;
case?0x0b:?key=2;break;
case?0x07:?key=3;break;
}
temp=P3;
beer=~beer;
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;?????????????//開定時器0
temp=temp&0x0f;
while(temp!=0x0f)
{temp=P3;
?? temp=temp&0x0f;?
?}
?TR0=0;?
}
}
P3=0xff;
P35=0;
temp=P3;
temp=temp&0x0f;????
if(temp!=0x0f)??//從第二行開始掃描
{
for(i=50;i>0;i--)??//延時,反彈跳
for(j=200;j>0;j--);
temp=P3;
temp=temp&0x0f;???
if(temp!=0x0f)?
?{
temp=P3;
temp=temp&0x0f;???
switch(temp)???//讀取按鍵值
{
case?0x0e:?key=4;break;
case?0x0d:?key=5;break;
case?0x0b:?key=6;break;
case?0x07:?key=7;break;
}
temp=P3;
beer=~beer;
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;?????????????//開定時器0
temp=temp&0x0f;
while(temp!=0x0f)
{temp=P3;
?? temp=temp&0x0f;?
?}
?TR0=0;?
}
}
P3=0xff;
P36=0;
temp=P3;
temp=temp&0x0f;????
if(temp!=0x0f)??//從第三行開始掃描
{
for(i=50;i>0;i--)??//延時,反彈跳
for(j=200;j>0;j--);
temp=P3;
temp=temp&0x0f;???
if(temp!=0x0f)?
?{
temp=P3;
temp=temp&0x0f;???
switch(temp)???//讀取按鍵值
{
case?0x0e:?key=8;break;
case?0x0d:?key=9;break;
case?0x0b:?key=10;break;
case?0x07:?key=11;break;
}
temp=P3;
beer=~beer;
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;?????????????//開定時器0
temp=temp&0x0f;
while(temp!=0x0f)
{temp=P3;
?? temp=temp&0x0f;?
?}
?TR0=0;?
}
}
P3=0xff;
P37=0;
temp=P3;
temp=temp&0x0f;????
if(temp!=0x0f)??//第四行
{
for(i=50;i>0;i--)??//延時,反彈跳
for(j=200;j>0;j--);
temp=P3;
temp=temp&0x0f;???
if(temp!=0x0f)?
?{
temp=P3;
temp=temp&0x0f;???
switch(temp)???//讀取按鍵值
{
case?0x0e:?key=12;break;
case?0x0d:?key=13;break;
case?0x0b:?key=14;break;
case?0x07:?key=15;break;
}
temp=P3;
beer=~beer;
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;?????????????//開定時器0
temp=temp&0x0f;
while(temp!=0x0f)
{temp=P3;
?? temp=temp&0x0f;?
?}
?TR0=0;?
}
}
?}
}
/*****************定時器T0中斷服務函數*********************/
void?to(voi
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-11-01?18:58??簡易電子琴設計\
?????文件???????17525??2018-08-25?16:15??簡易電子琴設計\Backup?Of?新工程.pdsbak
?????文件????????1852??2018-08-25?15:47??簡易電子琴設計\Last?Loaded?新工程.pdsbak
?????文件???????18168??2018-08-27?15:35??簡易電子琴設計\Last?Loaded?簡易電子琴.pdsbak
?????目錄???????????0??2018-11-01?18:58??簡易電子琴設計\Listings\
?????文件???????14537??2018-08-28?15:15??簡易電子琴設計\Listings\STARTUP.lst
?????文件????????7121??2018-08-28?15:15??簡易電子琴設計\Listings\簡易電子琴.lst
?????文件???????10748??2018-08-28?15:15??簡易電子琴設計\Listings\簡易電子琴.m51
?????目錄???????????0??2018-11-01?18:58??簡易電子琴設計\ob
?????文件?????????828??2018-08-28?15:15??簡易電子琴設計\ob
?????文件????????6696??2018-08-28?15:15??簡易電子琴設計\ob
?????文件????????1030??2018-08-28?15:15??簡易電子琴設計\ob
?????文件????????1768??2018-08-28?15:15??簡易電子琴設計\ob
?????文件?????????133??2018-08-28?15:15??簡易電子琴設計\ob
?????文件????????7237??2018-08-28?15:15??簡易電子琴設計\ob
?????文件????????6376??2016-04-01?17:01??簡易電子琴設計\STARTUP.A51
?????文件?????????328??2018-08-25?16:15??簡易電子琴設計\新工程.pdsprj.ODM.ggg.workspace
?????文件????????3214??2018-08-28?16:12??簡易電子琴設計\簡易電子琴.c
?????文件???????17649??2018-08-28?15:18??簡易電子琴設計\簡易電子琴.pdsprj
?????文件????????2200??2018-08-28?15:39??簡易電子琴設計\簡易電子琴.pdsprj.ODM.ggg.workspace
?????文件???????85192??2018-08-28?16:12??簡易電子琴設計\簡易電子琴.uvgui.ggg
?????文件????????5476??2018-08-25?17:28??簡易電子琴設計\簡易電子琴.uvopt
?????文件???????14062??2018-08-25?17:28??簡易電子琴設計\簡易電子琴.uvproj
評論
共有 條評論