5-2对射式红外传感器计次&旋转编码器计次

对射式红外传感器计次

CountSensor.c

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
#include "stm32f10x.h"                  // Device header uint16_t CountSensor_Count; void CountSensor_Init(void){	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//开启AFIO外设	//EXTI和NVIC外设为默认开启,无需手动开启	//配置GPIO外设	GPIO_InitTypeDef GPIO_InitStructure;	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入,默认高电平	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	GPIO_Init(GPIOB, &GPIO_InitStructure);	//配置AFIO外设	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);	EXTI_InitTypeDef EXTI_InitStructure;	EXTI_InitStructure.EXTI_Line = EXTI_Line14;	EXTI_InitStructure.EXTI_LineCmd = ENABLE;	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发	EXTI_Init(&EXTI_InitStructure);	//配置NVIC	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//整个芯片只执行一次,即整个工程只运行一次此代码	NVIC_InitTypeDef NVIC_InitStructure;	NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;	NVIC_Init(&NVIC_InitStructure);} uint16_t CountSensor_Get(void){	return CountSensor_Count;} void EXTI15_10_IRQHandler(void){	if (EXTI_GetITStatus(EXTI_Line14) == SET)	{		CountSensor_Count++;//触发中断,加1		EXTI_ClearITPendingBit(EXTI_Line14);//清除中断	}} 

mian.c

123456789101112131415161718
#include "stm32f10x.h"                  // Device header#include "Delay.h"#include "OLED.h"#include "CountSensor.h"  int main(void){	OLED_Init();//初始化OLED	CountSensor_Init();//初始化传感器	OLED_ShowString(1,1,"Count:"); 	while(1)	{		OLED_ShowNum(1,7,CountSensor_Get(),5);//调用CountSensor_Get()函数,得到计次值	}} 

旋转编码器计次

Encoder.c

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
#include "stm32f10x.h"                  // Device header int16_t Encoder_Count; void Encoder_Init(void){	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//开启AFIO外设	//EXTI和NVIC外设为默认开启	//配置GPIO外设	GPIO_InitTypeDef GPIO_InitStructure;	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入,默认高电平	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_0;	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	GPIO_Init(GPIOB, &GPIO_InitStructure);	//配置AFIO外设	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1); 	EXTI_InitTypeDef EXTI_InitStructure;	EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line1;	EXTI_InitStructure.EXTI_LineCmd = ENABLE;	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;	EXTI_Init(&EXTI_InitStructure);	//配置NVIC	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//整个芯片只执行一次,即整个工程只运行一次此代码	NVIC_InitTypeDef NVIC_InitStructure;	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;	NVIC_Init(&NVIC_InitStructure); 	NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;	NVIC_Init(&NVIC_InitStructure);} int16_t Encoder_Get(void){	int16_t Temp;	Temp = Encoder_Count;	Encoder_Count = 0;	return Temp;} void EXTI0_IRQHandler(void)//反转{	if (EXTI_GetITStatus(EXTI_Line0) == SET)	{		if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == 0)		{			Encoder_Count--;		}		EXTI_ClearITPendingBit(EXTI_Line0);	}} void EXTI1_IRQHandler(void)//正传{	if (EXTI_GetITStatus(EXTI_Line1) == SET)	{		if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0) == 0)		{			Encoder_Count++;		}		EXTI_ClearITPendingBit(EXTI_Line1);	}} 
🔍 ×