PCB抄板STM32单片机净水器程序
- PCB抄板#include "stm32f10x.h"
- PCB抄板#include "delay.h"
- PCB抄板#include "exti.h"
- PCB抄板#include "led.h"
- PCB抄板#include "display.h"
- PCB抄板#include "key.h"
- void EXIT_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure; //定义外部中断结构变
- NVIC_InitTypeDef NVIC_InitStructure; //定义向量中断结构变量
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE );
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);// 打开复用时钟
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); //连接中断管脚PB0
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ; //B0-B1 为外部按键 作为3个独立外部输入中断
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 输入
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 最高输入速率50MHz
- GPIO_Init(GPIOB, &GPIO_InitStructure); // 选择B端口
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//设置NVIC中断分组 0位抢占优先级,4位响应优先级
- NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//选择中断通道0
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//抢占优先级0 只能为0
- NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//响应优先级2 共有16个
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断
- NVIC_Init(&NVIC_InitStructure);//完成初始化
-
-
- NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;//选择中断通道0
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//抢占优先级0 只能为0
- NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;//响应优先级2 共有16个
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断
- NVIC_Init(&NVIC_InitStructure);//完成初始化
- EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line1;//选择中断线路0和1
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//设置为中断请求,非事件请求
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//设置中断触发方式为下降沿触发
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;//外部中断使能
- EXTI_Init(&EXTI_InitStructure);
- }
- /*
- ********************************************************************************
- ** 函数名称 : EXTI0_IRQHandler(void)
- ** 函数功能 : 外部中断函数
- ** 输 入 : 无
- ** 输 出 : 无
- ** 返 回 : 无 RESET
- ********************************************************************************
- */
- void EXTI0_IRQHandler(void)
- {
- if(EXTI_GetITStatus(EXTI_Line0)!=RESET)//判断某个线上的中断是否发生
- {
-
- if((GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0)==0)) //按键真的被按下
- {
- mL=mL+sdmaichong_ml; //1脉冲为10ML水
-
- LjmL= LjmL+sdmaichong_ml;
- //100ML累计一次
-
- }
-
- // while(!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0)); //等待松手 不能使用KEY_B0代替
- EXTI_ClearITPendingBit(EXTI_Line0); //清楚中断标志位
- }
- }

芯片解密