#include "display.h"
#include "system.h"
//const uint8_t num[24] = { 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
//// 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ,
// 0x7F,0x6F,0x40,0x76,0x38,0x3E,0x79,0x00,
//// 8 , 9 , - , H , L , U , E ,Blank,
// 0x77,0x31,0x39,0x46,0x0E,0x74,0x71,0x37};
//// R , T , C , -|, _|, h, F, M,
const uint8_t Table[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 32-41
// ' ',
0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xFC, 0x60, 0xDA, 0xF2, // 42-51
// - 0 1 2 3
0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6, 0x00, 0x00, 0x00, 0x00, // 52-61
// 4, 5, 6, 7, 8, 9,
0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x00, 0x9E, 0x8E, 0x00, // 62-71
// A, B, C, D, E, F, G,
0x6E, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0xFC, 0x00, 0x00, // 72-81
// H, I, J, K, L, M, N, O, P Q,
0xEE, 0xB6, 0x8C, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 82-91
// R, S, T, U, V, W, X, Y, Z,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, // 92-101
// a, b, c, d, e,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x3A, // 102-111
// f, g, h, i, j, k, l, m, n, o,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 112-121
// p, q, r, s, t, u, v, w, x, y,
0x00 };
// z,
uint8_t GPIO[8] = {LED_A_GPIO_Port, LED_B_GPIO_Port, LED_C_GPIO_Port, LED_D_GPIO_Port, LED_E_GPIO_Port, LED_F_GPIO_Port, LED_G_GPIO_Port, LED_H_GPIO_Port};
uint8_t Pin[8] = {LED_A_Pin , LED_B_Pin, LED_C_Pin, LED_D_Pin, LED_E_Pin, LED_F_Pin, LED_G_Pin, LED_H_Pin};
DISP_SET S_DISPINFO = {' ', ' ', ' '};
/**************************************************
*函数名称:void Display_Bit(void)
*函数功能:数码管位选显示:把代码发送到移位寄存器
*入口参数:udata
*出口参数:void
**************************************************/
void Display_Bit(uint8_t udata)
{
uint8_t Code;
uint8_t n = 0;
if(udata < 10)
{
Code = Table['0' - ' ' + udata];
}
else
{
Code = Table[udata - ' '];
}
for(n = 0; n < 8; n++)
{
if(Code & 0x80)
{
Gpio_WriteOutputIO(GPIO[n], Pin[n], TRUE);
}
else
{
Gpio_WriteOutputIO(GPIO[n], Pin[n], FALSE);
}
Code <<= 1;
}
}
/**************************************************
*函数名称:void Display(void)
*函数功能:显示处理
*入口参数:void
*出口参数:void
**************************************************/
void Display(void)
{
static uint8_t s_Bit = 0;
if(S_DISPINFO.DispCtrl == DISP_OFF)
{
COM0(FALSE);
COM1(FALSE);
COM2(FALSE);
}
else
{
if(s_Bit == 0)
{
COM0(FALSE);
COM1(FALSE);
COM2(FALSE);
Display_Bit(S_DISPINFO.DispH);
COM0(TRUE);
s_Bit = 1;
}
else if(s_Bit == 1)
{
COM0(FALSE);
COM1(FALSE);
COM2(FALSE);
Display_Bit(S_DISPINFO.DispM);
if(S_DISPINFO.DispDP)
{
DISP_H(TRUE);
}
else
{
DISP_H(FALSE);
}
COM1(TRUE);
s_Bit = 2;
}
else if(s_Bit == 2)
{
COM0(FALSE);
COM1(FALSE);
COM2(FALSE);
Display_Bit(S_DISPINFO.DispL);
COM2(TRUE);
s_Bit = 0;
}
else{}
}
}
/**************************************************
*函数名称:DISP_SET* disp_Set(void)
*函数功能:数码管显示
*入口参数:void
*出口参数:void
**************************************************/
DISP_SET* disp_Set(void)
{
return &S_DISPINFO;
}
/************************************
* 功能:数码管显示出错
* 参数:无
* 返回值:无
************************************/
void ShowErr(char* str)
{
uint8_t* p_Disp = (uint8_t*)disp_Set();
for(char* p = str; p < str+3; p++, p_Disp++)
{
*p_Disp = *p;
}
disp_Set()->DispDP = 0;
}