#include #include void portConfig() { RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // Takt für Port A RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // Takt für Port B GPIOA->CRL &= 0x00000000; GPIOA->CRL |= 0x22222222; // PA0 - PA7 Output GPIOB->CRL &= 0x00000000; GPIOB->CRL |= 0x00000022; // PB0 - PB1 Output } void set7Seg(uint8_t zahl) { const uint8_t segmente[10] = { 0b00111111, // 0 0b00000110, // 1 0b01011011, // 2 0b01001111, // 3 0b01100110, // 4 0b01101101, // 5 0b01111101, // 6 0b00000111, // 7 0b01111111, // 8 0b01101111 // 9 }; if (zahl < 10) { GPIOA->ODR &= 0xFFFFFF00; GPIOA->ODR |= segmente[zahl]; } } void segEnable(uint8_t zahl) { if(zahl == 1) { GPIOB->ODR &= 0b00000000; GPIOB->ODR |= 0b00000001; } else if(zahl == 2) { GPIOB->ODR &= 0b00000000; GPIOB->ODR |= 0b00000010; } } uint8_t varTo7Seg(uint8_t zahl) { uint8_t einer = 0; uint8_t zehner = 0; int i = 0; if(zahl > 99) { set7Seg(0); } else { einer = zahl % 10; zehner = zahl / 10; } for(i = 0; i < 51; i++) { segEnable(1); set7Seg(zehner); wait_ms(5); segEnable(2); set7Seg(einer); wait_ms(5); } return zahl; } int main(void) { portConfig(); uint8_t zahl = 99; uint16_t tick = 0; int i = 0; while(1) { for(i = 0; i < 100; i++) { varTo7Seg(i); } wait_ms(2000); i = 0; } }