给你个参考 display.c
<code class="language-c">#include "stm8s.h" #include "display.h" #define A(a) a ? (GPIOA->ODR |= GPIO_PIN_1):(GPIOA->ODR &= (~GPIO_PIN_1)) #define B(a) a ? (GPIOF->ODR |= GPIO_PIN_4):(GPIOF->ODR &= (~GPIO_PIN_4)) #define C(a) a ? (GPIOC->ODR |= GPIO_PIN_5):(GPIOC->ODR &= (~GPIO_PIN_5)) #define D(a) a ? (GPIOC->ODR |= GPIO_PIN_7):(GPIOC->ODR &= (~GPIO_PIN_7)) #define E(a) a ? (GPIOD->ODR |= GPIO_PIN_0):(GPIOD->ODR &= (~GPIO_PIN_0)) #define F(a) a ? (GPIOA->ODR |= GPIO_PIN_2):(GPIOA->ODR &= (~GPIO_PIN_2)) #define G(a) a ? (GPIOC->ODR |= GPIO_PIN_4):(GPIOC->ODR &= (~GPIO_PIN_4)) #define DP(a) a ? (GPIOC->ODR |= GPIO_PIN_6):(GPIOC->ODR &= (~GPIO_PIN_6)) // 0 1 2 3 4 5 6 7 8 9 P - const uint8_t display_data[] = {0xFC,0X60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFF,0xF6,0xCE,0x02}; //void Display_b(uint8_t data); //void Display_3(uint16_t data,uint8_t dp,uint8_t dig); //显示刷新函数 /* uint8_t dp == 小数点高有效 3'b000 ~ 3'b111 */ void Display(uint8_t dp) { extern uint8_t dig_1,dig_2,dig_3,display_cnt; switch(display_cnt) { case 0: GPIOD->ODR &= (~GPIO_PIN_7);//DIG3_LOW A(dig_1 & 0X80); B(dig_1 & 0X40); C(dig_1 & 0X20); D(dig_1 & 0X10); E(dig_1 & 0x08); F(dig_1 & 0X04); G(dig_1 & 0X02); DP(dp & 0x04); GPIOD->ODR |= GPIO_PIN_3;//DIG1_HIGH break; case 1: GPIOD->ODR &= (~GPIO_PIN_3);//DIG1_LOW A(dig_2 & 0X80); B(dig_2 & 0X40); C(dig_2 & 0X20); D(dig_2 & 0X10); E(dig_2 & 0x08); F(dig_2 & 0X04); G(dig_2 & 0X02); DP(dp & 0x02); GPIOD->ODR |= GPIO_PIN_2;//DIG2_HIGH break; case 2: GPIOD->ODR &= (~GPIO_PIN_2);//DIG2_LOW A(dig_3 & 0X80); B(dig_3 & 0X40); C(dig_3 & 0X20); D(dig_3 & 0X10); E(dig_3 & 0x08); F(dig_3 & 0X04); G(dig_3 & 0X02); DP(dp & 0x01); GPIOD->ODR |= GPIO_PIN_7;//DIG3_HIGH break; } display_cnt++; if(display_cnt == 3) display_cnt = 0; } void Display_Init(void) { //PA 1 2 GPIO_Init(GPIOA,(GPIO_Pin_TypeDef)(GPIO_PIN_1 | GPIO_PIN_2), GPIO_MODE_OUT_PP_LOW_FAST); //PC 4 5 6 7 GPIO_Init(GPIOC,(GPIO_Pin_TypeDef)(GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7), GPIO_MODE_OUT_PP_LOW_FAST); //PD 0 2 3 7 GPIO_Init(GPIOD,(GPIO_Pin_TypeDef)(GPIO_PIN_0 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_7), GPIO_MODE_OUT_PP_LOW_FAST); //PF 4 GPIO_Init(GPIOF,GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST); } /* 数码管显示数据刷新 uint16_t data == 显示数据 0 ~ 999 */ void Display_update(uint16_t data) { extern uint8_t dig_1,dig_2,dig_3; dig_1 = display_data[((uint8_t)(data/100))] ; dig_2 = display_data[((uint8_t)((data%100)/10))]; dig_3 = display_data[((uint8_t)(data%10))]; } </code>
display.h
<code class="language-c">#include "stm8s.h" #ifndef DISPLAY_H_ #define DISPLAY_H_ void Display_Init(void);//数码管初始化 void Display(uint8_t dp);//数码管刷新 void Display_update(uint16_t data);//数码管显示数据更新 #endif </code>
我是stm8io冲突没法使用整组io只能这么搞了 每次调用显示函数移位一次每次显示小号69 -71时钟周期
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |