嵌入式简易电子琴系统设计.docx
《嵌入式简易电子琴系统设计.docx》由会员分享,可在线阅读,更多相关《嵌入式简易电子琴系统设计.docx(30页珍藏版)》请在冰豆网上搜索。
![嵌入式简易电子琴系统设计.docx](https://file1.bdocx.com/fileroot1/2022-11/18/e8e63e73-bc47-44c6-8c38-fc0915a6532a/e8e63e73-bc47-44c6-8c38-fc0915a6532a1.gif)
嵌入式简易电子琴系统设计
嵌入式开发试验
嵌入式简易电子琴系统设计
ARM2110实验开发板,外接矩阵键盘、蜂鸣器、LED显示屏、LED灯模块(带4.7K电阻)
主程序
#include"systemInit.h"
#include"buzzer.h"
#include"music.h"
#include"systemInit.h"
#definelcdenGPIO_PIN_0//PB0;
#definelcdrsGPIO_PIN_2//PB2;
//定义LED
#defineLED1_PERIPHSYSCTL_PERIPH_GPIOA
#defineLED1_PORTGPIO_PORTA_BASE
#defineLED1_PINGPIO_PIN_4
#defineLED2_PERIPHSYSCTL_PERIPH_GPIOA
#defineLED2_PORTGPIO_PORTA_BASE
#defineLED2_PINGPIO_PIN_5
#defineLED3_PERIPHSYSCTL_PERIPH_GPIOA
#defineLED3_PORTGPIO_PORTA_BASE
#defineLED3_PINGPIO_PIN_6
#defineLED4_PERIPHSYSCTL_PERIPH_GPIOG
#defineLED4_PORTGPIO_PORTG_BASE
#defineLED4_PINGPIO_PIN_0
#defineLED5_PERIPHSYSCTL_PERIPH_GPIOF
#defineLED5_PORTGPIO_PORTF_BASE
#defineLED5_PINGPIO_PIN_2
#defineLED6_PERIPHSYSCTL_PERIPH_GPIOG
#defineLED6_PORTGPIO_PORTG_BASE
#defineLED6_PINGPIO_PIN_1
#defineLED7_PERIPHSYSCTL_PERIPH_GPIOE
#defineLED7_PORTGPIO_PORTE_BASE
#defineLED7_PINGPIO_PIN_0
#defineLED8_PERIPHSYSCTL_PERIPH_GPIOE
#defineLED8_PORTGPIO_PORTE_BASE
#defineLED8_PINGPIO_PIN_1
//定义KEY
#defineKEY_PERIPH2SYSCTL_PERIPH_GPIOB
#defineKEY_PORT2GPIO_PORTB_BASE
#defineKEY_PIN2GPIO_PIN_6|GPIO_PIN_5|GPIO_PIN_4
//连接方式矩阵键盘的行线接PC4~7列线接PA0~3
unsignedchardata;//PD0-PD7;
unsignedcharnum;
intguan;
intjian;
intnumm;//lcd显示模块技术
//lcd模块
voidwrite_com(unsignedcharcom)//写命令
{
GPIOPinWrite(GPIO_PORTB_BASE,lcdrs,0x00);//lcdrs=0;
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|
GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,com);//PD=com;
SysCtlDelay(5*(TheSysClock/4000));//延时5ms
GPIOPinWrite(GPIO_PORTB_BASE,lcden,0xFF);//lcden=1;
SysCtlDelay(5*(TheSysClock/4000));
GPIOPinWrite(GPIO_PORTB_BASE,lcden,0x00);//lcden=0;
}
voidwrite_data(unsignedchardate)
{
GPIOPinWrite(GPIO_PORTB_BASE,lcdrs,0xFF);//lcdrs=1;
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|
GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,date);//PD=date;
SysCtlDelay(5*(TheSysClock/4000));
GPIOPinWrite(GPIO_PORTB_BASE,lcden,0xFF);//lcden=1;
SysCtlDelay(5*(TheSysClock/4000));
GPIOPinWrite(GPIO_PORTB_BASE,lcden,0x00);//lcden=0;
}
voidinit()
{
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOD);//使能A端口
GPIOPinTypeOut(GPIO_PORTD_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|
GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOB);
GPIOPinTypeOut(GPIO_PORTB_BASE,GPIO_PIN_0|GPIO_PIN_2);
GPIOPinWrite(GPIO_PORTB_BASE,lcden,0x00);//lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);//在开始清屏
write_com(0x80+0x10);//数据指针地址
}
//lcd模块结束,矩阵键盘模块开始
unsignedcharKeyScan(void)
{if(GPIOPinRead(KEY_PORT2,KEY_PIN2)==0x30)//如果按下KEY2
{num=17;
returnnum;
}
elseif(GPIOPinRead(KEY_PORT2,KEY_PIN2)==0x50)//如果按下KEY3
{num=18;
returnnum;
}
elseif(GPIOPinRead(KEY_PORT2,KEY_PIN2)==0x60)//如果按下KEY4
{num=16;
returnnum;
}
GPIOPinTypeOut(GPIO_PORTC_BASE,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
GPIOPinTypeOut(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,0Xf0);
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,0X00);
GPIOPinTypeIn(GPIO_PORTC_BASE,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
guan=GPIOPinRead(GPIO_PORTC_BASE,0xff)&0xf0;
jian=GPIOPinRead(GPIO_PORTA_BASE,0xff)&0x0f;
guan=jian|guan;
if(guan!
=0xf0)
{SysCtlDelay(5*(TheSysClock/4000));
if(guan!
=0xf0)
{GPIOPinTypeOut(GPIO_PORTC_BASE,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
GPIOPinTypeOut(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,0Xf0);
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,0X07);
GPIOPinTypeIn(GPIO_PORTC_BASE,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
guan=GPIOPinRead(GPIO_PORTC_BASE,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7)&0xf0;
jian=GPIOPinRead(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3)&0x0f;
guan=jian|guan;
if(guan==0x77)
{SysCtlDelay(5*(TheSysClock/4000));
if(guan==0x77)
{num=11;
returnnum;
}
}
if(guan==0xb7)
{SysCtlDelay(5*(TheSysClock/4000));
if(guan==0xb7)
{num=7;
returnnum;
}
}
if(guan==0xd7)
{SysCtlDelay(5*(TheSysClock/4000));
if(guan==0xd7)
{num=4;
returnnum;
}
}
if(guan==0xe7)
{SysCtlDelay(5*(TheSysClock/4000));
if(guan==0xe7)
{num=0;
returnnum;
}
}
GPIOPinTypeOut(GPIO_PORTC_BASE,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,0X0b);
GPIOPinTypeIn(GPIO_PORTC_BASE,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);