Инкрементальный энкодер KY-040 STM32F103 LCD 2.2' SPI
STM32F AVR GSM Разное

Инкрементальный энкодер KY-040 STM32F103 LCD 2.2' SPI

Инкрементальный энкодер KY-040 STM32F103 LCD 2.2' SPI

Схема

Схема

Диаграмма

Диаграмма

Скрин LCD 2.2' SPI

Скрин LCD 2.2' SPI

Программа



#include "main.h"

uint32_t counter=100;
_Bool OldPinCLK;

//==============================================================================
int main(void)
{
GPIOinit();
SPIinit();
LCDinit();
EXTI_init();

LCDclr(0, 0, 320, 240, BLACK);
SetBright(1);

DrawString("Incremental encoder", 0, 204, WHITE, BLACK);

//==============================================================================
//==============================================================================
//==============================================================================
while(1) {

if (!(GPIOB->IDR & ENC_SW)) {SetBright(2);}
else {SetBright(1);}

DrawDigit(counter, 0, 50, GREEN);

} // END while(1)
} // END main
//==============================================================================
//==============================================================================
//==============================================================================

void Delay(uint32_t delayTime) // ~ 1mks 72mHz
{
for (uint32_t i = 0; i < delayTime*9; i++);
}


// IRQ =========================================================================
void EXTI9_5_IRQHandler(void) {

//-------------------------------------------
if (EXTI_GetITStatus(EXTI_Line8) != RESET) {

_Bool PinCLK= !(GPIOB->IDR & ENC_CLK);
if (PinCLK != OldPinCLK){
if (!(GPIOB->IDR & ENC_DT) != PinCLK) {
if (counter<99999) {counter ++;}
} else {
if (counter>0) {counter--;}
}
}
OldPinCLK = PinCLK;
}
EXTI_ClearITPendingBit(EXTI_Line8);
}