STM32F407——电子评分器

#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);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值