void DisplayRain(void) { Rainfall cur_rainfall; uint32 red = 0U; uint8 i; static uint8 line_pos[SEG7_NUM] = { 0x00, 0x01, 0x40, 0x08, 0x01, 0x40, 0x00, 0x40 }; static Rainfall before_rainfall = 0U; static uint8 drop_cnt = 0U; /* 現在の降雨量取得 */ Rte_Call_RainfallInDR_GetRainfall(&cur_rainfall); /* 7SEG表示 */ if (before_rainfall != cur_rainfall) { before_rainfall = cur_rainfall; drop_cnt = 0; } if (cur_rainfall == 0) { SEG7_Clear(); } else { drop_cnt++; if (drop_cnt > (4U - before_rainfall)) { for (i = 0; i < SEG7_NUM; i++) { switch (line_pos[i]) { // 1段目 case 0x01: line_pos[i] = 0x40; break; // 2段目 case 0x40: line_pos[i] = 0x08; break; // 3段目 case 0x08: line_pos[i] = 0x00; break; // 初期値 default: line_pos[i] = 0x01; break; } SEG7_SET(i, line_pos[i]); drop_cnt = 0; } } } /* LED表示 */ while (cur_rainfall > 0) { red += 1 << (cur_rainfall - 1); cur_rainfall--; } sil_wrw_iop((void *) LED_G_BASE, red); }
void SEG7_Clear(void) { uint8 i; for (i = 0U; i < SEG7_NUM; i++) { SEG7_SET(i, 0U); } }
void SEG7_Hex(alt_u32 Data, alt_u8 point_mask){ alt_u8 mask = 0x01; alt_u8 seg_mask; int i; // seg_mask = 0; for(i=0;i<SEG7_NUM;i++){ seg_mask = szMap[Data & 0x0F]; Data >>= 4; if (point_mask & mask) seg_mask |= 0x80; mask <<= 1; SEG7_SET(i, seg_mask); } }
void SEG7_Decimal(alt_u32 Data, alt_u8 point_mask){ alt_u8 mask = 0x01; alt_u8 seg_mask; int i; // seg_mask = 0; for(i=0;i<SEG7_NUM;i++){ seg_mask = szMap[Data%10]; Data /= 10; if (point_mask & mask) seg_mask |= 0x80; mask <<= 1; SEG7_SET(i, seg_mask); } }
void SEG7_Number(void){ int i; for(i=0;i<SEG7_NUM;i++){ SEG7_SET(i, szMap[i]); } }
void SEG7_Full(void){ int i; for(i=0;i<SEG7_NUM;i++){ SEG7_SET(i, 0xFF); } }
void SEG7_Clear(void){ int i; for(i=0;i<SEG7_NUM;i++){ SEG7_SET(i, 0x00); } }