360度***编码器模块 学习笔记
本帖最后由 wambob 于 2015-11-7 22:56 编辑收到360度***编码器模块 ,模块介绍如下
https://www.cirmall.com/bbs/thread-44824-1-1.html
周末开始鼓捣。
硬件:1.360度***编码器模块
2.FRDM-KL02
编码器和FRDM-kl02连接: CLK-----PTA12
DT-------PTB5
SW-------暂时没接
+ ---------+5
GND---------GND#include <stdio.h>
#include <string.h>
#include "gpio.h"
#include "common.h"
#include "uart.h"
#define KEY3_PORT HW_GPIOA
#define KEY3_PIN 12#define KEY1_PORT HW_GPIOB #define KEY1_PIN 5void PORTA_IRQHandler(void)
{
if(PORTA_ISFR == (1<<12)) //KEY4 PTA12 上升下降沿中断
{
PORTA_PCR12 |= PORT_PCR_ISF_MASK;
if( GPIO_ReadBit(HW_GPIOA, 12)==0)
{if( GPIO_ReadBit(HW_GPIOB, 5)==0)
num++;
}
else
{
if( GPIO_ReadBit(HW_GPIOB, 5)==0)
num--;
}
}
}
两相没标,实验结果为,顺时针 num--,逆时针++,只要把两相换一下,可以换过来。
楼主上笔记好快啊,学习 wambob 发表于 2015-11-8 11:18 static/image/common/back.gif
这个也可在中断里实现
恩 是的:) ??& 发表于 2015-11-7 23:42 static/image/common/back.gif
可以用状态机的方式 把左右***以及按下一起读出来
这个也可在中断里实现 鸿鹄部落 发表于 2015-11-8 10:58 static/image/common/back.gif
回头用FPGA驱动玩玩,哈哈
没玩过FPGA 回头用FPGA驱动玩玩,哈哈 可以用状态机的方式 把左右***以及按下一起读出来:) 丢失的部分代码extern long int num;
int main(void)
{
DelayInit();
GPIO_QuickInit(KEY1_PORT, KEY1_PIN, kGPIO_Mode_IPU);
GPIO_QuickInit(KEY3_PORT, KEY3_PIN, kGPIO_Mode_IPU);
UART_QuickInit(UART0_RX_B2_TX_B1, 9600);
printf("360***编码器 demo!\r\n");
GPIO_ITDMAConfig(KEY3_PORT, 12, kGPIO_IT_RisingFallingEdge, true);
while(1)
{
printf("%ld \r\n",num);
}
页:
[1]