buxx_adrt.c

来自「bu1566dsp芯片用来处理ov7660或其他30万摄像模组的图像预览.图像拍」· C语言 代码 · 共 1,346 行 · 第 1/4 页

C
1,346
字号
        0x0000, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF,
        0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
};

const UINT16 sl10_w[] = {
    0x0006, 0x000A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000,
        0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0x0000,
        0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF,
        0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF,
        0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
};

const UINT16 sl10_x[] = {
    0x0006, 0x000A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000,
        0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0x0000, 0xFFFF,
        0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
};

const UINT16 sl10_y[] = {
    0x0006, 0x000A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000,
        0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF,
        0x0000, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF,
        0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000,
        0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
};

const UINT16 sl10_z[] = {
    0x0006, 0x000A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
};

const UINT16 font_sp[] = {
    0x0006, 0x000A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
};

/*
const UINT16 font_colom[] = {
    0x0006, 0x000A, 
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0x0000, 0x0000, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 
        0xFFFF, 0xFFFF, 0x0000, 0x0000, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
        0xFFFF, 0xFFFF, 0x0000, 0x0000, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 
        0xFFFF, 0xFFFF, 0x0000, 0x0000, 0xFFFF, 0xFFFF,
        0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
};
*/
//FONT TABLE
const UINT16 *const fonttable[] = {
    font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp,     //0x00-0x0f
    font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp,     //0x10-0x1f
    font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp,     //0x20-0x2f
    n10_0, n10_1, n10_2, n10_3, n10_4, n10_5, n10_6, n10_7, n10_8, n10_9, font_sp, font_sp, font_sp, font_sp, font_sp, font_sp, //0x30-0x3f
    font_sp, cl10_A, cl10_B, cl10_C, cl10_D, cl10_E, cl10_F, cl10_G, cl10_H, cl10_I, cl10_J, cl10_K, cl10_L, cl10_M, cl10_N, cl10_O,    //0x40-0x4f
    cl10_P, cl10_Q, cl10_R, cl10_S, cl10_T, cl10_U, cl10_V, cl10_W, cl10_X, cl10_Y, cl10_Z, font_sp, font_sp, font_sp, font_sp, font_sp,        //0x50-0x5f
    font_sp, sl10_a, sl10_b, sl10_c, sl10_d, sl10_e, sl10_f, sl10_g, sl10_h, sl10_i, sl10_j, sl10_k, sl10_l, sl10_m, sl10_n, sl10_o,    //0x60-0x6f
    sl10_p, sl10_q, sl10_r, sl10_s, sl10_t, sl10_u, sl10_v, sl10_w, sl10_x, sl10_y, sl10_z, font_sp, font_sp, font_sp, font_sp, font_sp,        //0x70-0x7f
};

#endif

/* ************************************************** */
/*		    GLOBAL FUNCTIONS		      */
/* ************************************************** */

/* ************************************************** */
/*		     LOCAL FUNCTIONS		      */
/* ************************************************** */



//-----------------------------------------------------------------------------
//                     lcd display clear (LCD direct write)
//-----------------------------------------------------------------------------
void aDRT_clear(const UINT16 st_x, const UINT16 st_y, const UINT16 xsize,
                const UINT16 ysize, const UINT32 back_color)
{
    UINT16 /*UINT8 */ mcdata[] =
    {
    M_CMD_DATA1, M_CMD_DATA2, M_CMD_DATA3, M_CMD_DATA4, M_CMD_DATA5,
            M_CMD_DATA6, M_CMD_DATA7};
    UINT16 /*UINT8 */ scdata[] =
    {
    S_CMD_DATA1, S_CMD_DATA2, S_CMD_DATA3, S_CMD_DATA4, S_CMD_DATA5,
            S_CMD_DATA6, S_CMD_DATA7};
    int i, wcnt, write_count;
    UINT16 color_data;
    UINT16 colortype;

    aDSC_Quit_Preview();

    //A setup of a LCD indication area
    column_page_set(st_x, st_x + xsize - 1, st_y, st_y + ysize - 1);

    // Main or Sub LCD setup (write area)
    if (bit_read(LCDCNT, bLCD_SEL) == sMAIN_ACS)
    {
        for (i = 0; i < M_EXCMD; i++)
        {
            *LCD_CMD_WRITE = mcdata[i];
        }
        colortype = M_LCD_CTYPE;
    }
    else
    {
        for (i = 0; i < S_EXCMD; i++)
        {
            *LCD_CMD_WRITE = scdata[i];
        }
        colortype = S_LCD_CTYPE;
    }

    //data write
    switch (colortype)
    {
    case sC444B8A2:
        write_count = xsize * ysize;
        for (wcnt = 0; wcnt < write_count; wcnt++)
        {
            *LCD_PDAT_WRITE = ((back_color & 0xf00000) >> 16) | ((back_color & 0x00f000) >> 12);        //RGB Data are written
            *LCD_PDAT_WRITE = back_color & 0x0000f0;
        }
        break;
    case sC444B8A2B:
        write_count = xsize * ysize;
        for (wcnt = 0; wcnt < write_count; wcnt++)
        {
            *LCD_PDAT_WRITE = (back_color & 0xf00000) >> 20;    //RGB Data are written
            *LCD_PDAT_WRITE =
                ((back_color & 0x00f000) >> 8) | ((back_color & 0x0000f0)
                                                  >> 4);
        }
        break;
    case sC444B8A15:
        write_count = xsize * ysize / 2;
        for (wcnt = 0; wcnt < write_count; wcnt++)
        {
            *LCD_PDAT_WRITE = ((back_color & 0xf00000) >> 16) | ((back_color & 0x00f000) >> 12);        //RGB Data are written
            *LCD_PDAT_WRITE =
                (back_color & 0xf0) | ((back_color & 0xf00000) >> 20);
            *LCD_PDAT_WRITE =
                ((back_color & 0x00f000) >> 8) | ((back_color & 0xf0) >>
                                                  4);
        }
        break;
    case sC565B16A1:
        write_count = xsize * ysize;
        color_data = ((back_color & 0xf80000) >> 8) | ((back_color & 0x00fc00) >> 5) | ((back_color & 0x0000f8) >> 3);  //RGB Data are written
        for (wcnt = 0; wcnt < write_count; wcnt++)
        {
            *LCD_PDAT_WRITE = color_data;
        }
        break;
    case sC565B8A2:
        write_count = xsize * ysize;
        for (wcnt = 0; wcnt < write_count; wcnt++)
        {
            *LCD_PDAT_WRITE = ((back_color & 0xf80000) >> 16) | (back_color & 0x00e000) >> 13;  //RGB Data are written
            *LCD_PDAT_WRITE =
                ((back_color & 0x001c00) >> 5) | (back_color & 0x0000f8) >>
                3;
        }
        break;
    case sC666B8A3:
        write_count = xsize * ysize;
        for (wcnt = 0; wcnt < write_count; wcnt++)
        {
            *LCD_PDAT_WRITE = (back_color & 0xfc0000) >> 16;    //RGB Data are written
            *LCD_PDAT_WRITE = (back_color & 0x00fc00) >> 8;
            *LCD_PDAT_WRITE = back_color & 0x0000fc;
        }
        break;
    case sC666B8A3B:
        write_count = xsize * ysize;
        for (wcnt = 0; wcnt < write_count; wcnt++)
        {
            *LCD_PDAT_WRITE = ((back_color & 0xfc0000) >> 16) | ((back_color & 0x00c000) >> 14);        //RGB Data are written
            *LCD_PDAT_WRITE =
                (back_color & 0x003c00) >> 6 | ((back_color & 0x0000f0) >>
                                                4);
            *LCD_PDAT_WRITE = (back_color & 0x00000c) << 4;
        }
        break;
#if defined sC666B9a2
    case sC666B9A2:
        write_count = xsize * ysize;
        for (wcnt = 0; wcnt < write_count; wcnt++)
        {
            *LCD_PDAT_WRITE = ((back_color & 0xfc0000) >> 15) | (back_color & 0x00e000) >> 13;  //RGB Data are written
            *LCD_PDAT_WRITE =
                ((back_color & 0x001c00) >> 4) | (back_color & 0x0000fc) >>
                2;
        }
        break;
#endif
    }

    if (bit_read(LCDCNT, bLCD_SEL) == sMAIN_ACS)
    {
        column_page_set(0, M_LCD_WSIZE - 1, 0, M_LCD_HSIZE - 1);
    }
    else
    {
        column_page_set(0, S_LCD_WSIZE - 1, 0, S_LCD_HSIZE - 1);
    }


}


//-----------------------------------------------------------------------------
//                      rgb565 data write (LCD direct write)
//-----------------------------------------------------------------------------
void aDRT_write_rgb565(const UINT16 * rgb_data, const UINT16 st_x,
                       const UINT16 st_y)
{
    UINT16 /*UINT8 */ mcdata[] =
    {
    M_CMD_DATA1, M_CMD_DATA2, M_CMD_DATA3, M_CMD_DATA4, M_CMD_DATA5,
            M_CMD_DATA6, M_CMD_DATA7};
    UINT16 /*UINT8 */ scdata[] =
    {
    S_CMD_DATA1, S_CMD_DATA2, S_CMD_DATA3, S_CMD_DATA4, S_CMD_DATA5,
            S_CMD_DATA6, S_CMD_DATA7};
    int i, wcnt, write_count;
    UINT16 temp;
    UINT16 colortype;
    UINT16 xsize, ysize;

    xsize = *rgb_data;
    rgb_data++;
    ysize = *rgb_data;
    rgb_data++;

    aDSC_Quit_Preview();

    // Main or Sub LCD setup (write area)
    column_page_set(st_x, st_x + xsize - 1, st_y, st_y + ysize - 1);

    if (bit_read(LCDCNT, bLCD_SEL) == sMAIN_ACS)
    {
        for (i = 0; i < M_EXCMD; i++)
        {
            *LCD_CMD_WRITE = mcdata[i];
        }
        colortype = M_LCD_CTYPE;
    }
    else
    {
        for (i = 0; i < S_EXCMD; i++)
        {
            *LCD_CMD_WRITE = scdata[i];
        }
        colortype = S_LCD_CTYPE;
    }

    //data write
    switch (colortype)
    {
    case sC444B8A2:
        write_count = xsize * ysize;
        for (wcnt = 0; wcnt < write_count; wcnt++)
        {
            *LCD_PDAT_WRITE = (*rgb_data & 0xf000) >> 8 | (*rgb_data & 0x0780) >> 7;    //RGB Data are written
            *LCD_PDAT_WRITE = (*rgb_data & 0x001e) << 3;
            rgb_data++;
        }
        break;
    case sC444B8A2B:
        write_count = xsize * ysize;
        for (wcnt = 0; wcnt < write_count; wcnt++)
        {
            *LCD_PDAT_WRITE = (*rgb_data & 0xf000) >> 12;       //RGB Data are written
            *LCD_PDAT_WRITE =
                (*rgb_data & 0x0780) >> 3 | (*rgb_data & 0x001e) >> 1;
            rgb_data++;
        }
        break;
    case sC444B8A15:
        write_count = xsize * ysize / 2;
        for (wcnt = 0; wcnt < write_count; wcnt++)
        {
            *LCD_PDAT_WRITE = ((*rgb_data & 0xf000) >> 8) | ((*rgb_data & 0x0780) >> 7);        //RGB Data are written
            temp = (*rgb_data & 0x001e) << 3;
            rgb_data++;
            *LCD_PDAT_WRITE = temp | ((*rgb_data & 0xf000) >> 12);
            *LCD_PDAT_WRITE =
                ((*rgb_data & 0x0780) >> 3) | ((*rgb_data & 0x001e) >> 1);
            rgb_data++;
        }
        break;
    case sC565B16A1:
        write_count = xsize * ysize;
        for (wcnt = 0; wcnt < write_count; wcnt++)
        {
            *LCD_PDAT_WRITE = *rgb_data;        //RGB Data are written
            rgb_data++;
        }
        break;
    case sC565B8A2:
        write_count = xsize * ysize;
        for (wcnt = 0; wcnt < write_count; wcnt++)
        {
            *LCD_PDAT_WRITE = (*rgb_data & 0xff00) >> 8;        //RGB Data are written
            *LCD_PDAT_WRITE = *rgb_data & 0x00ff;
            rgb_data++;
        }
        break;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?