Created
May 25, 2017 21:39
-
-
Save jrsa/685fe59dbf4ad2bf146401976e072dcb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "stm32f10x.h" | |
const uint16_t kPinClk = GPIO_Pin_11; | |
const uint16_t kPinEnable = GPIO_Pin_10; | |
const uint16_t kPinData = GPIO_Pin_1; | |
const uint16_t kCharacterEnablePins[] = { | |
GPIO_Pin_5, | |
GPIO_Pin_6, | |
GPIO_Pin_7, | |
GPIO_Pin_8 | |
}; | |
void Init() { | |
RCC_APB2PeriphClockCmd( | |
RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | | |
RCC_APB2Periph_TIM1 | RCC_APB2Periph_SPI1 | RCC_APB2Periph_USART1 | | |
RCC_APB2Periph_ADC1, ENABLE); | |
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); // for dac | |
GPIO_InitTypeDef gpio_init; | |
gpio_init.GPIO_Pin = kPinClk; | |
gpio_init.GPIO_Pin |= kPinEnable; | |
gpio_init.GPIO_Pin |= kPinData; | |
gpio_init.GPIO_Pin |= kCharacterEnablePins[0]; | |
gpio_init.GPIO_Pin |= kCharacterEnablePins[1]; | |
gpio_init.GPIO_Pin |= kCharacterEnablePins[2]; | |
gpio_init.GPIO_Pin |= kCharacterEnablePins[3]; | |
gpio_init.GPIO_Speed = GPIO_Speed_50MHz; | |
gpio_init.GPIO_Mode = GPIO_Mode_Out_PP; | |
GPIO_Init(GPIOB, &gpio_init); | |
GPIOB->BSRR = kPinEnable; | |
GPIOB->BSRR = kCharacterEnablePins[0]; | |
GPIOB->BSRR = kCharacterEnablePins[1]; | |
GPIOB->BSRR = kCharacterEnablePins[2]; | |
GPIOB->BSRR = kCharacterEnablePins[3]; | |
} | |
void Shift14SegmentsWord(uint16_t data) { | |
GPIOB->BRR = kPinEnable; | |
for (uint16_t i = 0; i < 16; ++i) { | |
GPIOB->BRR = kPinClk; | |
if (data & 1) { | |
GPIOB->BSRR = kPinData; | |
} else { | |
GPIOB->BRR = kPinData; | |
} | |
data >>= 1; | |
GPIOB->BSRR = kPinClk; | |
} | |
GPIOB->BSRR = kPinEnable; | |
} | |
const uint8_t kDisplayWidth = 4; | |
const uint8_t kBrightnessLevels = 4; | |
uint16_t active_position_; | |
uint16_t brightness_pwm_cycle_; | |
uint16_t brightness_ = 3; | |
int main(void) | |
{ | |
Init(); | |
int t; | |
while(t++) { | |
uint16_t bbval = ((t << 1) ^ ((t << 1) + (t >> 7) & t >> 12)) | t >> (4 - (1 ^ 7 & (t >> 15))) | t >> 7; | |
Shift14SegmentsWord((uint16_t)bbval); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment