历史上的今天
返回首页

历史上的今天

今天是:2025年04月07日(星期一)

正在发生

2020年04月07日 | [stm32] 利用uc-gui封装画图和画线函数移植51上的模拟动画

2020-04-07 来源:eefocus

>_<:这里的动画是黄色矩形区域中一个模仿俯视图的起重机运作动画,一个是模仿主视图的吊钩的运动。通过改变初始Init函数中的数据b_x,b_y实现矩形区域的移动。当实时采集时要首先根据起重机的实际情况改变比例,当传感器传来数据时就相当于这里的run函数,只要把传感器数据接收函数和相关函数结合即可。


>_<:main code:


  1 #include "stdlib.h"

  2 #include "GUI.H"

  3 /*

  4 颜色

  5 */

  6 #define Black     0x000000

  7 #define White    0xFFFFFF

  8 #define Blue    0xFF0000

  9 #define Red        0x0000FF

 10 /*

 11 画矩形区----------改造的和51一样的函数

 12 */

 13 void Rectangle(int left,int up,int right,int down,U16 color)

 14 {

 15     GUI_SetColor(color);

 16     GUI_DrawHLine(up,left,right);//横线

 17     GUI_DrawHLine(down,left,right);//横线

 18     GUI_DrawVLine(left,up,down);//垂线

 19     GUI_DrawVLine(right,up,down);//垂线

 20 }

 21 /*

 22 画线函数-----------改造的和51一样的函数

 23 */

 24 void Line(int x0,int y0,int x1,int y1,U16 color)

 25 {

 26     GUI_SetColor(color);

 27     GUI_DrawLine(x0,y0,x1,y1);

 28 }

 29 ///////////////////////////////////////////////////////////////////////////

 30 int b_x,b_y,b_l,b_w;//轨道的x,y,长,宽

 31 //大车的位置,老位置,y值,宽,速度,加速度,左限位,右限位

 32 int m_x,m_old_x,m_y,m_l,m_w,m_v,m_a,m_l_limit_p,m_r_limit_p;

 33 //小车的位置,老位置,超出部分,速度,加速度,上限位,下限位

 34 int s_y,s_old_y,s_extre_part,s_v,s_a,s_u_limit_p,s_d_limit_p;

 35 

 36 

 37 int h_x,h_y,h_w;//横梁的x,y和宽

 38 int move_x_v,move_y_v,move_a;//水平移动速度,

 39 int line_x,line_old_x,line_y,line_l,line_old_l;//伸长部分x,老x,y,长,老长

 40 //--------------------------------------------------------------

 41 void init1()

 42 {

 43     b_x=40,b_y=120,b_l=100,b_w=420;

 44     m_x=m_old_x=b_x+10,m_y=b_y-10,m_l=120,m_w=50,m_v=1,m_a=0,m_l_limit_p=40,m_r_limit_p=b_x+b_w-m_l_limit_p;

 45     s_y=s_old_y=b_y+10,s_extre_part=10,s_v=1,s_a=0,s_u_limit_p=b_y+10,s_d_limit_p=b_y+b_l-10;

 46 }

 47 void init2()

 48 {

 49     h_x=b_x,h_y=b_y+b_l+60,h_w=b_w;

 50     move_x_v=s_v*h_w/m_l,move_y_v=2,move_a=0;

 51     line_x=line_old_x=100,line_y=h_y+3,line_l=line_old_l=50;

 52 }

 53 //---------------------------Draw-------------------------------

 54 void drawBig()

 55 {

 56     Line(b_x,b_y,b_x+b_w,b_y,Black);

 57     Line(b_x,b_y+b_l,b_x+b_w,b_y+b_l,Black);

 58 }//主梁画

 59 void drawMiddle()

 60 {

 61     if(m_x!=m_old_x)Line(m_old_x,m_y,m_old_x,m_y+m_l,White);

 62     Line(m_x,m_y,m_x,m_y+m_l,Blue);

 63     if(m_x!=m_old_x)Line(m_old_x+m_w,m_y,m_old_x+m_w,m_y+m_l,White);

 64     Line(m_x+m_w,m_y,m_x+m_w,m_y+m_l,Blue);

 65 }//画横梁

 66 void drawSmall()

 67 {

 68     if(s_old_y!=s_y || m_x!=m_old_x)Line(m_old_x-s_extre_part,s_old_y,m_old_x+m_w+s_extre_part,s_old_y,White);

 69     Line(m_x-s_extre_part,s_y,m_x+m_w+s_extre_part,s_y,Red);

 70 }//画小车

 71 void draw1()

 72 {

 73     drawBig();//画主梁

 74     drawMiddle();//画横梁

 75     drawSmall();//画小车

 76 }//总画函数

 77 //----------------------------run-----------------------------

 78 void runMiddle()

 79 {

 80     m_old_x=m_x;

 81     m_x+=m_v;

 82     if(m_x+m_w>=m_r_limit_p || m_x<=m_l_limit_p)m_v*=-1;//达到警戒线

 83 }//横梁移动

 84 void runSmall()

 85 {

 86     s_old_y=s_y;

 87     line_old_x=line_x;

 88     s_y+=s_v;

 89     line_x+=move_x_v;

 90     if(s_y>=s_d_limit_p || s_y<=s_u_limit_p){

 91         s_v*=-1;

 92         move_x_v*=-1;

 93     }//达到警戒线

 94 }//小车移动

 95 void run1()

 96 {

 97     runMiddle();

 98     runSmall();

 99 }//运动函数

100 /////////////////////////////////////////////////////////////////////////////////

101 //-------------------------draw--------------------------------

102 void drawGou()

103 {

104     if(line_old_x!=line_x || line_old_l!=line_old_l){

105         Rectangle(line_old_x-3,line_y+line_old_l,line_old_x+3,line_y+line_old_l+6,White);

106         Line(line_old_x,line_y+line_old_l+6,line_old_x,line_y+line_old_l+9,White);

107         Line(line_old_x,line_y+line_old_l+9,line_old_x+6,line_y+line_old_l+9,White);

108         Line(line_old_x+6,line_y+line_old_l+9,line_old_x+6,line_y+line_old_l+15,White);

109         Line(line_old_x+6,line_y+line_old_l+15,line_old_x-6,line_y+line_old_l+15,White);

110         Line(line_old_x-6,line_y+line_old_l+15,line_old_x-6,line_y+line_old_l+12,White);

111     }

112     Rectangle(line_x-3,line_y+line_l,line_x+3,line_y+line_l+6,Blue);

113     Line(line_x,line_y+line_l+6,line_x,line_y+line_l+9,Black);

114     Line(line_x,line_y+line_l+9,line_x+6,line_y+line_l+9,Black);

115     Line(line_x+6,line_y+line_l+9,line_x+6,line_y+line_l+15,Black);

116     Line(line_x+6,line_y+line_l+15,line_x-6,line_y+line_l+15,Black);

117     Line(line_x-6,line_y+line_l+15,line_x-6,line_y+line_l+12,Black);    

118 }//画勾,x,y为绳的下端,r为大小

119 void drawH()

120 {

121     Line(h_x,h_y,h_x+h_w,h_y,Black);

122 }//画横梁

123 void drawHuaKuai()

124 {

125     if(line_old_x!=line_x)Rectangle(line_old_x-6*3/4,line_y-6,line_old_x+6*3/4,line_y,White);

126     Rectangle(line_x-6*3/4,line_y-6,line_x+6*3/4,line_y,Blue);

127 }//画滑块,x,y为绳的上端,r为大小

128 void drawLine()

129 {

130     if(line_old_l!=line_l || line_x!=line_old_x)Line(line_old_x,line_y,line_old_x,line_y+line_old_l,White);

131     Line(line_x,line_y,line_x,line_y+line_l,Black);

132 }//画线

133 void draw2()

134 {

135     drawH();

136     drawHuaKuai();

137     drawLine();

138     drawGou();

139 }

140 ///////////////////////////////////////////////////////////////////////////

141 //-------------------------draw尺子--------------------------------

142 void draw0()

143 {

144     GUI_SetColor(GUI_YELLOW);

145     GUI_FillRect(b_x-15,b_y-15,b_x+b_w+15,h_y+190);

146      Rectangle(b_x-15,b_y-15,b_x+b_w+15,h_y+190,GUI_BLUE);//画边框

147 }

148 ///////////////////////////////////////////////////////////////////////////

149 void Fun(void)//fun里面的Fun函数------一切动画贴图都在此

150 {

151     init1();//初始化1画面

152     init2();//初始化2画面

153     GUI_SetBkColor(WHITE);

154     GUI_Clear();

155     //GUI_DrawBitmap(&bmkk,0,0);

156     draw0();

157     while(1)

158     {

159         run1();

160         line_old_l=line_l;

161         line_l+=1;

162         if(line_l>160)line_l=10;

163         draw1();

164         draw2();

165         GUI_Delay(1);

166     }

167 }


推荐阅读

史海拾趣

Embedded Planet公司的发展小趣事

Embedded Planet公司深知人才是企业发展的核心驱动力。因此,公司一直致力于培养和吸引优秀人才,建立了一支高效、专业的团队。公司为员工提供丰富的培训和发展机会,鼓励员工不断学习和创新。同时,公司还注重团队建设和文化塑造,营造了一个积极向上、团结协作的工作氛围。这些努力使得Embedded Planet公司成为了一个充满活力和创造力的企业。

ADTech公司的发展小趣事

AdTech公司在成立之初,以其完整的传统半导体器件工艺在通信、激光医疗和激光防卫领域获得了广泛认可。然而,随着技术的不断进步和市场的变化,公司管理层意识到需要转型以维持竞争优势。2008年,经过三年的技术储备,AdTech决定将原有的光电探测器业务剥离,转而专注于量子级联激光器(QCL)的研发和生产。这一决策使公司能够专注于前沿技术,逐渐在QCL领域建立了领先地位,成为美国各大QCL激光设备的核心供应商。

安谱隆(Ampleon)公司的发展小趣事

2022年,无锡锡产微芯半导体有限公司完成了对安谱隆的收购。这一交易金额超过百亿元,是当年中国最大的半导体并购交易事件之一。锡产微芯的收购不仅为安谱隆提供了更广阔的发展平台,也为其在半导体行业中的进一步发展注入了新的活力。在锡产微芯的支持下,安谱隆开启了新的发展阶段,继续在全球射频市场中发挥着重要作用。

这五个故事展示了安谱隆从恩智浦剥离出来到被锡产微芯收购的发展历程。在这个过程中,安谱隆不仅展现了其强大的技术实力和市场潜力,也经历了资本市场的波折与挑战。然而,正是这些经历使得安谱隆更加成熟和稳健,为其未来的发展奠定了坚实的基础。

Chengdu Sino Microelectronics Technology Co Ltd公司的发展小趣事

在集成电路设计领域,技术的突破是赢得市场的关键。成都华微科技始终坚持以技术研发为核心,不断投入巨资进行技术研发和创新。经过多年的努力,公司在可编程逻辑器件、系统级芯片、存储器和模数/数模转换器(AD/DA)芯片等领域取得了重大突破,产品性能达到了国内领先水平。这些技术突破不仅为公司赢得了市场的认可,也提升了中国集成电路设计行业的国际地位。

Gravitech公司的发展小趣事

面对日新月异的电子技术和不断变化的市场需求,成都华微科技始终坚持持续创新的发展理念。公司不断加大对新技术、新产品的研发投入,积极探索新的商业模式和市场机会。同时,公司还注重人才培养和团队建设,为公司的长远发展储备了丰富的人才资源。正是这种持续创新的精神,使成都华微科技在激烈的市场竞争中始终保持领先地位,引领着中国集成电路设计行业的未来发展。

这五个故事只是成都华微电子科技有限公司发展历程中的一部分,但它们足以展现出这家公司在电子行业中的坚定决心、技术实力、合作精神和创新能力。正是这些因素的共同作用,使成都华微科技能够在激烈的市场竞争中脱颖而出,成为电子行业的佼佼者。

CLAIREX公司的发展小趣事

随着市场的不断发展,Clairex意识到,要想在激烈的竞争中脱颖而出,必须不断创新。于是,公司加大了对研发的投入,积极探索新技术、新材料和新工艺。经过数年的努力,Clairex成功开发出了一系列具有自主知识产权的光电子组件。这些组件不仅性能优异,而且成本更低、更易于集成。它们的推出,不仅进一步巩固了Clairex在市场上的地位,也为公司带来了可观的利润。

问答坊 | AI 解惑

arm smull指令深入解析???

arm 汇编代码 ... mov r1,#2 mov r2,#0x70000000 eor r3,r3,r3 eor r4,r4,r4 smull r3,r4,r0,r1 ... 结果: r3=0xfffffffd r4=0x0 复制代码 我不明白,能告诉我64bit整数乘法过程吗…

查看全部问答>

怎样得到本机IP?

我用的C#。使用API得到也可以。…

查看全部问答>

Evc4 下对话框中使用垂直滚动条的问题?

我在wince下做了个对话框程序 ,使用evc4,增加了垂直滚动条,并增加了OnVScroll,OnSize 事件, 结果滑动滚动条,没有任何效果,在vc++6.0 用同样的方法,就没有问题; 下面是代码,高手看看有什么问题! 代码如下: 先在OnInitDialog 中 ...…

查看全部问答>

单片机通信中断

大家好:     在进行单片机与上位机串行通讯的过程中,单片机主动发送,上位机中断接收,单步执行进不了中断,全速执行可以进入中断,不知是什么原因!按理讲,单步执行也可以进入中断的!请高手赐教!谢谢!…

查看全部问答>

世界最美LED最绚丽的长裙 用24000颗LED做成

replyreload += \',\' + 681776;这件华丽丽的长裙有个华丽丽的名字,叫做Galaxy Dress——衣如其名,上面一共点缀着24000颗LED和4000粒施华洛世奇水晶,并用一块iPod的电池供电,每充满电一次就能闪亮整整一个小时——如果说现在的夜晚已经让你老公 ...…

查看全部问答>

请问如何把ad12当作16位来用

各位师兄:我记得在那里看到过可以把12位的ad当作16位来用,但是忘了出处,那位师兄可以给个提示?…

查看全部问答>

Lm3s811学习---按键和LED灯驱动

以下是学习Lm3s811开发板时写的一个小程序,本人菜鸟,请各位同仁多多指教!   一、main.c   #include  \"systemInit.h\" //  主函数(程序入口)void main(void){     SysClockInit_6M();  &nb ...…

查看全部问答>

提取微弱小信号的锁相放大器试制 总结

从提出方案到设计本子,调试花了许多业余时间。问了许多从事电子的工程师,包括博士和工作几年的老师都不清楚锁相放大器。总是和锁相环弄混。再次在说明一下锁相放大器和锁相环是两个东西。锁相环(PLL)一般是所频率的,锁相放大器一般用在提取微 ...…

查看全部问答>

8962那款开发板比较好啊!

8962那款开发板比较好啊!就是用的人比较多的!…

查看全部问答>

串口发送程序(发送数据时不再等待)

献给像我一样的菜鸟——串口发送程序(发送数据时不再等待)背景:我之前的程序中,串口发送一串数据时总是要等待上一个字符发送完才能发送下一个字符。以波率为9600时发送10个字符为例,每个字符长8bit+1bit起始位和1bit停止位,最短理想时间是10*10 ...…

查看全部问答>