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 }
  • 相关阅读:
    SharePoint 2013 APP 开发示例 (六)服务端跨域访问 Web Service (REST API)
    麦咖啡导致电脑不能上网
    SharePoint 2013 Central Admin 不能打开
    SharePoint 2013 APP 开发示例 (五)跨域访问 Web Service (REST API)
    SharePoint 2013 APP 开发示例 系列
    synthesize(合成) keyword in IOS
    Git Cmd
    简单的正则匹配
    Dropbox
    SQL Server Replication
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/3737528.html
Copyright © 2011-2022 走看看