#include "stm32f10x.h
const uint8_t seg_code[16] = {
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90, // 9
};
void delay_us(uint32_t us) {
for(uint32_t i = 0; i < us * 1; i++);
}
void display(uint8_t ten, uint8_t one) {
GPIOB->ODR |= 0x08;
GPIOA->ODR = seg_code[ten];
delay_us(100);
GPIOB->ODR &= ~0x08;
GPIOB->ODR |= 0x04;
GPIOA->ODR = seg_code[one];
delay_us(100);
GPIOB->ODR &= ~0x04;
}
int main(void) {
uint16_t count = 0;
uint16_t delay_cnt = 0;
RCC->APB2ENR |= (1 << 2);
GPIOA->CRL = 0x33333333;
GPIOA->ODR = 0xFF;
RCC->APB2ENR |= (1 << 3);
GPIOB->CRL &= 0xFFFF000F;
GPIOB->CRL |= 0x00003300;
GPIOB->ODR &= ~(0x04 | 0x08);
while(1) {
uint8_t ten = count / 10;
uint8_t one = count % 10;
display(ten, one);
delay_cnt++;
if(delay_cnt >= 80000) {
delay_cnt = 0;
count++;
if(count > 50) count = 0;
}
}
}
这个代码烧录到proteus里只显示00不计数