硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3963|回复: 7
收起左侧

[emWin] 怎么实现转盘实时旋转

[复制链接]

10

主题

51

回帖

10

积分

初级会员

积分
10
发表于 2016-3-11 22:25:40 | 显示全部楼层 |阅读模式
屏幕快照 2016-03-11 下午10.24.05.png


1. 如上图所示,如何实现指针不动,表盘旋转
2. 上面的文字任意角度旋转怎么实现呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2016-3-12 00:12:28 | 显示全部楼层
使用存储设备函数,可以参考我早期发布的一个帖子,这个帖子没有写到教程里面。
http://www.armbbs.cn/forum.php?m ... 892&fpage=3
回复

使用道具 举报

10

主题

51

回帖

10

积分

初级会员

积分
10
 楼主| 发表于 2016-3-12 21:03:54 | 显示全部楼层

回 eric2013 的帖子

eric2013:使用存储设备函数,可以参考我早期发布的一个帖子,这个帖子没有写到教程里面。
http://www.armbbs.cn/forum.php?m ... 892&fpage=3 (2016-03-12 00:12) 
最近也在重点看这一章的内容,谢谢eric
回复

使用道具 举报

10

主题

51

回帖

10

积分

初级会员

积分
10
 楼主| 发表于 2016-3-12 22:06:32 | 显示全部楼层

回 eric2013 的帖子

eric2013:
使用存储设备函数,可以参考我早期发布的一个帖子,这个帖子没有写到教程里面。
http://www.armbbs.cn/forum.php?m ... 892&fpage=3
Hi eric
使用MEMDEV时,没有加载背景图片,只是画了一个实心圆,怎么会出现图片中灰色部分
屏幕快照 2016-03-12 下午10.03.58.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2016-3-13 00:34:06 | 显示全部楼层

回 cingcing 的帖子

cingcing:Hi eric
使用MEMDEV时,没有加载背景图片,只是画了一个实心圆,怎么会出现图片中灰色部分


....... (2016-03-12 22:06) 
如何绘制的,看下函数。
回复

使用道具 举报

10

主题

51

回帖

10

积分

初级会员

积分
10
 楼主| 发表于 2016-3-13 10:38:55 | 显示全部楼层

回 eric2013 的帖子

eric2013:

如何绘制的,看下函数。


void Draw_clock(void)
{
        GUI_AUTODEV AutoDev;      /* 内存设备 */
        PARAM       Param;        /* PARAM类型变量 */

        int         t0 = 36000;   /* 用于三个指针的计数 */
        int         t1 = 36000;
        int         t2 = 36000;


        /* 使能抗锯齿 */
        GUI_AA_EnableHiRes();
        /* 设置抗锯齿因数 */
        GUI_AA_SetFactor(MAG);

        GUI_SetFont(&GUI_Font24_ASCII);
        GUI_DispStringHCenterAt("Simple Clock\\n", LCD_GetXSize() / 2, 10);

        /* 创建自动设备对象 */
        GUI_MEMDEV_CreateAuto(&AutoDev);

        while (1)
        {
                /* 第一个指针计数,用于旋转速度 */
                t0 -= 100;
                if (t0 < 0)
                {
                        t0 = 36000;
                }

                /* 第二个指针计数,用于旋转速度 */
                t1 -= 10;
                if (t1 < 0)
                {
                        t1 = 36000;
                }

                /* 第三个指针计数,用于旋转速度 */
                t2 -= 1;
                if (t2 < 0)
                {
                        t2 = 36000;
                }
                /* 旋转第一个指针 */
                Param.Angle = t0;
                Param.Angle *= 3.1415926f / 18000;
                /*按指定角度旋转边形,但是不绘制*/
                GUI_RotatePolygon(Param.aPoints, _aNeedle, countof(_aNeedle), Param.Angle);

                /* 旋转第二个指针 */
                Param.Angle1 = t1;
                Param.Angle1 *= 3.1415926f / 18000;
                GUI_RotatePolygon(Param.aPoints1, _aNeedle1, countof(_aNeedle1), Param.Angle1);

                /* 旋转第三个指针 */
                Param.Angle2 = t2;
                Param.Angle2 *= 3.1415926f / 18000;
                GUI_RotatePolygon(Param.aPoints2, _aNeedle2, countof(_aNeedle2), Param.Angle2);

                GUI_MEMDEV_DrawAuto(&AutoDev, &amparam.AutoDevInfo, &_Draw, &amparam);

                GUI_Delay(1);
        }

}

static void _Draw(void * p) {
        PARAM * pParam;

        pParam = (PARAM *)p;

        /* 绘制背景 ************************************************************/
        if (pParam->AutoDevInfo.DrawFixed)
        {
#if 1
                GUI_SetColor(GUI_WHITE);
                GUI_FillCircle(LCD_GetXSize() / 2 , (LCD_GetYSize() / 2 + 17) , 70);
#endif
        }

        /* 绘制移动的指针 ************************************************************/
        GUI_SetColor(GUI_RED);
        /*在指定位置绘制无锯齿多边形*/
        GUI_AA_FillPolygon(pParam->aPoints, countof(_aNeedle), MAG * LCD_GetXSize() / 2, MAG * (LCD_GetYSize() / 2 + 17));

        GUI_SetColor(GUI_RED);
        GUI_AA_FillPolygon(pParam->aPoints1, countof(_aNeedle1), MAG * LCD_GetXSize() / 2, MAG * (LCD_GetYSize() / 2 + 17));

        GUI_SetColor(GUI_RED);
        GUI_AA_FillPolygon(pParam->aPoints2, countof(_aNeedle2), MAG * LCD_GetXSize() / 2, MAG * (LCD_GetYSize() / 2 + 17));

}
大体上就是基于论坛里的简易时钟去掉背景图片出现的,我猜问题应该是出现在这个地方,因为后后来加上一张背景图片后就正常了。

屏幕快照 2016-03-13 上午10.35.37.png

    /* 绘制背景 ************************************************************/
    if (pParam->AutoDevInfo.DrawFixed)
    {
        Draw_Bitmap();
        GUI_DispStringHCenterAt("Simple Clock\\n", LCD_GetXSize() / 2, 10);
#if 1
        GUI_SetColor(GUI_WHITE);
        GUI_AA_FillCircle(LCD_GetXSize() / 2 * MAG, (LCD_GetYSize() / 2 + 17) * MAG, 4 * MAG);
#endif
//        GUI_FillCircle(LCD_GetXSize() / 2, (LCD_GetYSize() / 2 + 17) , 70);
    }
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2016-3-13 12:02:43 | 显示全部楼层
按说没问题的,你将原来的背景图片去改成绘制一个大的颜色块试试。
回复

使用道具 举报

10

主题

51

回帖

10

积分

初级会员

积分
10
 楼主| 发表于 2016-3-18 00:01:05 | 显示全部楼层

回 eric2013 的帖子

eric2013:按说没问题的,你将原来的背景图片去改成绘制一个大的颜色块试试。 (2016-03-13 12:02) 
多谢eric,这个里面还有一个问题,希望你能给点思路,就是变盘上的数字是跟着表盘旋转的,有什么方法可以使数字以任意角度旋转吗?或者其他复杂的方法。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-19 17:57 , Processed in 0.183832 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表