1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
| void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure;
RCC_DeInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12; GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_Init(GPIOA, &GPIO_InitStructure); }
void Delay_ms(int times){ OSTimeDly(OS_TICKS_PER_SEC / 1000 * times); }
void digit_select(int index){ BitAction v[4]; int i; for (i=0; i<4; i++){ if (index == i){ v[i] = Bit_SET; }else{ v[i] = Bit_RESET; } } GPIO_WriteBit(GPIOA, GPIO_Pin_11, v[0]); GPIO_WriteBit(GPIOA, GPIO_Pin_12, v[1]); GPIO_WriteBit(GPIOC, GPIO_Pin_13, v[2]); GPIO_WriteBit(GPIOC, GPIO_Pin_14, v[3]); }
void digit_show(int dight, int point){ int segment, i, base; BitAction v[8]; switch (dight){ case 0 : segment = 0xee; break; case 1 : segment = 0x24; break; case 2 : segment = 0xba; break; case 3 : segment = 0xb6; break; case 4 : segment = 0x74; break; case 5 : segment = 0xd6; break; case 6 : segment = 0xde; break; case 7 : segment = 0xa4; break; case 8 : segment = 0xfe; break; case 9 : segment = 0xf6; break; default : segment = 0xda; break; } segment |= point != 0; base = 1 << 8; for (i=0; i<8; i++){ base >>= 1; if ((segment & base )== 0){ v[i] = Bit_SET; }else{ v[i] = Bit_RESET; } } GPIO_WriteBit(GPIOA, GPIO_Pin_0, v[0]); GPIO_WriteBit(GPIOA, GPIO_Pin_1, v[1]); GPIO_WriteBit(GPIOA, GPIO_Pin_2, v[2]); GPIO_WriteBit(GPIOA, GPIO_Pin_3, v[3]); GPIO_WriteBit(GPIOA, GPIO_Pin_4, v[4]); GPIO_WriteBit(GPIOA, GPIO_Pin_5, v[5]); GPIO_WriteBit(GPIOA, GPIO_Pin_6, v[6]); GPIO_WriteBit(GPIOA, GPIO_Pin_7, v[7]); }
void led_show(int digit){ static int index = -1; int i; int base = 1000; index = (index + 1) % 4; for (i=0; i<index; i++){ base /= 10; } digit = (digit / base) % 10; digit_select(index); digit_show(digit, 0); }
int ledValue = 0;
void LED0_task(void* pdata){ while (1){ ledValue++; Delay_ms(200); } }
void LED1_task(void* pdata){ while(1){ led_show(ledValue); Delay_ms(7); } }
|