#include <stdio.h>
#include <string.h>
#define DISPLAY_LED_A 0x01
#define DISPLAY_LED_B 0x02
#define DISPLAY_LED_C 0x04
#define DISPLAY_LED_D 0x08
#define DISPLAY_LED_E 0x10
#define DISPLAY_LED_F 0x20
#define DISPLAY_LED_G 0x40
#define DISPLAY_LED_DP 0x80
#define DISPLAY_INFO_0 (DISPLAY_LED_A|DISPLAY_LED_B|DISPLAY_LED_C|DISPLAY_LED_D|DISPLAY_LED_E|DISPLAY_LED_F)
#define DISPLAY_INFO_1 (DISPLAY_LED_E|DISPLAY_LED_F)
#define DISPLAY_INFO_2 (DISPLAY_LED_A|DISPLAY_LED_B|DISPLAY_LED_D|DISPLAY_LED_E|DISPLAY_LED_G)
#define DISPLAY_INFO_3 (DISPLAY_LED_A|DISPLAY_LED_B|DISPLAY_LED_C|DISPLAY_LED_D|DISPLAY_LED_G)
#define DISPLAY_INFO_4 (DISPLAY_LED_B|DISPLAY_LED_C|DISPLAY_LED_F|DISPLAY_LED_G)
#define DISPLAY_INFO_5 (DISPLAY_LED_A|DISPLAY_LED_C|DISPLAY_LED_D|DISPLAY_LED_F|DISPLAY_LED_G)
#define DISPLAY_INFO_6 (DISPLAY_LED_A|DISPLAY_LED_C|DISPLAY_LED_D|DISPLAY_LED_E|DISPLAY_LED_F|DISPLAY_LED_G)
#define DISPLAY_INFO_7 (DISPLAY_LED_A|DISPLAY_LED_B|DISPLAY_LED_C)
#define DISPLAY_INFO_8 (DISPLAY_LED_A|DISPLAY_LED_B|DISPLAY_LED_C|DISPLAY_LED_D|DISPLAY_LED_E|DISPLAY_LED_F|DISPLAY_LED_G)
#define DISPLAY_INFO_9 (DISPLAY_LED_A|DISPLAY_LED_B|DISPLAY_LED_C|DISPLAY_LED_D|DISPLAY_LED_F|DISPLAY_LED_G)
#define DISPLAY_INFO_A (DISPLAY_LED_A|DISPLAY_LED_B|DISPLAY_LED_C|DISPLAY_LED_E|DISPLAY_LED_F|DISPLAY_LED_G)
#define DISPLAY_INFO_b (DISPLAY_LED_C|DISPLAY_LED_D|DISPLAY_LED_E|DISPLAY_LED_F|DISPLAY_LED_G)
#define DISPLAY_INFO_C (DISPLAY_LED_A|DISPLAY_LED_D|DISPLAY_LED_E|DISPLAY_LED_F)
#define DISPLAY_INFO_d (DISPLAY_LED_B|DISPLAY_LED_C|DISPLAY_LED_D|DISPLAY_LED_E|DISPLAY_LED_G)
#define DISPLAY_INFO_E (DISPLAY_LED_A|DISPLAY_LED_D|DISPLAY_LED_E|DISPLAY_LED_F|DISPLAY_LED_G)
#define DISPLAY_INFO_F (DISPLAY_LED_A|DISPLAY_LED_E|DISPLAY_LED_F|DISPLAY_LED_G)
#define DISPLAY_INFO_H (DISPLAY_LED_B|DISPLAY_LED_C|DISPLAY_LED_E|DISPLAY_LED_F|DISPLAY_LED_G)
#define DISPLAY_INFO_n (DISPLAY_LED_C|DISPLAY_LED_E|DISPLAY_LED_G)
#define DISPLAY_INFO_o (DISPLAY_LED_C|DISPLAY_LED_D|DISPLAY_LED_E|DISPLAY_LED_G)
#define DISPLAY_INFO_P (DISPLAY_LED_A|DISPLAY_LED_B|DISPLAY_LED_E|DISPLAY_LED_F|DISPLAY_LED_G)
#define DISPLAY_INFO_DP (DISPLAY_LED_DP)
#define DISPLAY_INFO_NG (DISPLAY_LED_G)
#define DISPLAY_INFO_NONE (0)
#define DISPLAY_COM_NUM 8
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef unsigned char BYTE;
typedef struct
{
uchar flag;
uchar buffer[DISPLAY_COM_NUM];
}display_t;
static display_t s_display;
void display_init(void)
{
s_display.flag = 0;
memset(s_display.buffer, 0x00, DISPLAY_COM_NUM);
}
void display_info_set(uchar com, uchar datas)
{
uchar index = 0;
if (com >= DISPLAY_COM_NUM)
{
com = DISPLAY_COM_NUM - 1;
}
for (index = 0; index < 8; index++ )
{
if ((datas >> index) & 0x01)
{
s_display.buffer[index] |= (1 << com);
}
else
{
s_display.buffer[index] &= ~(1 << com);
}
}
}
ucha display_info_get(uchar com)
{
uchar index = 0, datas = 0;
if (com >= DISPLAY_COM_NUM)
{
com = DISPLAY_COM_NUM - 1;
}
for (index = 0; index < 8; index++ )
{
if (s_display.buffer[index] & (1 << com))
{
datas |= 1 << index;
}
}
return datas;
}
void display_info_show(void)
{
uchar index = 0;
printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\r\n");
for (index = 0; index < DISPLAY_COM_NUM; index++ )
{
printf("com:%d, data:%x\r\n",index, s_display.buffer[index]);
}
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n");
}
int main (void)
{
display_init();
printf("display:%x\r\n", DISPLAY_INFO_1);
display_info_set(1, DISPLAY_INFO_1);
display_info_show();
printf("display_get:%x\r\n", display_info_get(1));
return 0;
}