stm32编程实现按键电子琴,程序无报错但是实验箱连线后按下按键蜂鸣器无反应
用的芯片应该是stm32f103r6,至少学校发的代码里的环境配的都是f103r6,硬件应该是没有问题
后面有附上硬件连线图,想实现的功能是按下前七个按键后,蜂鸣器发出对应音符(频率)的声音;按下第8个按键后,各音符上升一个音调(既数组调用下一行)。但是连线后没有任何反应,编译软件keil5中,程序build后0error,0warning,download也正常,但是实验箱上没有任何反应(按过复位键了)
希望各位能帮忙看看是程序中还有哪些错误并帮助改正一下,谢谢了

#include <stm32f10x_conf.h>
#include <SysTick.h>
#define PBeep PCout(0)
EXTI_InitTypeDef EXTI_init;
NVIC_InitTypeDef NVIC_ini;
int yd=0;
//定义A-G音调低音音符频率
int yinfu[7][7]={{262,294,330,349,392,440,494},{294,330,370,392,440,494,554},{330,370,415,440,494,554,622},
{349,392,440,466,523,587,659},{392,440,494,523,587,659,740},{440,494,554,587,659,740,831},{494,554,622,659,740,831,932}};
//定义按键映射表
uint8_t button_map[2][4]={{1,2,3,4},{5,6,7,8}};
//初始化IO接口
void IO_init(void){
GPIO_InitTypeDef GPIOA_Init,GPIOB_Init,GPIOC_Init;
//使能A、B、C三组端口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
//PB0-7-推挽输出-连接LED灯
GPIOB_Init.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIOB_Init.GPIO_Mode=GPIO_Mode_Out_PP;
GPIOB_Init.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIOB_Init);
//PC0-推挽输出-连接蜂鸣器
GPIOC_Init.GPIO_Pin=GPIO_Pin_0;
GPIOC_Init.GPIO_Mode=GPIO_Mode_Out_PP;
GPIOC_Init.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIOC_Init);
//PA-上拉输入-连接按键
GPIOA_Init.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIOA_Init.GPIO_Mode=GPIO_Mode_IPD;
GPIO_Init(GPIOA,&GPIOA_Init);
}
void NVIC_init(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
EXTI_init.EXTI_Line=EXTI0_IRQn;
EXTI_init.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_init.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_init.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_init);
NVIC_ini.NVIC_IRQChannel=EXTI0_IRQn;
NVIC_ini.NVIC_IRQChannelPreemptionPriority=0;
NVIC_ini.NVIC_IRQChannelSubPriority=1;
NVIC_ini.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_ini);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource1);
EXTI_init.EXTI_Line=EXTI1_IRQn;
EXTI_init.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_init.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_init.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_init);
NVIC_ini.NVIC_IRQChannel=EXTI1_IRQn;
NVIC_ini.NVIC_IRQChannelPreemptionPriority=0;
NVIC_ini.NVIC_IRQChannelSubPriority=1;
NVIC_ini.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_ini);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource2);
EXTI_init.EXTI_Line=EXTI2_IRQn;
EXTI_init.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_init.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_init.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_init);
NVIC_ini.NVIC_IRQChannel=EXTI2_IRQn;
NVIC_ini.NVIC_IRQChannelPreemptionPriority=0;
NVIC_ini.NVIC_IRQChannelSubPriority=1;
NVIC_ini.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_ini);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource3);
EXTI_init.EXTI_Line=EXTI3_IRQn;
EXTI_init.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_init.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_init.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_init);
NVIC_ini.NVIC_IRQChannel=EXTI3_IRQn;
NVIC_ini.NVIC_IRQChannelPreemptionPriority=0;
NVIC_ini.NVIC_IRQChannelSubPriority=1;
NVIC_ini.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_ini);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource4);
EXTI_init.EXTI_Line=EXTI4_IRQn;
EXTI_init.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_init.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_init.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_init);
NVIC_ini.NVIC_IRQChannel=EXTI4_IRQn;
NVIC_ini.NVIC_IRQChannelPreemptionPriority=0;
NVIC_ini.NVIC_IRQChannelSubPriority=1;
NVIC_ini.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_ini);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource5);
EXTI_init.EXTI_Line=EXTI9_5_IRQn;
EXTI_init.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_init.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_init.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_init);
NVIC_ini.NVIC_IRQChannel=EXTI9_5_IRQn;
NVIC_ini.NVIC_IRQChannelPreemptionPriority=0;
NVIC_ini.NVIC_IRQChannelSubPriority=1;
NVIC_ini.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_ini);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource6);
EXTI_init.EXTI_Line=EXTI9_5_IRQn;
EXTI_init.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_init.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_init.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_init);
NVIC_ini.NVIC_IRQChannel=EXTI9_5_IRQn;
NVIC_ini.NVIC_IRQChannelPreemptionPriority=0;
NVIC_ini.NVIC_IRQChannelSubPriority=1;
NVIC_ini.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_ini);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource7);
EXTI_init.EXTI_Line=EXTI9_5_IRQn;
EXTI_init.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_init.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_init.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_init);
NVIC_ini.NVIC_IRQChannel=EXTI9_5_IRQn;
NVIC_ini.NVIC_IRQChannelPreemptionPriority=0;
NVIC_ini.NVIC_IRQChannelSubPriority=0;
NVIC_ini.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_ini);
}
void sound(int mst, int f)//第一个参数为响的时间(ms),第二个参数确定音符
{
int t=(int)1000000.0/f-10;//计算时间间隔
int n=mst*1000;//转微秒
while(n>0)//响的时间每次循环减去时间间隔,小于0时跳出
{
GPIO_SetBits(GPIOC,GPIO_Pin_0);
delay_us(5);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
delay_us(5);
delay_us(t);
n-=t+10;
}
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
delay_ms(100);
}
void EXTI0_IRQHandler(void){
sound(400,yinfu[yd][0]);
EXTI_ClearITPendingBit(EXTI_Line0);
}
void EXTI1_IRQHandler(void){
sound(400,yinfu[yd][1]);
EXTI_ClearITPendingBit(EXTI_Line1);
}
void EXTI2_IRQHandler(void){
sound(400,yinfu[yd][2]);
EXTI_ClearITPendingBit(EXTI_Line2);
}
void EXTI3_IRQHandler(void){
sound(400,yinfu[yd][3]);
EXTI_ClearITPendingBit(EXTI_Line3);
}
void EXTI4_IRQHandler(void){
sound(400,yinfu[yd][4]);
EXTI_ClearITPendingBit(EXTI_Line4);
}
void EXTI9_5_IRQHandler(void){
if(EXTI_GetITStatus(EXTI_Line5)==1){
sound(400,yinfu[yd][5]);
EXTI_ClearITPendingBit(EXTI_Line5);
}
if(EXTI_GetITStatus(EXTI_Line6)==1){
sound(400,yinfu[yd][6]);
EXTI_ClearITPendingBit(EXTI_Line6);
}
if(EXTI_GetITStatus(EXTI_Line7)==1){
if(yd<7){
yd++;
}else{
yd=0;
}
EXTI_ClearITPendingBit(EXTI_Line7);
}
}
int main(void){
IO_init();
NVIC_init();
while(1){
}
}