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

>_<:main code:

 #include "stdlib.h"
#include "GUI.H"
/*
颜色
*/
#define Black 0x000000
#define White 0xFFFFFF
#define Blue 0xFF0000
#define Red 0x0000FF
/*
画矩形区----------改造的和51一样的函数
*/
void Rectangle(int left,int up,int right,int down,U16 color)
{
GUI_SetColor(color);
GUI_DrawHLine(up,left,right);//横线
GUI_DrawHLine(down,left,right);//横线
GUI_DrawVLine(left,up,down);//垂线
GUI_DrawVLine(right,up,down);//垂线
}
/*
画线函数-----------改造的和51一样的函数
*/
void Line(int x0,int y0,int x1,int y1,U16 color)
{
GUI_SetColor(color);
GUI_DrawLine(x0,y0,x1,y1);
}
///////////////////////////////////////////////////////////////////////////
int b_x,b_y,b_l,b_w;//轨道的x,y,长,宽
//大车的位置,老位置,y值,宽,速度,加速度,左限位,右限位
int m_x,m_old_x,m_y,m_l,m_w,m_v,m_a,m_l_limit_p,m_r_limit_p;
//小车的位置,老位置,超出部分,速度,加速度,上限位,下限位
int s_y,s_old_y,s_extre_part,s_v,s_a,s_u_limit_p,s_d_limit_p; int h_x,h_y,h_w;//横梁的x,y和宽
int move_x_v,move_y_v,move_a;//水平移动速度,
int line_x,line_old_x,line_y,line_l,line_old_l;//伸长部分x,老x,y,长,老长
//--------------------------------------------------------------
void init1()
{
b_x=,b_y=,b_l=,b_w=;
m_x=m_old_x=b_x+,m_y=b_y-,m_l=,m_w=,m_v=,m_a=,m_l_limit_p=,m_r_limit_p=b_x+b_w-m_l_limit_p;
s_y=s_old_y=b_y+,s_extre_part=,s_v=,s_a=,s_u_limit_p=b_y+,s_d_limit_p=b_y+b_l-;
}
void init2()
{
h_x=b_x,h_y=b_y+b_l+,h_w=b_w;
move_x_v=s_v*h_w/m_l,move_y_v=,move_a=;
line_x=line_old_x=,line_y=h_y+,line_l=line_old_l=;
}
//---------------------------Draw-------------------------------
void drawBig()
{
Line(b_x,b_y,b_x+b_w,b_y,Black);
Line(b_x,b_y+b_l,b_x+b_w,b_y+b_l,Black);
}//主梁画
void drawMiddle()
{
if(m_x!=m_old_x)Line(m_old_x,m_y,m_old_x,m_y+m_l,White);
Line(m_x,m_y,m_x,m_y+m_l,Blue);
if(m_x!=m_old_x)Line(m_old_x+m_w,m_y,m_old_x+m_w,m_y+m_l,White);
Line(m_x+m_w,m_y,m_x+m_w,m_y+m_l,Blue);
}//画横梁
void drawSmall()
{
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);
Line(m_x-s_extre_part,s_y,m_x+m_w+s_extre_part,s_y,Red);
}//画小车
void draw1()
{
drawBig();//画主梁
drawMiddle();//画横梁
drawSmall();//画小车
}//总画函数
//----------------------------run-----------------------------
void runMiddle()
{
m_old_x=m_x;
m_x+=m_v;
if(m_x+m_w>=m_r_limit_p || m_x<=m_l_limit_p)m_v*=-;//达到警戒线
}//横梁移动
void runSmall()
{
s_old_y=s_y;
line_old_x=line_x;
s_y+=s_v;
line_x+=move_x_v;
if(s_y>=s_d_limit_p || s_y<=s_u_limit_p){
s_v*=-;
move_x_v*=-;
}//达到警戒线
}//小车移动
void run1()
{
runMiddle();
runSmall();
}//运动函数
/////////////////////////////////////////////////////////////////////////////////
//-------------------------draw--------------------------------
void drawGou()
{
if(line_old_x!=line_x || line_old_l!=line_old_l){
Rectangle(line_old_x-,line_y+line_old_l,line_old_x+,line_y+line_old_l+,White);
Line(line_old_x,line_y+line_old_l+,line_old_x,line_y+line_old_l+,White);
Line(line_old_x,line_y+line_old_l+,line_old_x+,line_y+line_old_l+,White);
Line(line_old_x+,line_y+line_old_l+,line_old_x+,line_y+line_old_l+,White);
Line(line_old_x+,line_y+line_old_l+,line_old_x-,line_y+line_old_l+,White);
Line(line_old_x-,line_y+line_old_l+,line_old_x-,line_y+line_old_l+,White);
}
Rectangle(line_x-,line_y+line_l,line_x+,line_y+line_l+,Blue);
Line(line_x,line_y+line_l+,line_x,line_y+line_l+,Black);
Line(line_x,line_y+line_l+,line_x+,line_y+line_l+,Black);
Line(line_x+,line_y+line_l+,line_x+,line_y+line_l+,Black);
Line(line_x+,line_y+line_l+,line_x-,line_y+line_l+,Black);
Line(line_x-,line_y+line_l+,line_x-,line_y+line_l+,Black);
}//画勾,x,y为绳的下端,r为大小
void drawH()
{
Line(h_x,h_y,h_x+h_w,h_y,Black);
}//画横梁
void drawHuaKuai()
{
if(line_old_x!=line_x)Rectangle(line_old_x-*/,line_y-,line_old_x+*/,line_y,White);
Rectangle(line_x-*/,line_y-,line_x+*/,line_y,Blue);
}//画滑块,x,y为绳的上端,r为大小
void drawLine()
{
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);
Line(line_x,line_y,line_x,line_y+line_l,Black);
}//画线
void draw2()
{
drawH();
drawHuaKuai();
drawLine();
drawGou();
}
///////////////////////////////////////////////////////////////////////////
//-------------------------draw尺子--------------------------------
void draw0()
{
GUI_SetColor(GUI_YELLOW);
GUI_FillRect(b_x-,b_y-,b_x+b_w+,h_y+);
Rectangle(b_x-,b_y-,b_x+b_w+,h_y+,GUI_BLUE);//画边框
}
///////////////////////////////////////////////////////////////////////////
void Fun(void)//fun里面的Fun函数------一切动画贴图都在此
{
init1();//初始化1画面
init2();//初始化2画面
GUI_SetBkColor(WHITE);
GUI_Clear();
//GUI_DrawBitmap(&bmkk,0,0);
draw0();
while()
{
run1();
line_old_l=line_l;
line_l+=;
if(line_l>)line_l=;
draw1();
draw2();
GUI_Delay();
}
}

[stm32] 利用uc-gui封装画图和画线函数移植51上的模拟动画的更多相关文章

  1. 画线函数Glib_Line算法的研究

      在这里首先先简单把我对函数的功能的理解阐述一下,方便后面的分析:Glib_Line函数实现的功能是通过参数给定(x1,y1,x2,y2,color),来确定起点(x1,y1)和终点(x2,y2)两 ...

  2. MFC画线功能总结

    本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6216464.html MFC画线功能要点有二:其一,鼠标按下时记录初始位置为线的起始 ...

  3. Bezier画线算法

    编译器:VS2013 描述:Bezier画线是利用导数相同拼接曲线,使曲线十分光滑,而不是随意拼接观赏性很差 主函数段 #include "stdafx.h" #include&l ...

  4. matlab练习程序(Bresenham画线)

    Bresenham画线算图形学中最基础的知识了,可惜我并没有选修过图形学,所有还是有必要熟悉一下. 上一篇用到的画线函数应该算是数值微分法,也是我最常用的一种方法,不过这种方法似乎并不是很好. 这里的 ...

  5. 计算机图形学DDA画线法+中点画线法+Bresenham画线法

    #include <cstdio> #include <cstring> #include <conio.h> #include <graphics.h> ...

  6. 利用C语言编辑画图程序的实现方法

    不知道大家在进行开发县级电网调度自动化系统的时候,是否都会遇到一个问题就是:要绘制一个电力系统一次接线图.大家都应该知道其实电力系统的一次接线图是较为复杂的,如果想要使用一般的编程方法来进行绘制的话, ...

  7. altium designer不经过原理图直接在空白pcb上加封装然后画线

    如果是复杂点的PCB,建议还是画下SCH,如果PCB只有几个元件,那么可以用这种方法,想不画原理图,直接进行布线,往往是很多初学者最想知道的,但是这也一定不是初学者能学到的.因为你买的书,都是按画PC ...

  8. H5中画图标签Canvas---画矩形,画线,画圆,渐变色,图形载入

    一: 1.鼠标监视坐标值 <!DOCTYPE html> <head> <meta charset=UTF-8> <title>canvas的演示< ...

  9. 用 eric6 与 PyQt5 实现python的极速GUI编程(系列03)---- Drawing(绘图)(3)-- 画线

    [概览] 本文实现如下的程序:(在窗体中绘画出各种不同风格的线条) 主要步骤如下: 1.在eric6中新建项目,新建窗体 2.(自动打开)进入PyQt5 Desinger,编辑图形界面,保存 3.回到 ...

随机推荐

  1. mybatis like的用法

    oracle数据库: SELECT * FROM user WHERE name like CONCAT('%',#{name},'%') 或 SELECT * FROM user WHERE nam ...

  2. UART IP和UVM的验证平台

    UART是工程师在开发调试时最常用的工具的,其通信协议简单.opencores 网站提供了兼容16550a的UART IP其基本特性如下: uart16550 is a 16550 compatibl ...

  3. 手把手教你编写一个具有基本功能的shell(已开源)

    刚接触Linux时,对shell总有种神秘感:在对shell的工作原理有所了解之后,便尝试着动手写一个shell.下面是一个从最简单的情况开始,一步步完成一个模拟的shell(我命名之为wshell) ...

  4. IOC和AOP使用扩展 多种方式实现依赖注入

    多种方式实现依赖注入 1.Spring 使用setter访问器实现对属性的赋值, 2.Spring 构造constructor方法赋值, 3.接口注入 4.Spring P命名空间注入直接量 sett ...

  5. delphi项目中的modelsupport文件夹

    delphi项目中的modelsupport文件夹 今天写着写着突然发现多了一个这个文件夹..苦思不得其解  看着又难受  删了又重建 终于找到了  存此备查;Tools--option--toget ...

  6. java.lang.UnsupportedClassVersionError: xxx/xxxClass : Unsupported major.minor version 51.0

    完全参考自 http://www.cnblogs.com/xing901022/p/4172410.html 这种错误的全部报错信息: 1 java.lang.UnsupportedClassVers ...

  7. 极客DIY:使用树莓派制作一套“NAS+私有云盘+下载机”

    原创作者:HackLiu 0×00 前言 ‍ ‍ 如果你家里有多台设备需要联网需要娱乐,你一定会或多或少遇到设备碎片化带来的烦恼.当然,已经有很多厂商包括新晋的小米.360在内的互联网公司做了这个事情 ...

  8. spilt()的用法

    split() 方法用于把一个字符串分割成字符串数组.<script type="text/javascript"> var str="How are you ...

  9. Selenium简单介绍

    WEB自动化测试:指WEB应用系统从用户界面层面进行的自动化测试.通过用户界面测试内部的业务逻辑. 自身特点:(一)WEB页面上出现的元素有可能具有不确定性: (二)不同操作系统上不同WEB浏览器之间 ...

  10. docker学习使用

    安装什么的就略过了,之前已经整理过,这里就说说自己使用中的一些东西,也是初用,记录下(现在使用win10 64位,使用Docker for Windows直接安装就好[需要专业版win10安装hype ...