初级会员

- 积分
- 59
- 金钱
- 59
- 注册时间
- 2019-7-26
- 在线时间
- 13 小时
|
1金钱
#include "rxc6.h"
#include "delay.h"
#include "key.h"
void RXC6_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);//使能GPIO A B端口时钟。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能复合时钟。
//D1_RXC6、PA8设置上拉输入方式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;//PA8:rxc6 D1.B键 减量
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //设置成下拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA,PA8.
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_3;//PB1,PB3:rxc6 D2.D3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //设置成下拉输入
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB,PB1.PB12
//GPIOA.8 中断线以及中断初始化配置 上升沿触发 //D1 B键遥控减量按钮
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource8);
EXTI_InitStructure.EXTI_Line=EXTI_Line8;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
//GPIOB.1 中断线以及中断初始化配置 上升沿触发 // D键 遥控复位 按钮
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1);
EXTI_InitStructure.EXTI_Line=EXTI_Line1;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
//GPIOB.3 中断线以及中断初始化配置 上升沿触发 //A键 遥控增量 按钮
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource3);
EXTI_InitStructure.EXTI_Line=EXTI_Line3;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
// //GPIOF.15 中断线以及中断初始化配置 上升沿触发 //遥控置位 按钮
// GPIO_EXTILineConfig(GPIO_PortSourceGPIOF,GPIO_PinSource15);
// EXTI_InitStructure.EXTI_Line=EXTI_Line15;
// EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
// EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
// EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
//
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn ; //B键减量D1_RXC6 PA8所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; //抢占优先级3,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x2 ; //子优先级0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn ; //D键复位D2_RXC6 PB1所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; //抢占优先级3,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x1 ; //子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn ; //A键增量D3_RXC6 PB3所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; //抢占优先级3,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x3 ; //子优先级1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
// NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn ; //使能按键D4_RXC6所在的外部中断通道
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03; //抢占优先级3,
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0 ; //子优先级0
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
// NVIC_Init(&NVIC_InitStructure);
}
extern u8 Vol_Reset_Flag;//B键 减量 RXC6,PA8
extern u8 V_Adjust;
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line8) != RESET)
{
delay_ms(5 );
if(B_D1_RXC6==1)
{
V_Adjust--;//逆时针电压减小
CS=0;
UD=0;
INC = 0;
delay_us(500);
INC = 1;
delay_us(500);
if(V_Adjust<= 1)V_Adjust=1;//数字电位器0-100台阶
CS=1;
}
EXTI_ClearITPendingBit(EXTI_Line8);
}
}
void EXTI1_IRQHandler(void ) //遥控器 D键
{
delay_ms(5 );
if(D_D2_RXC6==1)
Vol_Reset_Flag=1;//主程序处理。
EXTI_ClearITPendingBit(EXTI_Line1); //清除LINE0上的中断标志位
}
//extern u8 Vol_Set_Flag;//RXC6 减量按钮
void EXTI3_IRQHandler(void) //遥控器 A键。
{
delay_ms(5 );
if(A_D3_RXC6==1)
V_Adjust++;//顺时针电压增加
CS=0;
UD=1;
INC = 0;
delay_us(500);
INC = 1;
delay_us(500);
if(V_Adjust>=100)V_Adjust=100;//数字电位器0-100台阶
CS=1;
EXTI_ClearITPendingBit(EXTI_Line3);
}
i
|
|