⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 w_menumode.c

📁 bu1566dsp芯片用来处理ov7660或其他30万摄像模组的图像预览.图像拍照(jpeg压缩)
💻 C
📖 第 1 页 / 共 2 页
字号:
        gl_keystate = 0x0000;
        if (u16CstY >= u8Step)
            u16CstY -= u8Step;
        else
            u16CstY = 0;
        sJPEGCameraDecode((UINT16 *) BASE_ADDRESS, u16CstX, u16CstY);
        break;
    case KEY5:
        gl_keydisp = 0;
        gl_keystate = 0x0000;
        if ((u16CstY + u8Step + M_LCD_HSIZE) < CAM_VSIZE)
            u16CstY += u8Step;
        else
            u16CstY = CAM_VSIZE - M_LCD_HSIZE - 1;
        sJPEGCameraDecode((UINT16 *) BASE_ADDRESS, u16CstX, u16CstY);
        break;
    case KEY7:
        gl_keydisp = 0;
        gl_keystate = 0x0000;
        if ((u16CstX + u8Step + M_LCD_WSIZE) < CAM_HSIZE)
            u16CstX += u8Step;
        else
            u16CstX = CAM_HSIZE - M_LCD_WSIZE - 2;
        sJPEGCameraDecode((UINT16 *) BASE_ADDRESS, u16CstX, u16CstY);
        break;
    default:
        break;
    }

    switch (gl_keydisp)
    {
    case KEY0:
        sJPEGCEncode((UINT16 *) BASE_ADDRESS, 12);
/*
	 aDSC_Quit_Preview();
        bit_write(CLKCNT, bLCDFREN | bSCKEN, LOW);
        clk_div1_set(0x000f);
        bit_write(CLKCNT, bLCDFREN | bSCKEN, HIGH);

//	 aDSC_i2c_set(sDEV_7BIT, 0x6e, 0x92, 0x10, 0x0f, sSERI_WRITE);
//	 aDSC_i2c_set(sDEV_7BIT, 0x6e, 0x81, 0x94, 0x0f, sSERI_WRITE);
//	 aDSC_i2c_set(sDEV_7BIT, 0x6e, 0x99, 0x01, 0x0f, sSERI_WRITE);
//	 aDSC_i2c_set(sDEV_7BIT, 0x6e, 0x9A, 0x10, 0x0f, sSERI_WRITE);

        bit_write(CLKCNT, bLCDFREN | bSCKEN, LOW);
        clk_div1_set(0x0000);
        bit_write(CLKCNT, bLCDFREN | bSCKEN, HIGH);

//	 sStartPreview();
//	 wait(1000);

	 sJPEGCEncode((UINT16 *) BASE_ADDRESS,12);
		
        bit_write(CLKCNT, bLCDFREN | bSCKEN, LOW);
        clk_div1_set(0x000f);
        bit_write(CLKCNT, bLCDFREN | bSCKEN, HIGH);

//	 aDSC_i2c_set(sDEV_7BIT, 0x6e, 0x92, 0x40, 0x0f, sSERI_WRITE);
//	 aDSC_i2c_set(sDEV_7BIT, 0x6e, 0x99, 0x03, 0x0f, sSERI_WRITE);
//	 aDSC_i2c_set(sDEV_7BIT, 0x6e, 0x9A, 0xF0, 0x0f, sSERI_WRITE);

        bit_write(CLKCNT, bLCDFREN | bSCKEN, LOW);
        clk_div1_set(0x0000);
        bit_write(CLKCNT, bLCDFREN | bSCKEN, HIGH);
*/
        break;
    case KEY4:
        u8Step += 4;
        u8Step %= 44;
        break;
    case KEY6:
        sJPEGCameraDecode((UINT16 *) BASE_ADDRESS, u16CstX, u16CstY);
        break;
    case KEY8:
        aDSC_Quit_Preview();
        gl_function_id = 0;
        gl_menu_first_show = 1;
        gl_first_action = 0;
        break;
    default:
        break;
    }
    gl_keydisp = 0;
}

static void RotJpeg(void)
{
    UINT32 u32RgbBufferSize = 153600 + 4;       //320*240*2+4

    if (gl_first_action == 0)
    {
        gl_first_action = 1;
        sStartPreview();
    }

    switch (gl_keydisp)
    {
    case KEY0:
        sJPEGCEncode2((UINT16 *) BASE_ADDRESS + u32RgbBufferSize, 2);
        sJPEGCameraDecode2((UINT16 *) BASE_ADDRESS + u32RgbBufferSize, 128, 96);
        break;
    case KEY1:
        memset((UINT8 *) BASE_ADDRESS, 0, u32RgbBufferSize);
        aDSC_fmemory_clear(0, 0, 144, 176, 0x0);        //test 20050519
        sJPEGHostDec((UINT16 *) BASE_ADDRESS + u32RgbBufferSize, (UINT16 *) BASE_ADDRESS);
//        sRgbRot((UINT16 *) BASE_ADDRESS, u32RgbBufferSize);
//        sJPEGHostEnc((UINT16 *) BASE_ADDRESS+u32RgbBufferSize,12);
//        sJPEGCameraDecode2((UINT16 *) BASE_ADDRESS+u32RgbBufferSize, 96, 128);
        break;
    case KEY8:
        aDSC_Quit_Preview();
        gl_function_id = 0;
        gl_menu_first_show = 1;
        gl_first_action = 0;
        break;
    default:
        break;
    }
    gl_keydisp = 0;

}

#ifdef _BU1563API_INTERFACE_
static void CamFunc(void)
{
    static c_SetBase **pp_CurSetData = (c_SetBase **) cBase;

    if (gl_first_action == 0)
    {
        fPreview();
        gl_first_action = 1;
    }

    switch (gl_keystate)
    {
    case KEY0:
        gl_keydisp = 0;
        gl_keystate = 0x0000;
        fZoom(ZOOM_IN);
        break;
    case KEY6:
        gl_keydisp = 0;
        gl_keystate = 0x0000;
        fZoom(ZOOM_OUT);
        break;
    default:
        break;
    }

    switch (gl_keydisp)
    {
    case KEY1:
        if (pp_CurSetData == (c_SetBase **) cBase)
            pp_CurSetData = (c_SetBase **) (cBase + gv_SetMaxNum - 1);
        else
            pp_CurSetData--;
        (*pp_CurSetData)->fSet(*pp_CurSetData);
        gl_first_action = 0;
        break;
    case KEY7:
        if (pp_CurSetData == (c_SetBase **) (cBase + gv_SetMaxNum - 1))
            pp_CurSetData = (c_SetBase **) cBase;
        else
            pp_CurSetData++;
        (*pp_CurSetData)->fSet(*pp_CurSetData);
        gl_first_action = 0;
        break;
    case KEY3:
        if ((*pp_CurSetData)->u16CurIndex == 0)
        {
            (*pp_CurSetData)->u16CurIndex = (*pp_CurSetData)->u16MaxNum - 1;

        }
        else
        {
            (*pp_CurSetData)->u16CurIndex--;

        }
        (*pp_CurSetData)->fSet(*pp_CurSetData);
        gl_first_action = 0;
        break;
    case KEY5:
        if ((*pp_CurSetData)->u16CurIndex == (*pp_CurSetData)->u16MaxNum - 1)
        {
            (*pp_CurSetData)->u16CurIndex = 0;

        }
        else
        {
            (*pp_CurSetData)->u16CurIndex++;

        }
        (*pp_CurSetData)->fSet(*pp_CurSetData);
        gl_first_action = 0;
        break;
    case KEY4:
        fJpegEnc();
        fJpegDec();
        break;
    case KEY2:
        gl_first_action = 0;
        break;
    case KEY8:
        gl_menu_first_show = 1;
        gl_first_action = 0;
        aDSC_Quit_Preview();
        break;
    default:
        break;
    }
    gl_keydisp = 0;
}
#endif                          //#ifdef _BU1563API_INTERFACE_

static void MenuMoveUp(u8 * p_u8SelectedFuncID)
{
    u8 u8FuncMaxItem = sizeof(tMenu) / 36;
    if (*p_u8SelectedFuncID == 1)
    {
        *p_u8SelectedFuncID = u8FuncMaxItem - 1;
    }
    else
    {
        (*p_u8SelectedFuncID)--;
    }
    ShowMenu(*p_u8SelectedFuncID);
}

static void MenuMoveDown(u8 * p_u8SelectedFuncID)
{
    u8 u8FuncMaxItem = sizeof(tMenu) / 36;
    if (*p_u8SelectedFuncID == (u8FuncMaxItem - 1))
    {
        *p_u8SelectedFuncID = 1;
    }
    else
    {
        (*p_u8SelectedFuncID)++;
    }
    ShowMenu(*p_u8SelectedFuncID);
}

static void ShowMenu(u8 u8SelectedFuncID)
{
    u8 u8CurrentFuncStartY = 0;
    u8 u8DisplayMaxItem = (M_LCD_HSIZE - 2 * PICT_SIZE) / PICT_SIZE;
    u8 u8DisplayBlank = (M_LCD_HSIZE - 2 * PICT_SIZE) % PICT_SIZE / 2;

    if (gl_menu_first_show == 1)
    {
        aDSC_lcdaccess_set(sMAIN_ACS);
        aDSC_fmemory_clear(0, 0, M_LCD_WSIZE, PICT_SIZE,
                           ((MLCD_BCOL_RU & 0xf8) << 8) | ((MLCD_BCOL_GU & 0xfc) << 3) | ((MLCD_BCOL_BU & 0xf8) >> 3));
        aDSC_fmemory_clear(0, M_LCD_HSIZE - PICT_SIZE, M_LCD_WSIZE,PICT_SIZE,
                           ((MLCD_BCOL_RU & 0xf8) << 8) | ((MLCD_BCOL_GU & 0xfc) << 3) | ((MLCD_BCOL_BU & 0xf8) >> 3));
        aDSC_fmemory_clear(0, PICT_SIZE, M_LCD_WSIZE, M_LCD_HSIZE - 2 * PICT_SIZE,
                           ((MLCD_BCOL_RC & 0xf8) << 8) | ((MLCD_BCOL_GC & 0xfc) << 3) | ((MLCD_BCOL_BC & 0xf8) >> 3));
        u8CurrentFuncStartY = PICT_SIZE * u8DisplayMaxItem / 2 + u8DisplayBlank;
        aDSC_fmemory_clear(0, u8CurrentFuncStartY, M_LCD_WSIZE, PICT_SIZE,
                           ((0x00 & 0xf8) << 8) | ((0xfc & 0xfc) << 3) | ((0xf8 & 0xf8) >> 3));
        StringWrite(tMenu[u8SelectedFuncID].szFuncName, 6,
                    u8CurrentFuncStartY);
    }
    else
    {
        u8CurrentFuncStartY = PICT_SIZE * u8DisplayMaxItem / 2 + u8DisplayBlank;
        aDSC_fmemory_clear(0, u8CurrentFuncStartY, M_LCD_WSIZE, PICT_SIZE,
                           ((0x00 & 0xf8) << 8) | ((0xfc & 0xfc) << 3) | ((0xf8 & 0xf8) >> 3));
        StringWrite(tMenu[u8SelectedFuncID].szFuncName, 6, u8CurrentFuncStartY);
    }
    aDSC_data_trans_st(0, 0, M_LCD_WSIZE, M_LCD_HSIZE);
}

static void StringWrite(const char *string, u16 u16StartPosX, u16 u16StartPosY)
{
    UINT8 space = 2;
    UINT16 st_x = u16StartPosX;
    UINT16 st_y = u16StartPosY;
    int font_cnt;
    const UINT16 *font_data;

    for (font_cnt = 0; (font_cnt < 10) || (*string != '\0'); font_cnt++)
    {
        if (*string != '\0')
        {
            font_data = fonttable[*string];
            aDSC_transparent_write_rgb565(font_data, st_x + (space + 6) *
                                          font_cnt, st_y, 0xffff, 0x0000);
//            aDSC_fmemory_write_rgb565(font_data, st_x + (space + 4) * font_cnt, st_y);
            string++;
        }
    }
}

/*
static void NumberWrite(int s32Number, u16 u16StartPosX, u16 u16StartPosY)
{
    u8 u8String[16], u8StrTemp[16];
    u8 i = 0, j;

    while ((s32Number / 10 != 0) && (i <= 15))
    {
        u8StrTemp[i++] = s32Number % 10 + '0';
        s32Number /= 10;
    }
    u8StrTemp[i++] = s32Number + '0';
    u8StrTemp[i] = 0;
    for (j = 0; j < i; j++)
    {
        u8String[j] = u8StrTemp[i - j - 1];
    }
    u8String[j] = 0;
    StringWrite((char *) u8String, u16StartPosX, u16StartPosY);

}
*/


#undef _W_MENUMODE_C_

⌨️ 快捷键说明

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