利用uc-gui封裝畫圖和畫線函數(shù)移植51上的模擬動(dòng)畫
掃描二維碼
隨時(shí)隨地手機(jī)看文章
這里的動(dòng)畫是黃色矩形區(qū)域中一個(gè)模仿俯視圖的起重機(jī)運(yùn)作動(dòng)畫,一個(gè)是模仿主視圖的吊鉤的運(yùn)動(dòng)。通過改變初始Init函數(shù)中的數(shù)據(jù)b_x,b_y實(shí)現(xiàn)矩形區(qū)域的移動(dòng)。當(dāng)實(shí)時(shí)采集時(shí)要首先根據(jù)起重機(jī)的實(shí)際情況改變比例,當(dāng)傳感器傳來數(shù)據(jù)時(shí)就相當(dāng)于這里的run函數(shù),只要把傳感器數(shù)據(jù)接收函數(shù)和相關(guān)函數(shù)結(jié)合即可。
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 畫矩形區(qū)----------改造的和51一樣的函數(shù)
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 畫線函數(shù)-----------改造的和51一樣的函數(shù)
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;//水平移動(dòng)速度,
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 }//總畫函數(shù)
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;//達(dá)到警戒線
83 }//橫梁移動(dòng)
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 }//達(dá)到警戒線
94 }//小車移動(dòng)
95 void run1()
96 {
97 runMiddle();
98 runSmall();
99 }//運(yùn)動(dòng)函數(shù)
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函數(shù)------一切動(dòng)畫貼圖都在此
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 }