#main.c
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
//#include "beep.h"
//#include "key.h"
#include "exti.h"
extern u8 great,fine,bad,num;
extern float Average,Percent;
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断分组
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口,波特率
LED_Init(); //初始化LED端口
EXTIX_Init(); //初始化中断输入函数
printf("-----欢迎来到中山职业技术学院!------\r\n");
printf("---请对中山职业技术学院做出评价: ---\r\n");
printf("----------按KEY0为不满意------------\r\n");
printf("---------- 按KEY1为一般-------------\r\n");
printf("---------- 按KEY2为满意-------------\r\n");
printf("\r\n");
printf("\r\n");
while(1)
{
Percent=(float)great/(great+fine+bad);
if(num==1)
{
printf("此次评价为不满意\r\n");
printf("谢谢评价!按key_up键统计情况\r\n");
printf("\r\n");
}
else if(num==2)
{
printf("此次评价为一般\r\n");
printf("谢谢评价!按key_up键统计情况\r\n");
printf("\r\n");
}
else if(num==3)
{
printf("此次评价为满意\r\n");
printf("谢谢评价!按key_up键统计情况\r\n");
printf("\r\n");
}
else if(num==4)
{
printf("当前评价总人数为: %d \r\n",great+fine+bad);
printf("当前平均分为: %1.2f \r\n",Average/(great+fine+bad));
printf("满意人数占总人数的比例为: 百分之%1.2f \r\n",Percent);
printf("当前评价满意的人数为: %d \r\n",great);
printf("当前评价一般的人数为: %d \r\n",fine);
printf("当前评价不满意的人数为: %d \r\n",bad);
printf("\r\n");
}
// switch(num)
// {
// case 1:
// {
// printf("此次评价为不满意\r\n");
// printf("谢谢评价!按key_up键统计情况\r\n");
// printf("\r\n");
// break;
// }
// case 2:
// {
// printf("此次评价为一般\r\n");
// printf("谢谢评价!按key_up键统计情况\r\n");
// printf("\r\n");
// break;
// }
// case 3:
// {
// printf("此次评价为满意\r\n");
// printf("谢谢评价!按key_up键统计情况\r\n");
// printf("\r\n");
// break;
// }
// case 4:
// {
// printf("当前评价总人数为: %d \r\n",great+fine+bad);
// printf("当前平均分为: %d \r\n",Average/3);
// printf("满意人数占总人数的比例为: %d \r\n",great/great+fine+bad);
// printf("当前评价满意的人数为: %d \r\n",great);
// printf("当前评价一般的人数为: %d \r\n",fine);
// printf("当前评价不满意的人数为: %d \r\n",bad);
// printf("\r\n");
// break;
// }
// }
if(num)
{
num=0;
}
}
}
##exti.c
#include "exti.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "beep.h"
#include "key.h"
u8 great,fine,bad,num=0;
float Average=0.0,Percent=0.0;
void EXTIX_Init(void)
{
EXTI_InitTypeDef EXTI_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE); //使能SYSCFG时钟
KEY_Init(); //按键初始化
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource4);//连接中断线EXTI4,PE4
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource3);//连接中断线EXTI3,PE3
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource2);//连接中断线EXTI2,PE2
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);//连接中断线EXTI0,PA0
EXTI_InitStruct.EXTI_Line=EXTI_Line4|EXTI_Line3|EXTI_Line2;//配置中断线EXTI4、3、2
EXTI_InitStruct.EXTI_LineCmd=ENABLE; //使能中断线
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt; //设置中断线模式为中断(中断/事件)
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling; //触发方式为下降沿触发
EXTI_Init(&EXTI_InitStruct);
EXTI_InitStruct.EXTI_Line=EXTI_Line0; //配置中断线EXTI0
EXTI_InitStruct.EXTI_LineCmd=ENABLE;
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising; //上升沿触发
EXTI_Init(&EXTI_InitStruct);
NVIC_InitStruct.NVIC_IRQChannel=EXTI2_IRQn; //初始化中断线2的NVIC
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE; //使能
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2; //抢占优先级
NVIC_InitStruct.NVIC_IRQChannelSubPriority=2; //响应优先级
NVIC_Init(&NVIC_InitStruct);
NVIC_InitStruct.NVIC_IRQChannel=EXTI3_IRQn; //配置中断线EXTI3对应的中断服务函数
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=2;
NVIC_Init(&NVIC_InitStruct);
NVIC_InitStruct.NVIC_IRQChannel=EXTI4_IRQn; //配置中断线EXTI4对应的中断服务函数
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=2;
NVIC_Init(&NVIC_InitStruct);
NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn; //配置中断线EXTI0对应的中断服务函数
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=2;
NVIC_Init(&NVIC_InitStruct);
}
void EXTI4_IRQHandler(void) //配置中断线EXTI4对应的中断服务函数
{
delay_ms(10);
if(KEY0==0)
{
great++;
Average+=3;
num=3;
}
EXTI_ClearITPendingBit(EXTI_Line4);
}
void EXTI3_IRQHandler(void) //配置中断线EXTI3对应的中断服务函数
{
delay_ms(10);
if(KEY1==0)
{
fine++;
Average+=2;
num=2;
}
EXTI_ClearITPendingBit(EXTI_Line3);
}
void EXTI2_IRQHandler(void) //配置中断线EXTI2对应的中断服务函数
{
delay_ms(10);
if(KEY2==0)
{
bad++;
Average+=1;
num=1;
}
EXTI_ClearITPendingBit(EXTI_Line2);
}
void EXTI0_IRQHandler(void) //配置中断线EXTI0对应的中断服务函数
{
delay_ms(10);
if(WK_UP==1)
{
num=4;
}
EXTI_ClearITPendingBit(EXTI_Line0);
}