//-------------------------------------------------------------------------*
//工 程 名: linmin.s19
//硬件连接: PTD4接蜂鸣器,LCD显示器接入上排插座
//程序描述: *
//目 的:在实验箱上实现功能电子琴的功能
//说 明:实验箱上的蜂鸣器发出对应的音调(中音),当同时按下*和1-7时是,蜂鸣器
// 发出低音,同时按下#和1-7时,蜂鸣器发高音。只要按键没松开,蜂鸣器一直
// 发声,直到松到按键。
//日 期: 2009年06月22日 *
//-------------------------------------------------------------------------*
/*[头文件]*/
#include "GP32C.H" //包含头文件
#include "KB.h"
/*函数声明*/
extern void PWMInit(unsigned int ); //PWM初始化
extern void PWMconf(unsigned int); //PWM设置
extern void Delay_ms(unsigned char ); //延时
extern void LcdInit(void);
extern void xiao_xing_xing(void);
extern void two_tigers(void);
extern void lcdshow1(unsigned char x,unsigned char y,unsigned char str[]);
unsigned char welcome[16]=" play piano";
unsigned char name1[16]="xiao xing xing! ";
unsigned char name2[13]="two tigers ! ";
unsigned char zyinfu[]="middle:doumiddle:luemiddle:mimiddle:famiddle:suomiddle:lamiddle:xi";
unsigned char diyin[]="low:doulow:luelow:milow:falow:suolow:lalow:xi";
unsigned char gaoyin[]="high:douhigh:luehigh:mihigh:fahigh:suohigh:lahigh:xi";
//主函数
void main()
{
unsigned char KB_valve,a;
//KB_Init();
lcdshow1(0,12,welcome);
//[主循环]
while(1)
{
KB_valve=KB_Scan();//读键值
KB_valve=KB_Def(KB_valve);
if(a!=KB_valve)
{
a=KB_valve;
switch(KB_valve)
{
case '1':PWMconf(523);lcdshow1(0,10,zyinfu);break;
case '2':PWMconf(558);lcdshow1(10,20,zyinfu);break;
case '3':PWMconf(660);lcdshow1(20,29,zyinfu);break;
case '4':PWMconf(698);lcdshow1(29,38,zyinfu);break;
case '5':PWMconf(784);lcdshow1(38,48,zyinfu);break;
case '6':PWMconf(880);lcdshow1(48,57,zyinfu);break;
case '7':PWMconf(988);lcdshow1(57,66,zyinfu);break;
case 'a':PWMconf(262);lcdshow1(0,7,diyin);break;
case 'b':PWMconf(294);lcdshow1(7,14,diyin);break;
case 'c':PWMconf(330);lcdshow1(14,20,diyin);break;
case 'd':PWMconf(349);lcdshow1(20,26,diyin);break;
case 'e':PWMconf(392);lcdshow1(26,33,diyin);break;
case 'f':PWMconf(440);lcdshow1(33,39,diyin);break;
case 'g':PWMconf(494);lcdshow1(39,45,diyin);break;
case 'A':PWMconf(1046);lcdshow1(0,8,gaoyin);break;
case 'B':PWMconf(1175);lcdshow1(8,16,gaoyin);break;
case 'C':PWMconf(1318);lcdshow1(16,23,gaoyin);break;
case 'D':PWMconf(1397);lcdshow1(23,30,gaoyin);break;
case 'E':PWMconf(1568);lcdshow1(30,38,gaoyin);break;
case 'F':PWMconf(1760);lcdshow1(38,45,gaoyin);break;
case 'G':PWMconf(1976);lcdshow1(45,52,gaoyin);break;
case '#':lcdshow1(0,16,name1);xiao_xing_xing();break;
case '8':lcdshow1(0,13,name2);two_tigers();break;
default :T1SC|=(1<<5);T1SC0=0x0e;break;//停止定时器1计数器计数
}
}
}
}
void xiao_xing_xing(void)
{
unsigned int i;
unsigned char KB_valve;
for(i=1;i<=46;i++)
{
if(KB_Scan()==/*0xD7||*/0xEE/*||0xDE||0xBE||0xED||0xDD||0xBD||0xEB||0xDB||0xE7||0xB7||0x7E||0x7D||0x7B||0x77*/)
break;
switch(i)
{
case 1:PWMconf(523);break;
case 2:PWMconf(523);break;
case 3:PWMconf(784);break;
case 4:PWMconf(784);break;
case 5:PWMconf(880);break;
case 6:PWMconf(880);break;
case 7:PWMconf(784);break;
case 8:Delay_ms(255);break;
case 9:PWMconf(698);break;
case 10:PWMconf(698);break;
case 11:PWMconf(660);break;
case 12:PWMconf(660);break;
case 13:PWMconf(558);break;
case 14:PWMconf(558);break;
case 15:PWMconf(523);break;
case 16:Delay_ms(255);break;
case 17:PWMconf(784);break;
case 18:PWMconf(784);break;
case 19:PWMconf(698);break;
case 20:PWMconf(660);break;
case 21:PWMconf(558);break;
case 22:Delay_ms(255);break;
case 23:PWMconf(784);break;
case 24:PWMconf(784);break;
case 25:PWMconf(698);break;
case 26:PWMconf(698);break;
case 27:PWMconf(660);break;
case 28:PWMconf(660);break;
case 29:PWMconf(558);break;
case 30:Delay_ms(255);break;
case 31:PWMconf(523);break;
case 32:PWMconf(523);break;
case 33:PWMconf(784);break;
case 34:PWMconf(784);break;
case 35:PWMconf(880);break;
case 36:PWMconf(880);break;
case 37:PWMconf(784);break;
case 38:Delay_ms(255);break;
case 39:PWMconf(698);break;
case 40:PWMconf(698);break;
case 41:PWMconf(660);break;
case 42:PWMconf(660);break;
case 43:PWMconf(558);break;
case 44:PWMconf(558);break;
case 45:PWMconf(523);break;
case 46:Delay_ms(255);break;
//default:T1SC|=(1<<5);T1SC0=0x0e;break;//停止定时器1计数器计数
}
}
}
void two_tigers(void)
{
unsigned char j;
unsigned char KB_valve;
for(j=1;j<=40;j++)
{
if(KB_Scan()==0xD7/*)|(0xEE)|(0xDE)|(0xBE)|(0xED)|(0xDD)|(0xBD)|(0xEB)|(0xDB)|(0xE7)|(0xB7)|(0x7E)|(0x7D)|(0x7B)|(0x77)*/)
break;
switch(j)
{
case 1:PWMconf(523);break;
case 2:PWMconf(558);break;
case 3:PWMconf(660);break;
case 4:PWMconf(523);break;
case 5:Delay_ms(100);break;
case 6:PWMconf(523);break;
case 7:PWMconf(558);break;
case 8:PWMconf(660);break;
case 9:PWMconf(523);break;
case 10:Delay_ms(100);break;
case 11:PWMconf(660);break;
case 12:PWMconf(698);break;
case 13:PWMconf(784);break;
case 14:Delay_ms(200);break;
case 15:PWMconf(660);break;
case 16:PWMconf(698);break;
case 17:PWMconf(784);break;
case 18:Delay_ms(200);break;
case 19:PWMconf(784);break;
case 20:PWMconf(880);break;
case 21:PWMconf(784);break;
case 22:PWMconf(698);break;
case 23:PWMconf(660);break;
case 24:PWMconf(523);break;
case 25:Delay_ms(200);break;
case 26:PWMconf(784);break;
case 27:PWMconf(880);break;
case 28:PWMconf(784);break;
case 29:PWMconf(698);break;
case 30:PWMconf(660);break;
case 31:PWMconf(523);break;
case 32:Delay_ms(200);break;
case 33:PWMconf(523);break;
case 34:PWMconf(392);break;
case 35:PWMconf(523);break;
case 36:Delay_ms(200);break;
case 37:PWMconf(523);break;
case 38:PWMconf(392);break;
case 39:PWMconf(523);break;
case 40:Delay_ms(200);break;
}
}
}