forked from cwm-peace/xiaofang
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxiaofang_v1.0.ino
4021 lines (3309 loc) · 125 KB
/
xiaofang_v1.0.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
//小方1.0-巴掌宽护胸毛
/*
千叮咛万嘱咐:
我就是业余爱好,代码水平是真不行,我已经尽我所能写了备注,但遗憾的是有时候依然连我自己都读不懂,各位自求多福吧。
有些参数没搞明白之前最好不要改,不然会出些莫名其妙的问题。现在的代码刚好能跑,目前没有太大的bug,相对比较流畅。
我也在抽空不断优化,如果你是代码老司机可以帮忙优化优化。
我说说代码的大概原理
所有功能都放在一个大循环里,每个功能有个标志位变量,当这个变量为1时,表明当前选择的是这个功能,其他功能的标志位会被置零,所以在大循环里反复执行这个功能。
然后在每个功能里设置了手势检测,如果读取到进入菜单的操作(向后甩)就会立即进入菜单切换界面,通过左右倾斜选择功能,向上倾斜就确定进入该功能。这个菜单选择
操作就会设置功能的标志位变量,让其中一个为1,其他全为零。(除了温度、代码版本、声音开关这几个不用,这几个进入后,会自动回到进入菜单时的功能里。)
各功能描述
插上usb就会进入充电界面,会一直显示充电动画,直到充满,这个时候无法使用任何功能。只有拔下来才能进入后面的功能,每次插电会自动重启主控,拔下来后会开始自动校正6050的偏差,这个大概会等待10秒左右。
但后续休眠被唤醒就很快。
为了节约用电,给主控和6050都设置了无操作超时就进入休眠模式,但即便如此也只能待机两天。
在所有功能里,只要倒扣就会立即进入休眠,需要摇一摇唤醒。菜单状态里倒扣不会休眠。
任何姿态下,静止不动超过一定时间也会进入休眠,需要摇一摇唤醒。(温度显示除外)
关于显示驱动原理
设置了两级显示数据的缓存数组,两个数组大小一样。初级显存用来做一些碰撞检测之类的,次级显存用于最终上传到点阵驱动里显示出来。这样可以实现指定像素的闪烁效果而不会影响到游戏里的碰撞检测。
迷宫:
迷宫,大概原理就是用一个大数组作为大地图,屏幕分辨率只有8x8,所以肯定是无法显示完的,所以我定义了一个视野的概念,也就是点阵能显示的只是大地图的一部分,这部分视野
会随着玩家的移动而在大地图里移动,显示出大地图里对应区域的画面信息。每个地图设置了自己的终点区域,玩家只要到这个区域里就会通关,然后随机读取存储在flash里的其余七个地图之一。
你可以把玩家看作是一个钢珠,在地图里随着重力滚动,你往哪个方向倾斜它就会滚过去,所以玩的时候需要平放。
贪吃蛇:
贪吃蛇的实现原理我自己都说不清楚,反正是一点点地就拼凑出来了,大家空了自己看吧。也是重力感应,你往哪边倾斜,它就往哪边走,但不能倒退。
死亡时会显示得分,得分显示画面会跟随重力方向自动翻转。如果得分超过flash里记录的最高分,就会更新记录。破纪录动画还没写。
卜卦和摇骰子:
这个很简单,进去后摇一摇会随机出现对应画面。
沙漏:
上面的沙子掉完后会启动闹铃,闹铃状态下有任何移动就会退出闹铃然后重新开始。计时不太准确,但能设置每个沙子掉落的间隔时长,变量为shalou_speed,数字越大就越慢。
沙子掉落过程中,整个画面会随着放置方向自动改变画面方向,让未掉落的沙子保持在上方。实现方法就是在过程中加入重力方向判断的函数。
待优化
//表情没有做跟随重力方向显示的修改,只能固定一个方向显示
*/
//硬件定义---------------------------------------------------------------------------硬件定义//
//小喇叭输出 10
//视野坐标系定义: 左下角为原点(0,0)到(7,7)
//充电口所在方向定义为右,也就是ay()小于0,左边大于0. 上ax()小于0,下ay()大于0
//玩家坐标遵循视野坐标系,玩家坐标范围4x4,左下角坐标定义为玩家的位置坐标,相对坐标范围(0,0)到(1,1)
//迷宫地图坐标系定义:
//大地图面积为6x6个视野范围,左上角定义为原点(0,0),右下角为(47,47),
//外围一圈视野区域定义为墙,是全部点亮的区域,无法通过
//陀螺仪的轴向和屏幕的方向关系(充电口为右):
//imu.ax()对应上下,imu.ay()对应左右
//硬件定义---------------------------------------------------------------------------硬件定义//
/*程序结构描述
显存:
显存分两级,初级view(是全局变量)、后级LedBuffer(类私有变量)。view用于储存游戏里出现的实体信息,但不一定会显示出来,LedBuffer的数据是最终显示的数据。
点阵驱动:
void setIntensity(int intensity);//设置显示屏的亮度,亮度范围0-15,千万不要尝试把亮度开到5以上持续5秒以上,很快就会冒烟(电路设计需要优化,电流承载能力不够)
void clearDisplay();//清空显示屏
void setLed(int x, int y, byte state);//设置指定坐标单个led的亮灭,row就是坐标x,col就是坐标y
void setLed_work(int x, int y, byte state);在后级显存里设置像素
byte getLedState(int x, int y); //获取后级显存里指定坐标的状态,返回1或者0
byte getLedState_out(int x, int y, byte view[8]);//获取初级显存里指定坐标的状态,返回1或者0
void bitmap(byte buffer[8]); //把位图信息拷贝到后级显存
void roll(byte lr,byte ud);// //按某个方向滚动后级显存里的信息,左右,上下,左右速度,上下速度
void UpLoad();负责把LedBuffer里的数据显示到屏幕上
MPU_6050驱动:
低功耗运动中断:set_int() ,进入低功耗
加速度:ax(),ay(),az(),分别获取三个轴向的加速度,范围是-1到1的float格式数据.(原始数据是rawAx(),rawAy(),rawAz(),得到一个int格式的数据)
角速度:gx(),gy(),gz(),分别获取三个轴向的角速度,范围是?(原始数据是rawGx(),rawGy() ,rawGz(),得到一个int格式的数据 ,-40000~40000)
温度:temp()获取当前温度,单位摄氏度。(原始数据rawTemp(),获取温度数据,int格式)
误差:setBias() ,updateBias() ,这个没搞懂是啥意思
AT24C6(2k Byte空间,8页,每页256字节):
随机地址写一个字节:void iic_write_byte(byte Dadr,byte Badr,byte data);//(页地址(0-7),字节地址(0-255),数据)在指定地址写入一个字节的内容
随机地址读一个字节:byte iic_read_byte(byte Dadr,byte Badr);//()读取指定位置的一个字节
声音开关存储地址:0页,136字节
贪吃蛇得分储存地址:0页,135字节
存储结构:
页地址 字节地址
0-地图0,贪吃蛇得分(0,135)声音开关(0,136),138-255空
1-地图1,135-255,空
2-地图2,135-255,空
3-地图3,135-255,空
4-地图4,135-255,空
5-地图5,135-255,空
6-地图6,135-255,空
7-地图7,135-255,空
电源管理(ip5306ck):
byte led_state();//统计一千次3个引脚的电平,通过占空比统计出四个灯的亮灭状态
byte bat_state();//判断当前电池电量(低电量或者充满)以及是否正在充电,低电量返回0,
充电状态判断:charge_state,1为充电,0为未充电
*/
///////////////////////////////////////////////////////////////////////////下面面是全局变量////////////////////////////////////////////////////////////////
#include "LowPower.h"//低功耗库
#include "she.h"//贪吃蛇类定义
#include "iic_16k.h"//AT24C16存储芯片驱动
#include "ip5306ck.h"//电源管理芯片驱动
#include "LedControl.h"//点阵驱动
#include <basicMPU6050.h> //陀螺仪驱动
/*
//备注:请安下面的顺序执行代码编译
//全部调试好后,下面三步涉及到的定义就注释掉,再编译上传
*/
//第一步,打开这个定义,这个用来安装点阵的时候测试点阵,点阵ok后就注释掉
#define DEBUG_LEDTEST
//第二步,打开这个定义,写入地图数据
//MAP_WRITE定义被开启时,执行地图数据写入操作,写入完成之后就注释掉,如果是首次写入完成会有短促的滴滴声,
//如果已经写过了会有长的滴滴声,总之任何声音出现了,说明地图数据已经写好了,就可以注释掉这个定义了
//#define MAP_WRITE
//第三步,自由调试,自选
//如果要调试就保留下面这句,否则就注释掉它(1.跳过充电循环,因为插着usb时它会一直充电,停在这个循环里。2.关闭陀螺仪校正,这个过程很费时间。)
//#define DEBUG
//第四步,串口调试开关,自选
//#define Serial_DEBUG
//像素结构体
#ifdef DEBUG_LEDTEST
#define DEBUG
#endif
#ifdef MAP_WRITE
#include "migong_ditu.h"
struct migong_map0 mmp0;
struct migong_map1 mmp1;
struct migong_map2 mmp2;
struct migong_map3 mmp3;
struct migong_map4 mmp4;
struct migong_map5 mmp5;
struct migong_map6 mmp6;
struct migong_map7 mmp7;
#endif
struct Mypiexl{
byte x;//初始坐标
byte y;
byte x_old;//保留上一次的坐标
byte y_old;
byte x_now;//当前坐标
byte y_now;
//下面两个参数记录当前的速度和速度方向
float speed_x_now;//两个轴向的速度
float speed_y_now;
float speed_x;//两个轴向的初始速度
float speed_y;
byte over_flag;//是否已经静止,静止为1,非静止为0
};
//迷宫地图结构体
struct migong_maps{
byte qiangbi_0[8]={
0b11111111,//0
0b11111111,//1
0b11111111,//2
0b11111111,//3
0b11111111,//4
0b11111111,//5
0b11111111,//6
0b11111111// 7
};
byte * qiangbi[8]={
&qiangbi_0[0],//0
&qiangbi_0[1],//1
&qiangbi_0[2],//2
&qiangbi_0[3],//3
&qiangbi_0[4],//4
&qiangbi_0[5],//5
&qiangbi_0[6],//6
&qiangbi_0[7]// 7
};
byte map_data[128]={//迷宫大地图显存
0b10000000,0b00000111,0b11111111,0b11111111,
0b10000000,0b00000100,0b11110000,0b00000001,
0b10011111,0b11111100,0b11110000,0b00000001,
0b10000000,0b00000000,0b00000011,0b11110001,
0b10000000,0b00000000,0b00000011,0b00000000,
0b10011110,0b01111100,0b00110011,0b00000000,
0b10010000,0b00000100,0b00110011,0b00000100,
0b10010000,0b00000000,0b00000011,0b00000100,
0b11110011,0b11110000,0b00000011,0b11100100,
0b10000000,0b00110011,0b11111111,0b11100100,
0b10000000,0b00111110,0b00001111,0b11100100,
0b10011111,0b00111110,0b00001100,0b00000000,
0b10011111,0b00000000,0b01001100,0b00000000,
0b10000001,0b00000000,0b01001100,0b11111111,
0b10000001,0b11111111,0b11001100,0b00000001,
0b11111000,0b00000001,0b11001100,0b00000001,
0b11111000,0b00000001,0b00000000,0b11111001,
0b11111111,0b11111001,0b00000000,0b10000001,
0b10000001,0b11100001,0b11001111,0b10000001,
0b10000001,0b11100001,0b11111111,0b10011001,
0b10011000,0b00100110,0b00000000,0b00011001,
0b10011000,0b00100110,0b00000000,0b00011001,
0b10011111,0b00000110,0b01110011,0b11111001,
0b10000011,0b00000110,0b01110000,0b00001111,
0b10000000,0b11100110,0b01110000,0b00001111,
0b11100000,0b00000110,0b01111111,0b11001000,
0b11100000,0b00000110,0b01000000,0b00001000,
0b11100110,0b01100110,0b01000000,0b00001001,
0b11100110,0b01100000,0b01001111,0b00111001,
0b10000110,0b00100000,0b01000001,0b00000001,
0b10000110,0b00111111,0b11000001,0b00000001,
0b11111111,0b11111111,0b11000001,0b11111111,
};
byte * map_1[8]={
&map_data[0],
&map_data[4],
&map_data[8],
&map_data[12],
&map_data[16],
&map_data[20],
&map_data[24],
&map_data[28]
};
byte * map_2[8]={
&map_data[1],
&map_data[5],
&map_data[9],
&map_data[13],
&map_data[17],
&map_data[21],
&map_data[25],
&map_data[29]
};
byte * map_3[8]={
&map_data[2],
&map_data[6],
&map_data[10],
&map_data[14],
&map_data[18],
&map_data[22],
&map_data[26],
&map_data[30]
};
byte * map_4[8]={
&map_data[3],
&map_data[7],
&map_data[11],
&map_data[15],
&map_data[19],
&map_data[23],
&map_data[27],
&map_data[31]
};
byte * map_5[8]={
&map_data[32],
&map_data[36],
&map_data[40],
&map_data[44],
&map_data[48],
&map_data[52],
&map_data[56],
&map_data[60]
};
byte * map_6[8]={
&map_data[33],
&map_data[37],
&map_data[41],
&map_data[45],
&map_data[49],
&map_data[53],
&map_data[57],
&map_data[61]
};
byte * map_7[8]={
&map_data[34],
&map_data[38],
&map_data[42],
&map_data[46],
&map_data[50],
&map_data[54],
&map_data[58],
&map_data[62]
};
byte * map_8[8]={
&map_data[35],
&map_data[39],
&map_data[43],
&map_data[47],
&map_data[51],
&map_data[55],
&map_data[59],
&map_data[63]
};
byte * map_9[8]={
&map_data[64],
&map_data[68],
&map_data[72],
&map_data[76],
&map_data[80],
&map_data[84],
&map_data[88],
&map_data[92]
};
byte * map_10[8]={
&map_data[65],
&map_data[69],
&map_data[73],
&map_data[77],
&map_data[81],
&map_data[85],
&map_data[89],
&map_data[93]
};
byte * map_11[8]={
&map_data[66],
&map_data[70],
&map_data[74],
&map_data[78],
&map_data[82],
&map_data[86],
&map_data[90],
&map_data[94]
};
byte * map_12[8]={
&map_data[67],
&map_data[71],
&map_data[75],
&map_data[79],
&map_data[83],
&map_data[87],
&map_data[91],
&map_data[95]
};
byte * map_13[8]={
&map_data[96],
&map_data[100],
&map_data[104],
&map_data[108],
&map_data[112],
&map_data[116],
&map_data[120],
&map_data[124]
};
byte * map_14[8]={
&map_data[97],
&map_data[101],
&map_data[105],
&map_data[109],
&map_data[113],
&map_data[117],
&map_data[121],
&map_data[125]
};
byte * map_15[8]={
&map_data[98],
&map_data[102],
&map_data[106],
&map_data[110],
&map_data[114],
&map_data[118],
&map_data[122],
&map_data[126]
};
byte * map_16[8]={
&map_data[99],
&map_data[103],
&map_data[107],
&map_data[111],
&map_data[115],
&map_data[119],
&map_data[123],
&map_data[127]
};
byte * * map_all[6][6]={//总地图数组,[y][x],左上角为原点,全局坐标范围(0,0)到(47,47)
{qiangbi,qiangbi,qiangbi,qiangbi,qiangbi,qiangbi},
{qiangbi, map_1, map_2, map_3, map_4, qiangbi},
{qiangbi, map_5, map_6, map_7, map_8, qiangbi},
{qiangbi, map_9,map_10,map_11, map_12, qiangbi},
{qiangbi, map_13,map_14,map_15,map_16, qiangbi},
{qiangbi,qiangbi,qiangbi,qiangbi,qiangbi,qiangbi}
};
//初始化玩家坐标
byte px=2;
byte py=1;
//初始化视野坐标
byte x=24;
byte y=32;
//初始化目的地闪烁区域,地图全局坐标,左上方为原点
byte mubiao_x=19;
byte mubiao_y=8;
byte map_index=0;//地图序号,从0开始
};
byte versions=1;//代码版本
byte v_page=0;//代码版本信息存储页地址
byte v_addr=137;//代码版本信息存储字节地址
basicMPU6050 <> imu;//创建陀螺仪实例
LedControl lc=LedControl(3,13,4);//创建点阵驱动类(DIN,CLK,CS)[19,18,17]
she myshe=she();//创建蛇实例
iic_16k myflash=iic_16k();//创建内存读写实例
ip5306ck bat=ip5306ck();//创建电量检测类
//当开启地图写入的时候,这些代码都不用编译,不然空间不够
//======================================================条件编译================================================================
#ifndef MAP_WRITE
byte view[]={0,0,0,0,0,0,0,0};//迷宫的视野范围,也是做为初级显存用,这里的数据可以经过处理后再送入LedBuffer显存,于是可以做一些画面实体互动或者碰撞检测之类的
byte she_defen_page=0;//贪吃蛇得分存储页地址
byte she_defen_addr=135;//贪吃蛇得分存储字地址
byte beeper_page=0;//声音开关存储页地址
byte beeper_addr=136;//声音开关存储字地址
byte beeper=1;//喇叭开关
int mpu_key_flag=1;//设置蛇初始运动方向为向上运动
int mpu_key_flag_a;
int mpu_key_flag_old;//记录上一次按键状态
unsigned long null_time;//无输入限时,超时自动关闭屏幕,直到有输入才复位。
unsigned long timeout=15000;//休眠倒计时每单位毫秒
int x_huiwu=0;//视野水平坐标,如果是四个屏幕范围则取值(0-24)
int power_down_flag=0;//是否进入低功耗的标志位
float input_old;//保存上一次的输入,用于蛇和迷宫游戏的休眠判断
float input_new;//保留当前输入,用于蛇和迷宫游戏的休眠判断
int speed=300;//设置蛇的初始速度为400
int she_state=0;//蛇的生命状态,1为生,0为死
int migong_state=0;//迷宫的生命状态,1为生,0为死
const int t_xy_time=4;//地图坐标闪烁频率
const int t_time=2;//玩家闪烁频率
float pax;//迷宫专用暂存陀螺仪输出结果
float pay;
int guaxiang=0;//八卦选中开关
int shaizi=0;//骰子选中开关
int shalou=1;//沙漏计时器开关
int shoudiantong=0;//手电筒开关
int tem=0;//温度计开关
int beeper_state=0;//声音操作标记,操作过会被置1,没操作过会被置0。
byte map_0[8];//map_offset()函数专用的存储空间
byte lishidefen;//用来读取贪吃蛇历史最高纪录
int game_old_state=4;//存储上次退出菜单时所处位置,再次返回菜单的时候回到该位置(0迷宫,1贪吃蛇,2卜卦,3骰子,4沙漏,5声音,6版本号)
struct Mypiexl piexl_1;//定义一个像素结构
struct migong_maps migong_map;// 定义一个迷宫地图结构体
int migong_speed=16;//12;//6;//这个参数控制迷宫移动延时,数字越大动作就越慢
int shalou_speed=1000;//9600;//1920;//这个参数控制沙漏每个像素掉落的间隔时间
float ay=9.8;//沙漏下落加速度
float time_speed=0.25;//0.15;//沙漏时间切片
float time_pass=0;
int gaodu=350;//沙漏实际高度
byte zhonglifangxiang=3;//用来定义重力方向,现在用方向3就正确,用别的就有问题
byte zhonglifangxiang_old=zhonglifangxiang;
float a_x;//用于姿态判断
float a_y;//用于姿态判断
byte xx=5;//沙漏专用
byte yy=7;//沙漏专用
byte view_tem[8];//用于进入菜单时临时存储初级显存
//真实物理像素结构体
//数字字库
byte num_0[]={
0B11100000,//0//0%-3%
0B10100000,//1
0B10100000,//2
0B10100000,//3
0B11100000,//4
0B00000000,//5
0B00000000,//6
0B00000000// 7
// x 01234567
};
byte num_1[]={
0B01000000,//0//0%-3%
0B01000000,//1
0B01000000,//2
0B01000000,//3
0B01000000,//4
0B00000000,//5
0B00000000,//6
0B00000000// 7
// x 01234567
};
byte num_2[]={
0B11100000,//0//0%-3%
0B00100000,//1
0B11100000,//2
0B10000000,//3
0B11100000,//4
0B00000000,//5
0B00000000,//6
0B00000000// 7
// x 01234567
};
byte num_3[]={
0B11100000,//0//0%-3%
0B00100000,//1
0B11100000,//2
0B00100000,//3
0B11100000,//4
0B00000000,//5
0B00000000,//6
0B00000000// 7
// x 01234567
};
byte num_4[]={
0B10100000,//0//0%-3%
0B10100000,//1
0B11100000,//2
0B00100000,//3
0B00100000,//4
0B00000000,//5
0B00000000,//6
0B00000000// 7
// x 01234567
};
byte num_5[]={
0B11100000,//0
0B10000000,//1
0B11100000,//2
0B00100000,//3
0B11100000,//4
0B00000000,//5
0B00000000,//6
0B00000000// 7
// x 01234567
};
byte num_6[]={
0B11100000,//0//0%-3%
0B10000000,//1
0B11100000,//2
0B10100000,//3
0B11100000,//4
0B00000000,//5
0B00000000,//6
0B00000000// 7
// x 01234567
};
byte num_7[]={
0B11100000,//0//0%-3%
0B00100000,//1
0B00100000,//2
0B00100000,//3
0B00100000,//4
0B00000000,//5
0B00000000,//6
0B00000000// 7
// x 01234567
};
byte num_8[]={
0B11100000,//0//0%-3%
0B10100000,//1
0B11100000,//2
0B10100000,//3
0B11100000,//4
0B00000000,//5
0B00000000,//6
0B00000000// 7
// x 01234567
};
byte num_9[]={
0B11100000,//0//0%-3%
0B10100000,//1
0B11100000,//2
0B00100000,//3
0B11100000,//4
0B00000000,//5
0B00000000,//6
0B00000000// 7
// x 01234567
};
//数字字库数组汇总
byte * num_bitmap[10]={num_0,num_1,num_2,num_3,num_4,num_5,num_6,num_7,num_8,num_9};
//游戏界面
byte game_0[]={
0B00000000,//0 迷宫
0B01010110,//1
0B01011010,//2
0B01000010,//3
0B00111010,//4
0B00100010,//5
0B01101110,//6
0B00000000// 7
// x 01234567
};
byte game_1[]={
0B00000000,//0 贪吃蛇
0B01110100,//1
0B01000000,//2
0B01111110,//3
0B00000010,//4
0B00011110,//5
0B00010000,//6
0B00000000// 7
// x 01234567
};
byte game_2[]={ //八卦
0B00000000,//0
0B01100110,//1
0B00000000,//2
0B01100110,//3
0B00000000,//4
0B01111110,//5
0B00000000,//6
0B00000000// 7
//
};
byte game_3[]={ //摇骰子
0B00000000,//0
0B01100110,//1
0B01100110,//2
0B00011000,//3
0B00011000,//4
0B01100110,//5
0B01100110,//6
0B00000000// 7
// x 01234567
};
byte game_4[]={ //沙漏计时器
0B00000000,//0
0B01111110,//1
0B00111100,//2
0B00011000,//3
0B00011000,//4
0B00111100,//5
0B01111110,//6
0B00000000// 7
// x 01234567
};
byte game_5[]={ //温度
0B00000000,//0
0B01100000,//1
0B01101110,//2
0B00010000,//3
0B00010000,//4
0B00010000,//5
0B00001110,//6
0B00000000// 7
// x 01234567
};
byte game_6[]={ //声音开
0B00000000,//0
0B00011000,//1
0B00001100,//2
0B00001010,//3
0B00011000,//4
0B00111000,//5
0B00110000,//6
0B00000000// 7
// x 01234567
};
byte game_7[]={ //代码版本
0b00000000,
0b00000000,
0b01100110,
0b01100110,
0b00000000,
0b01000010,
0b00111100,
0b00000000,
};
byte *game_bitmap[]={game_0,game_1,game_2,game_3,game_4,game_5,game_6,game_7,game_2,game_2,game_2};//这里很奇怪,如果尾巴上不多放几个成员,就会出现显示不完整的问题,不知道为什么
//电池电量
byte bat_0[]={
0B00000000,//0
0B00011000,//1
0B00100100,//2
0B00100100,//3
0B00100100,//4
0B00100100,//5
0B00111100,//6
0B00000000// 7
// x 01234567
};
byte bat_1[]={
0B00000000,//0
0B00011000,//1
0B00100100,//2
0B00100100,//3
0B00100100,//4
0B00111100,//5
0B00111100,//6
0B00000000// 7
// x 01234567
};
byte bat_2[]={
0B00000000,//0
0B00011000,//1
0B00100100,//2
0B00100100,//3
0B00111100,//4
0B00111100,//5
0B00111100,//6
0B00000000// 7
// x 01234567
};
byte bat_3[]={
0B00000000,//0
0B00011000,//1
0B00100100,//2
0B00111100,//3
0B00111100,//4
0B00111100,//5
0B00111100,//6
0B00000000// 7
// x 01234567
};
byte bat_4[]={
0B00000000,//0
0B00011000,//1
0B00111100,//2
0B00111100,//3
0B00111100,//4
0B00111100,//5
0B00111100,//6
0B00000000// 7
// x 01234567
};
byte bat_5[]={
0B00000000,//0
0B00011000,//1
0B00111100,//2
0B00111100,//3
0B00111100,//4
0B00111100,//5
0B00111100,//6
0B00000000// 7
// x 01234567
};
byte bat_6[]={
0B00000000,//0//
0B00011000,//1
0B00111100,//2
0B00111100,//3
0B00111100,//4
0B00111100,//5
0B00111100,//6
0B00000000// 7
// x 01234567
};
byte *bat_bitmap[7]={bat_0,bat_1,bat_2,bat_3,bat_4,bat_5,bat_6};
//摇骰子图形
byte dian1[8]={
0B00000000,//0
0B00011000,//1
0B00111100,//2
0B01111110,//3
0B01111110,//4
0B00111100,//5
0B00011000,//6
0B00000000// 7
// x 01234567
};
byte dian2[8]={
0B00000110,//0
0B00001111,//1
0B00001111,//2
0B00000110,//3
0B01100000,//4
0B11110000,//5
0B11110000,//6
0B01100000// 7
// x 01234567
};
byte dian3[8]={
0B00011000,//0
0B00111100,//1
0B00111100,//2
0B00011000,//3
0B11000011,//4
0B11100111,//5
0B11100111,//6
0B11100111// 7
// x 01234567
};
byte dian4[8]={
0B11100111,//0
0B11100111,//1
0B11100111,//2
0B00000000,//3
0B00000000,//4
0B11100111,//5
0B11100111,//6
0B11100111// 7
// x 01234567
};
byte dian5[8]={
0B11100111,//0
0B11100111,//1
0B11011011,//2
0B00111100,//3
0B00111100,//4
0B11011011,//5
0B11100111,//6
0B11100111// 7
// x 01234567
};
byte dian6[8]={
0B11100111,//0
0B11100111,//1
0B00000000,//2
0B11100111,//3
0B11100111,//4
0B00000000,//5
0B11100111,//6
0B11100111// 7
// x 01234567
};
byte *shaizi_all[6]={dian1,dian2,dian3,dian4,dian5,dian6};
//八卦图形
//乾
byte qian[8]={
0B11111111,//0
0B11111111,//1
0B00000000,//2
0B11111111,//3
0B11111111,//4
0B00000000,//5
0B11111111,//6
0B11111111// 7
// x 01234567
};
//坤
byte kun[8]={
0B11100111,//0
0B11100111,//1
0B00000000,//2
0B11100111,//3
0B11100111,//4
0B00000000,//5
0B11100111,//6
0B11100111// 7
// x 01234567
};
//震
byte zhen[8]={
0B11100111,//0
0B11100111,//1
0B00000000,//2
0B11100111,//3
0B11100111,//4
0B00000000,//5
0B11111111,//6
0B11111111// 7
// x 01234567
};
//艮
byte gen[8]={
0B11111111,//0
0B11111111,//1
0B00000000,//2
0B11100111,//3
0B11100111,//4
0B00000000,//5
0B11100111,//6
0B11100111// 7
// x 01234567
};
//离
byte li[8]={
0B11111111,//0
0B11111111,//1
0B00000000,//2
0B11100111,//3
0B11100111,//4
0B00000000,//5
0B11111111,//6
0B11111111// 7
// x 01234567
};
//坎
byte kan[8]={
0B11100111,//0
0B11100111,//1
0B00000000,//2
0B11111111,//3
0B11111111,//4
0B00000000,//5
0B11100111,//6
0B11100111// 7
// x 01234567
};
//兑
byte dui[8]={
0B11100111,//0
0B11100111,//1
0B00000000,//2
0B11111111,//3
0B11111111,//4
0B00000000,//5
0B11111111,//6
0B11111111// 7