zoukankan      html  css  js  c++  java
  • [stm32] 利用uc-gui封装画图和画线函数移植51上的模拟动画

    >_<:这里的动画是黄色矩形区域中一个模仿俯视图的起重机运作动画,一个是模仿主视图的吊钩的运动。通过改变初始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 }
  • 相关阅读:
    [置顶] RGB颜色查询对照表
    3.3FactoryMethod——工厂方法
    从零开始学C++之数据封装与抽象:分别用C和C++来实现一个链栈
    C# 自定义事件
    Qt4--加密日记本(子例化QMainWindow文本加密解密)
    SharePoint PerformancePoint Service-PowerShell
    Windows下安装Eric5时出现的“Sorry, please install QtHelp.”问题解决办法
    Char* ,CString ,WCHAR*之间的转换
    [C++基础]关键词volatile
    备忘--简单比较SPSS、RapidMiner、KNIME以及Kettle四款数据分析工具
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/3737528.html
Copyright © 2011-2022 走看看