编辑代码

#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));
    // display_info_set(5, DISPLAY_INFO_2);
    // display_info_show();
    // display_info_set(6, DISPLAY_INFO_3);
    // display_info_show();
    // display_info_set(7, DISPLAY_INFO_4);
    // display_info_show();
    return 0;
}