找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9834|回复: 4
收起左侧

8*8*8光立方焊接制作教程与单片机程序分享

[复制链接]
ID:426481 发表于 2018-11-19 09:44 | 显示全部楼层 |阅读模式
程序附带无线遥控功能,想要附加功能可以自己改程序。本方案非原创,仅供大家学习。

0.png 0.png

上升沿光立方主板焊接
  
选择DIY套件说明你是一位喜欢自己亲自动手的实践者,(即使是刚刚接触电子这一行的人也不用太担心,还有我们为你提供技术支持哦!),只要你具备基本的识图及调试能力,基本都是一次成功。  
但在焊接前请阅读此说明,可以有助于你更好更快的完成我们的光立方板 DIY工作。 以下是光立方主板焊接过程中需要注意的几点,要仔细看哦!   电烙铁一把(功率最好在 40W),焊锡丝一卷(直径最好在 0.8左右),焊锡膏或松香若干,剪脚钳一把。  
准备一个小盒子,把所有的元器放入盒子里备用。(都是小东东,不一小心掉了一个都很麻烦哦)  
2、原理图的准备  
将资料中光立方原理图打开,焊接时要对着原理图哦!
3、焊接元件清单,拿到套件的时候先清点元件数量,焊接的时候对照原理图和元件清单进行焊接
4、散件底板:是指没有焊接的底板,单片机程序已经下载,
都是散件,需要自己焊接;不会焊接贴片芯片的可参考本视频 (板子不同,芯片的焊接技巧一样)
http://v.youku.com/v_show/id_XMTM4Nzk5MDAwMA==.html
复制到浏览器打开

0.png

第二步-LED灯制作8个面教程使用模板焊接不用看这步)

8X8X8 LED 接说明

篇将绍光方的 LED 焊接根据 说明焊接的方采用LED 需要 引脚正极弯,络方均为阴,别需注意 看本程折,否造成后果不堪
1 拿出一个 LED 将最长的那个引脚也就是正极如果这里不能区分正负极 请将 LED 3.3V 纽扣电池点亮确保后面的折灯引脚不会错确定引脚是正 极后,拿出 512 LED,全部将其折好正极,如图所示,正极折弯 90 度不



2 步:拿出光立方的主板,也就是所说的自带模板,将主板垫高后就可以直接做 led 焊接模块了,因为网络流行的方法都需要自制带孔的木板或者万能板模板 需要浪费一些材料和时间,本店采用节约就地取材,直接使用主板进行焊接制作

LED 灯珠间距约等于 2CM标准模板



3  拿出全部折好的
512   LED 中的 8  将负极插入如图所示正方形的小 孔,正极为横向的朝右边一次只能插入 8 个,千万别偷懒哦一排排的插入焊接


4  插入好了
8   LED 确认无误后将其横向的正极引脚焊接好焊接好 8
个的效果如图


5  步:焊接好了 8   LED,也就是一排,将其拔出来,继续插入第二组,焊接 好,拔出来,这个步骤一共需要将 512 LED 全部焊接完,变成 8 8 个一排的




6 步:拿出焊接好的
8 组,根据下图摆好位置,放入平整的桌面上,将后面 7
led 的负极管脚尾折弯一点,这个步骤需要将每个 LED 的负极焊接好





7  步:全部焊接完的效果,即组成了
8  个层共阳的 LED 框架,一共 8  个面 每一层的正极连接一起负极连接一起焊接的过程需要自己把握LED 不能长时 间焊接,会导致损坏正负极焊接的时候也需要仔细检查,没有错误才进行操作









祝各位 DIY 焊接制作功,并且体会到程的相关焊接知,在 DIY

制作中学,学习中完成 DIY 制作,一一步,步步高升 再次感谢的支持Do It Yourself soeasy.


8
X8X8
组装

的制过程经完的差多了接下就将后的 测试装完好,个步至关要,要认调试 环节把遇的各问题解决,就呈现一个 立方。
1  步:拿出多余剩下的 LED,数量为 8  个,焊接成一条正极连接在一起的,如 图多试,功能是用于测试主板的好坏。



2  根据图片的位置和连接方法给主板下载好对应的程序接入好一组 LED 进行测试主板。主板单片机默认含测试程序直接可以测试(测试程序为左右上下扫 led像流水灯那样有规律的亮正极接入 H1 端子负极插入主板的正方形小 孔端子,通电即可进入测试模式依次点亮测试主板。






通电后进入测试阶段,即可完成测试主板焊接芯片的好坏。如果发现测试的这一排 有问题或者有 LED 不亮,表面焊接有问题,共 8 排正极分别接入 H1-H8 测试主板的过程必须完成好,如果主板没有测试好,后面的制作过程将无法进行。 主板焊接出现的问题,导致这个过程不能顺利的进行,如果发现测试不行必须将主 板维修后,才能安装 LED。焊接的过程是一个有风险的过程,焊接技术自己掌握。

3 .
40P 圆排母用水口钳或者斜口钳剪成单针:


接下来再用水口钳或者斜口钳把针座旁边的塑料剪去这个用水口钳是比较好剪的,
当然不剪也是可以,只是比较不美观


4 步:主板已经测试通过,并且能将每一个端口的 LED 点亮和熄灭,我们将剩
下的圆孔小柱子,即上一步剪出来的单针,焊接在主板的方孔位置,一共 8



5 步:
8 个面的 LED 正极全部折弯 90 度,图片所示,方便组装焊接每层的正 极用,负极最下面那个 led 灯管脚剪短 3mm 左右









6 拿出一个面
将负极插入主板的正方形小孔这个步骤需要将面的 LED 试好,并且一定要保证一个面的 LED 完好后,才能组装下一个面的 LED
H1 的端子引出一根线,接入面的每一层正极一共测试 8 次保证 LED 完好。






7 步:如果第一个面成功安装,并且测试
LED 都是好的,恭喜你离成功还差 7 步。继续拿出第二个面,第三个面,第四个面根据测试好后安装的办法,依次安装 测试好。这个过程需要将每层的正极焊接在一起,到第八面的正极剪掉就可以了

8 步:
8  个面全部测试组装好后, 效果就大概出来了


9 步:
LED 的每一层正极通过黑色连接线,连接到 H1H2H3H4H5H6H7H8 端子,最底下为第一层,如果焊接反了显示将也是反的,需要注意最下面为第一层




10 步:成品展示





单片机源程序如下:
  1. /*---------------------------------------------------------------------------------------------------
  2. * 上升沿电子科技
  3. * 时间2015.8.1
  4. -----------------------------------------------------------------------------------------------------*/

  5. //Build target 'Target 1'
  6. //compiling stc8x8x8.c...
  7. //linking...
  8. //Program Size: data=17.1 xdata=355 code=53475
  9. //creating hex file from "stc8x8x8"...
  10. //"stc8x8x8" - 0 Error(s), 0 Warning(s).
  11. //没有关闭本店字样的显示函数 FLASH_12        FLASH_14  FLASH_18 如果需要自己关闭函数即可



  12. #include "STC12C5A.H"  //包含单片机的头文件使用KEIL必须添加进来否则编译不了
  13. #include "intrins.h"   //包含NOP延时头文件
  14. #define uchar unsigned char         
  15. #define uint unsigned int         
  16. #define nop() _nop_();_nop_();
  17. #define  NOP() _nop_()          /* 定义空指令 */

  18. void key_baihei_scan();  
  19. void key_shangwiej_scan();   
  20. void key_donghua_scan();       
  21. void key_yinyue_scan();
  22. void box(unsigned char x1,unsigned char z1,unsigned char y1,unsigned char x2,unsigned char z2,unsigned char y2,unsigned char fill,unsigned char le);
  23. /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
  24. sbit AD=P1^0;                 //定义音频输入接口
  25. sbit GM=P1^1;                 //定义光敏输入接口

  26. sbit K1=P0^0;                 //定义功能按键接口
  27. sbit K2=P0^1;                 //定义功能按键接口
  28. sbit K3=P0^2;                 //定义功能按键接口
  29. sbit K4=P0^3;                 //定义功能按键接口

  30. sbit PWM_POW=P4^4;   //定义PWM呼吸小夜灯和主板电源指示灯功能接口 低电平
  31. sbit IRIN=P3^2;           //红外线信号接口

  32. /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
  33. sbit M_HR_DS0=P1^4;          //模拟数据发送端口
  34. sbit M_LR_DS0=P1^5;          //模拟数据发送端口


  35. sbit M_HG_DS0=P1^6;          //模拟数据发送端口
  36. sbit M_LG_DS0=P0^7;          //模拟数据发送端口

  37. sbit CLK=P1^3;    //模拟时钟控制端口
  38. sbit SUO=P1^2;          //模拟锁存信号端口
  39. /*$-_-$_-_$-_-$_-_$-_-$_-_$-_-$_-_$-_-$_-_$-_-$_-_$-_-$_-_$-_-$_-_$-_-$_-_$-_-$_-_$*/

  40. sbit M_A=P3^4;          //行数据扫描信号
  41. sbit M_B=P3^5;          //行数据扫描信号
  42. sbit M_C=P3^6;          //行数据扫描信号
  43. sbit M_D=P3^7;          //行数据扫描信号
  44. sbit M_EN=P1^7;   //行数据扫描信号
  45. /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
  46. unsigned char displayck[]=
  47. {
  48. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  49. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  50. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  51. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  52. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  53. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  54. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  55. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  56. };
  57. unsigned char shuzu8X8[]=
  58. {
  59. 0XBD,0X85,0X85,0XBD,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  60. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  61. 0XA1,0XA1,0XA1,0XBD,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  62. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  63. };

  64. /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
  65. uchar xdata display[8][8];
  66. uchar xdata msd=4;
  67. uint ld=500;
  68. uchar test=0,key1=0,key2=0,key3=0,key4=0;
  69. bit pu;
  70. uchar xsdsq=0;
  71. uchar cd=0,cnt=0,errd_flag=0,read_flag=0,layerr=0,saom=0;
  72. unsigned char IRCOM[7];
  73. unsigned int CYCLE=100,PWM_LOW=1110,shan=0,shuzi1=0,shuzi2=0,shuzi3=0,shuzi4=0,m=0;//定义周期并赋值

  74. void delay(unsigned int i);      //函数声名  
  75. void IRInit();                                      
  76. void IRdelay(char x);

  77. /*rank:A,1,2,3,4,I,心,U*/
  78. uchar code table_cha[8][8]=
  79. {
  80. 0x51,0x51,0x51,0x4a,0x4a,0x4a,0x44,0x44,
  81. 0x18,0x1c,0x18,0x18,0x18,0x18,0x18,0x3c,
  82. 0x3c,0x66,0x66,0x30,0x18,0x0c,0x06,0x7e,
  83. 0x3c,0x66,0x60,0x38,0x60,0x60,0x66,0x3c,
  84. 0x30,0x38,0x3c,0x3e,0x36,0x7e,0x30,0x30,
  85. 0x3c,0x3c,0x18,0x18,0x18,0x18,0x3c,0x3c,
  86. 0x66,0xff,0xff,0xff,0x7e,0x3c,0x18,0x18,
  87. 0x66,0x66,0x66,0x66,0x66,0x66,0x7e,0x3c,
  88. };
  89. /*the "ideasoft"*/
  90. /*rank:A,1,2,3,4,I,心,U*////开机的LOGO显示字符字模提取PLC2002
  91. uchar code table_cha_sj[8][8]=
  92. {
  93. 0x08,0x08,0x78,0x08,0x08,0x08,0x08,0xFF,/*"上",0*/
  94. 0x18,0x04,0x22,0x24,0xFF,0x24,0x24,0x24,/*"升",0*/
  95. 0x78,0x49,0xCE,0x00,0xFF,0x84,0x86,0xFD,/*"沿",0*/
  96. 0x3C,0x42,0xA5,0xDB,0x81,0x99,0x42,0x3C,/*"笑脸",0*/
  97. 0x3C,0x42,0xA5,0xDB,0x81,0x99,0x42,0x3C,/*"笑脸",0*/
  98. 0x08,0x2A,0x2A,0xFF,0x14,0x14,0x96,0x71,/*"光",0*/
  99. 0x08,0x7F,0x22,0x22,0x24,0x14,0x14,0xFF,/*"立",0*/
  100. 0x08,0xFF,0x04,0x7C,0x44,0x44,0x42,0x31,/*"方",0*/
  101. };
  102. /*rank:3,D,C,L,U,E,F,F,T*///开机的LOGO显示字符字模提取PLC2002
  103. uchar code table_cha_cu[9][8]=
  104. {
  105. 0x7E,0x40,0x40,0x7C,0x7C,0x40,0x40,0x7E,/*"3",0*/
  106. 0x00,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C,/*"D",0*/
  107. 0x00,0x3C,0x02,0x02,0x02,0x02,0x02,0x3C,/*"C",0*/
  108. 0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x7C,/*"L",0*/
  109. 0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,/*"U",0*/
  110. 0x00,0x7E,0x02,0x02,0x7E,0x02,0x02,0x7E,/*"E",0*/
  111. 0x78,0x04,0x04,0x04,0x7C,0x04,0x04,0x04,/*"F",0*/
  112. 0x78,0x04,0x04,0x04,0x7C,0x04,0x04,0x04,/*"F",0*/
  113. 0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,/*"T",0*/
  114. };
  115. uchar code table_id[40]=
  116. {
  117. 0x81,0xff,0x81,0x00,0xff,0x81,0x81,0x7e,
  118. 0x00,0xff,0x89,0x89,0x00,0xf8,0x27,0x27,
  119. 0xf8,0x00,0x8f,0x89,0x89,0xf9,0x00,0xff,
  120. 0x81,0x81,0xff,0x00,0xff,0x09,0x09,0x09,
  121. 0x01,0x00,0x01,0x01,0xff,0x01,0x01,0x00,
  122. };
  123. /*the "ideasoft"*///侧面移动显示字符取摸plc2002
  124. uchar code table_yd[120]={
  125. 0x08,0x08,0x78,0x08,0x08,0x08,0x08,0xFF,/*"上",0*/
  126. 0x18,0x04,0x22,0x24,0xFF,0x24,0x24,0x24,/*"升",0*/
  127. 0x78,0x49,0xCE,0x00,0xFF,0x84,0x86,0xFD,/*"沿",0*/
  128. 0x7E,0x2A,0x2A,0xFF,0xAA,0xAA,0xBE,0x40,/*"电",0*/
  129. 0x09,0x49,0x89,0xFD,0x0B,0x0B,0x09,0x08,/*"子",0*/
  130. 0x00,0x7C,0x92,0x92,0x92,0x92,0x7C,0x00,/*"8",0*/
  131. 0x00,0x42,0x24,0x18,0x18,0x24,0x42,0x00,/*"x",0*/
  132. 0x00,0x7C,0x92,0x92,0x92,0x92,0x7C,0x00,/*"8",0*/
  133. 0x00,0x42,0x24,0x18,0x18,0x24,0x42,0x00,/*"x",0*/
  134. 0x00,0x7C,0x92,0x92,0x92,0x92,0x7C,0x00,/*"8",0*/
  135. 0x88,0x4E,0x78,0x0F,0xF8,0x8E,0x88,0x48,/*"光",0*/
  136. 0x82,0x8E,0xF2,0x83,0xE2,0x9E,0x82,0x80,/*"立",0*/
  137. 0x82,0x42,0x3E,0x0B,0x8A,0x8A,0x7A,0x02,/*"方",0*/
  138. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  139. };
  140. /*railway*/
  141. uchar code dat[128]=
  142. {
  143. 0x00,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,
  144. …………
  145. …………
  146. …………限于本文篇幅 余下代码请从51黑下载附件…………
  147. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  148. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//满屏

  149. };

  150. /******************************************************************************************
  151. **********************************红外功能部分*********************************************
  152. *******************************************************************************************/
  153. void IRInit()
  154. {
  155.     IE |= 0x81;                 //允许总中断中断,使能 INT0 外部中断
  156.     TCON |= 0x01;               //触发方式为脉冲负边沿触发
  157.     IRIN=1;                    //I/O口初始化
  158.         P4SW=0xff;                //定义P4口为I/O口  
  159.         P4M1=0x00;
  160.         P4M0=0xff;                //定义P4为强上拉输出.
  161. }
  162. void IRdelay(unsigned char x)         //延时子程序
  163. {
  164.    unsigned char a,b;
  165.    while(x--)
  166.    {
  167.      for(b=6;b>0;b--)
  168.         for(a=127;a>0;a--);
  169.    }
  170. }
  171. void IDelay(unsigned int t)
  172. {
  173.         while(--t);
  174. }
  175. /*##########################################################################################*/
  176. //************************************上升沿电子科技************************************
  177. //函数名称:void IRsendbyte(unsigned int byte);
  178. //功    能:根据byte值的大小,取出对应tab数组中的值,模拟SPI发送出去一个字节
  179. //入口参数:byte值,范围0-65535
  180. //出口参数:无
  181. //编 写 人:上升沿电子科技
  182. //编写日期:2015-08-02
  183. //修改历史:V1.0
  184. //************************************上升沿电子科技************************************
  185. void IRsendbyte(unsigned int byte)
  186. {   
  187.    unsigned char num;                 //定义需要发送的数据
  188.    unsigned char c;                  //定义发送一个字节的变量
  189.    num=~tab[byte];                         //根据byte值取出tab数组中的数据,存入发送数据变量中
  190.    for(c=0;c<8;c++)                         //循环发送一个字节
  191.    {
  192.       CLK=0;                                  //时钟置低电平启动
  193.       M_LR_DS0=num&0x80;                         //取出需要发送数据的最高位
  194.       CLK=1;                                  //时钟置高电平结束数据发送
  195.       num<<=1;                         //将需要发送的数据左移一位
  196.    }
  197. }



  198. /*##########################################################################################*/
  199. //************************************上升沿电子科技************************************
  200. //函数名称:void delayus(unsigned int yanshi);
  201. //功    能:根据yanshi值的大小进行延时等待操作,1默认为2uS
  202. //入口参数:yanshi的值,范围0-65535
  203. //出口参数:无
  204. //编 写 人:上升沿电子科技
  205. //编写日期:2015-08-1
  206. //修改历史:V1.0
  207. //************************************上升沿电子科技************************************
  208. void delayus(unsigned int yanshi)
  209. {
  210.         unsigned int wmys;                 //定义延时循环控制变量
  211.         for(wmys=0;wmys<=yanshi;wmys++);        //根据延时参数进行空循环操作,达到延时功能
  212. }
  213. /*##########################################################################################*/
  214. //************************************上升沿电子科技************************************
  215. //函数名称:void hansao(unsigned char hs);
  216. //功    能:根据入口参数hs的值,进行判断选择哪一行,选通1-8行的选通
  217. //入口参数:hs的值,范围0-7
  218. //出口参数:无
  219. //编 写 人:上升沿电子科技
  220. //************************************上升沿电子科技************************************
  221. void hansao(unsigned char hs)     
  222. {
  223.         if(hs<8)                          //判断hs的值是否在行扫描的值范围内,不在范围内不执行任何操作
  224.         {
  225.                 if(hs==7)                  //选通第1行
  226.                 {
  227.                 M_A=0;M_B=0;M_C=0;M_D=0;   return;
  228.                 }
  229.                 if(hs==6)                  //选通第2行
  230.                 {
  231.                 M_A=1;M_B=0;M_C=0;M_D=0;   return;
  232.                 }
  233.                 if(hs==5)                  //选通第3行
  234.                 {
  235.                 M_A=0;M_B=1;M_C=0;M_D=0;   return;
  236.                 }
  237.                 if(hs==4)                  //选通第4行
  238.                 {
  239.                 M_A=1;M_B=1;M_C=0;M_D=0;   return;
  240.                 }
  241.                 if(hs==3)                  //选通第5行
  242.                 {
  243.                 M_A=0;M_B=0;M_C=1;M_D=0;   return;
  244.                 }
  245.                 if(hs==2)                  //选通第6行
  246.                 {
  247.                 M_A=1;M_B=0;M_C=1;M_D=0;   return;
  248.                 }
  249.                 if(hs==1)                  //选通第7行
  250.                 {
  251.                 M_A=0;M_B=1;M_C=1;M_D=0;   return;
  252.                 }
  253.                 if(hs==0)                  //选通第8行
  254.                 {
  255.                 M_A=1;M_B=1;M_C=1;M_D=0;   return;
  256.                 }
  257.         }
  258. }
  259. void ADC0_Init (void)
  260. {
  261.     P1ASF = 0x01;                   //Open 8 channels ADC function
  262.     ADC_RES = 0;                    //Clear previous result        清零ADC的8位数据
  263.         AUXR1 &=0xFB;                   //1111,1011, 令 ADRJ=0 (10位A/D转换结果的高8位放在ADC_RES寄存器, 低2位放在ADC_RESL寄存器)
  264.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL;//配置ADC寄存器  
  265.     _nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  266.     _nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  267. }
  268. void init()
  269. {
  270.         P4SW=0xff;                //定义P4口为I/O口
  271.         P0M1=0x00;                                   
  272.         P0M0=0xff;                //定义P0为强上拉输出.
  273.         P1M1=0x01;
  274.         P1M0=0xfe;                //定义P1为强上拉输出.   P1.0作为AD此时不能作为强上蜡
  275.         P2M1=0x00;
  276.         P2M0=0xff;                //定义P2为强上拉输出.
  277.         P3M1=0x00;
  278.         P3M0=0xf8;                //定义P2为强上拉输出.
  279.         P4M1=0x00;
  280.         P4M0=0xff;                //定义P4为强上拉输出.
  281.        
  282. }

  283. void sinter()
  284. {
  285.         IE=0x82;
  286.         TCON=0x01;
  287.         TH0=0x10;
  288.         TL0=0x00;
  289.         init();                         
  290.         PWM_POW=1;         
  291.         ADC0_Init();       
  292. }
  293. void delay10us(void)   //误差 -0.026765046296us STC 1T 22.1184Mhz
  294. {
  295.     unsigned char a,b;
  296.     for(b=1;b>0;b--)
  297.         for(a=2;a>0;a--);           //默认的速度为5,变速1-5-25-125
  298. }
  299. void delay5us(void)   //误差 -0.026765046296us STC 1T 22.1184Mhz
  300. {
  301.     unsigned char a,b;
  302.     for(b=1;b>0;b--)
  303.         for(a=5;a>0;a--);           //默认的速度为5,变速1-5-25-125
  304. }

  305. void delay(uint ihk)
  306. {   
  307.         if(key3==2){return;}
  308.         else
  309.     {                                                                                             
  310.     while(ihk--)
  311.          {
  312.          delay5us();   //12t的mcu 注释这个延时即可
  313.          }
  314.         }

  315. }

  316. /*判断一个数值的第n位,是1还是0,并返回相应数值*/
  317. uchar judgebit(uchar num,uchar b)
  318. {
  319. char n;
  320. num=num&(1<<b);
  321. if (num)
  322. n=1;
  323. else
  324. n=0;
  325. return n;
  326. }
  327. /*To figure out the round number*/
  328. uchar abs(uchar a)
  329. {
  330. uchar b;
  331. b=a/10;
  332. a=a-b*10;
  333. if (a>=5)
  334. b++;
  335. return b;
  336. }
  337. /*To figure out the absolute value*/
  338. uchar abss(char a)
  339. {
  340. if (a<0)
  341. a=-a;
  342. return a;
  343. }
  344. /*The function can comparat the character.
  345. And remove the big one to the back.*/
  346. void max(uchar *a,uchar *b)
  347. {
  348.    uchar t;
  349.    if ((*a)>(*b))
  350.    {
  351.   t=(*a);
  352.   (*a)=(*b);
  353.   (*b)=t;
  354.    }
  355. }
  356. /*The function is to figure out the max number and return it.*/
  357. uchar maxt(uchar a,uchar b,uchar c)
  358. {
  359. if (a<b)
  360. a=b;
  361. if (a<c)
  362. a=c;
  363. return a;
  364. }
  365. void clear(char le)
  366. {
  367. uchar i,j;
  368. for (j=0;j<8;j++)
  369. {
  370.   for (i=0;i<8;i++)
  371.   display[j][i]=le;
  372. }
  373. }void Vol_watch_1(unsigned char kxg1)
  374. {
  375. unsigned int xdata result=0,l=0,n=500,saa,sad;
  376. unsigned char code disxin[8][8]={
  377. 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x99,
  378. 0x00, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xA5,
  379. 0x00, 0x00, 0x81, 0x81, 0x81, 0x81, 0x81, 0xC3,
  380. 0x00, 0x00, 0x00, 0x81, 0x81, 0x81, 0x81, 0x81,
  381. 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x81, 0x81,
  382. 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x99,
  383. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xE7,
  384. 0xFF, 0xC3, 0xA5, 0x81, 0x81, 0xA5, 0xC3, 0xFF,
  385. };
  386. while(n)
  387. {
  388.   if ((result>>5)>l)
  389.   l=result>>5;
  390.   else
  391.    if (l>0)
  392.     l--;
  393.   if (l>7)
  394.   l=7;
  395. if(kxg1==1)
  396. {
  397.   box(3,3,0,4,4,l,1,1);
  398.   if (l<7)
  399.   box(3,3,7,4,4,l+1,1,0);
  400.   result=voivol(16);                 
  401. }
  402. if(kxg1==2)
  403. {
  404.   box(2,2,0,5,5,l,1,1);
  405.   if (l<7)
  406.   box(2,2,7,5,5,l+1,1,0);
  407.   result=voivol(16);                 
  408. }
  409. if(kxg1==3)
  410. {
  411.   box(1,1,0,6,6,l,1,1);
  412.   if (l<7)
  413.   box(1,1,7,6,6,l+1,1,0);
  414.   result=voivol(16);                  
  415. }
  416. if(kxg1==4)
  417. {  
  418.   box(0,0,0,7,7,l,1,1);
  419.   if (l<7)
  420.   box(0,0,7,7,7,l+1,1,0);
  421.   result=voivol(16);               
  422. }
  423. if(kxg1==5)
  424. {
  425. for(saa=0;saa<8;saa++)
  426.         {
  427.         for(sad=0;sad<8;sad++)
  428.         {
  429.         display[saa][sad]= disxin[saa][sad];
  430.         }
  431.         }
  432.   box(3,3,0,4,4,l,1,1);
  433.   if (l<7)
  434.   box(3,3,7,4,4,l+1,1,0);
  435.   result=voivol(16);               
  436. }n--;
  437. if(key2==3||key2==2){if(key2==3){msd=3;break;}
  438. else{if(key2==2){msd=2;break;}}}
  439. }
  440. }
  441. void serial (void) interrupt 4 using 1
  442. {
  443. uchar tempbuff;ES=0;
  444. if(RI){
  445.   RI=0;tempbuff=SBUF;
  446.   switch(cnt){
  447.    case 0:if(tempbuff==0xf2)cnt=1;else {cnt=0;}break;
  448.    case 1:shuzu8X8[cd++]=tempbuff;
  449.    if(cd==64){cnt=0;cd=0;read_flag=1;}
  450.    else{break;}
  451.   default:break;} }
  452. ES=1;
  453. }


  454. void trailler(uint speed)
  455. {
  456. char i,j;
  457. for (i=6;i>=-3;i--)
  458. {
  459.   if (i>=0)
  460.   {
  461.    for (j=0;j<8;j++)
  462.    display[j][i]=display[j][i+1];
  463.   }
  464.   if (i<4)
  465.   {
  466.    for (j=0;j<8;j++)
  467.    display[j][i+4]=0;
  468.   }
  469.   delay(speed);
  470. }
  471. }
  472. void point(uchar x,uchar y,uchar z,uchar le)
  473. {
  474. uchar ch1,ch0;
  475. ch1=1<<x;
  476. ch0=~ch1;
  477. if (le)
  478. display[z][y]=display[z][y]|ch1;
  479. else
  480. display[z][y]=display[z][y]&ch0;
  481. }
  482. void type(uchar cha,uchar y)
  483. {
  484. uchar xx;
  485. for (xx=0;xx<8;xx++)
  486. {
  487. display[xx][y]=table_cha[cha][xx];
  488. }
  489. }
  490. void type_sj(uchar cha,uchar y)
  491. {
  492. uchar xx;
  493. for (xx=0;xx<8;xx++)
  494. {
  495. display[xx][y]=table_cha_sj[cha][xx];
  496. }
  497. }
  498. /*The first variable is the distance from the midpoint.
  499. The second is the layer.
  500. the third is the flash speed of the time between each two point.
  501. The forth is the enable io,it controls weather draw or claen.*/
  502. void cirp(char cpp,uchar dir,uchar le)
  503. {
  504. uchar a,b,c,cp;
  505. if ((cpp<128)&(cpp>=0))
  506. {
  507.   if (dir)
  508.   cp=127-cpp;
  509.   else
  510.   cp=cpp;
  511.   a=(dat[cp]>>5)&0x07;
  512.   b=(dat[cp]>>2)&0x07;
  513.   c=dat[cp]&0x03;
  514.   if (cpp>63)
  515.   c=7-c;
  516.   point (a,b,c,le);
  517. }
  518. }
  519. void line(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar le)
  520. {
  521. char t,a,b,c,a1,b1,c1,i;
  522. a1=x2-x1;
  523. b1=y2-y1;
  524. c1=z2-z1;
  525. t=maxt(abss(a1),abss(b1),abss(c1));
  526. a=x1*10;
  527. b=y1*10;
  528. c=z1*10;
  529. a1=a1*10/t;
  530. b1=b1*10/t;
  531. c1=c1*10/t;
  532. for (i=0;i<t;i++)
  533. {
  534.   point(abs(a),abs(b),abs(c),le);
  535.   a+=a1;
  536.   b+=b1;
  537.   c+=c1;
  538. }
  539. point(x2,y2,z2,le);
  540. }
  541. void box(unsigned char x1,unsigned char z1,unsigned char y1,unsigned char x2,unsigned char z2,unsigned char y2,unsigned char fill,unsigned char le)
  542. {
  543. uchar i,j,t=0;
  544. max(&x1,&x2);
  545. max(&y1,&y2);
  546. max(&z1,&z2);
  547. for (i=x1;i<=x2;i++)
  548.   t|=1<<i;
  549. if (!le)
  550.   t=~t;
  551. if (fill)
  552. {
  553.   if (le)
  554.   {
  555.    for (i=z1;i<=z2;i++)
  556.    {
  557.     for (j=y1;j<=y2;j++)
  558.      display[j][i]|=t;
  559.    }
  560.   }
  561.   else
  562.   {
  563.    for (i=z1;i<=z2;i++)
  564.    {
  565.     for (j=y1;j<=y2;j++)
  566.      display[j][i]&=t;
  567.    }
  568.   }
  569. }
  570. else
  571. {
  572.   if (le)
  573.   {
  574.    display[y1][z1]|=t;
  575.    display[y2][z1]|=t;
  576.    display[y1][z2]|=t;
  577.    display[y2][z2]|=t;
  578.   }
  579.   else
  580.   {
  581.     display[y1][z1]&=t;
  582.    display[y2][z1]&=t;
  583.    display[y1][z2]&=t;
  584.    display[y2][z2]&=t;
  585.   }
  586.   t=(0x01<<x1)|(0x01<<x2);
  587.   if (!le)
  588.    t=~t;
  589.   if (le)
  590.   {
  591.    for (j=z1;j<=z2;j+=(z2-z1))
  592.    {
  593.     for (i=y1;i<=y2;i++)
  594.      display[i][j]|=t;
  595.    }
  596.    for (j=y1;j<=y2;j+=(y2-y1))
  597.    {
  598.     for (i=z1;i<=z2;i++)
  599.      display[j][i]|=t;
  600.    }
  601.   }
  602.   else
  603.   {
  604.    for (j=z1;j<=z2;j+=(z2-z1))
  605.    {
  606.     for (i=y1;i<=y2;i++)
  607.     {
  608.     display[i][j]&=t;
  609.     }
  610.    }
  611.    for (j=y1;j<=y2;j+=(y2-y1))
  612.    {
  613.     for (i=z1;i<=z2;i++)
  614.     {
  615.     display[j][i]&=t;
  616.     }
  617.    }
  618.   }
  619. }
  620. }
  621. void box_apeak_xy(uchar x1,uchar y1,uchar z1,uchar x2,uchar y2,uchar z2,uchar fill,uchar le)
  622. {
  623. uchar i;
  624. max(&z1,&z2);
  625. if (fill)
  626. {
  627.   for (i=z1;i<=z2;i++)
  628.   {
  629.    line (x1,y1,i,x2,y2,i,le);
  630.   }
  631. }
  632. else
  633. {
  634.   line (x1,y1,z1,x2,y2,z1,le);
  635.   line (x1,y1,z2,x2,y2,z2,le);
  636.   line (x2,y2,z1,x2,y2,z2,le);
  637.   line (x1,y1,z1,x1,y1,z2,le);
  638. }
  639. }

  640. void poke(uchar n,uchar x,uchar y)
  641. {
  642. uchar i;
  643. for (i=0;i<8;i++)
  644. {
  645.   point(x,y,i,judgebit(n,i));
  646. }
  647. }
  648. void boxtola(char i,uchar n)
  649. {
  650. if ((i>=0)&(i<8))
  651. {
  652.   poke(n,0,7-i);
  653. }
  654. if ((i>=8)&(i<16))
  655. {
  656.   poke(n,i-8,0);
  657. }
  658. if ((i>=16)&(i<24))
  659. {
  660.   poke(n,7,i-16);
  661. }
  662. }
  663. void rolldisplay_yd(uint speed)
  664. {
  665.          uchar j;
  666.          char i,a;
  667.          for (i=23;i>-112;i--)
  668.          {
  669.                    for (j=0;j<112;j++)
  670.                    {
  671.                             a=i+j;
  672.                             if ((a>=0)&(a<24))
  673.                             boxtola(a,table_yd[j]);
  674.                    }
  675.                    delay(speed);
  676.          }
  677. }
  678. void rolldisplay(uint speed)
  679. {
  680. uchar xdata j;
  681. char xdata i,a;
  682. for (i=23;i>-40;i--)
  683. {
  684.   for (j=0;j<40;j++)
  685.   {
  686.    a=i+j;
  687.    if ((a>=0)&(a<24))
  688.    boxtola(a,table_id[j]);
  689.   }
  690.   delay(speed);
  691. }
  692. }
  693. void roll_apeak_yz(uchar n,uint speed)
  694. {
  695. uchar xdata i;
  696. switch(n)
  697. {
  698.   case 1:
  699.    for (i=0;i<7;i++)
  700.    {
  701.     display[i][7]=0;
  702.     display[7][6-i]=255;
  703.     delay(speed);
  704.    };
  705.    break;
  706.   case 2:
  707.    for (i=0;i<7;i++)
  708.    {
  709.     display[7][7-i]=0;
  710.     display[6-i][0]=255;
  711.     delay(speed);
  712.    };
  713.    break;
  714.   case 3:
  715.    for (i=0;i<7;i++)
  716.    {
  717.     display[7-i][0]=0;
  718.     display[0][i+1]=255;
  719.     delay(speed);
  720.    };
  721.    break;
  722.   case 0:
  723.    for (i=0;i<7;i++)
  724.    {
  725.     display[0][i]=0;
  726.     display[i+1][7]=255;
  727.     delay(speed);
  728.    };
  729. }
  730. }
  731. void roll_apeak_xy(uchar n,uint speed)
  732. {
  733. uchar xdata i;
  734. switch(n)
  735. {
  736.   case 1:
  737.    for (i=0;i<7;i++)
  738.    {
  739.     line(0,i,0,0,i,7,0);
  740.     line(i+1,7,0,i+1,7,7,1);
  741.     delay(speed);
  742.    };
  743.    break;
  744.   case 2:
  745.    for (i=0;i<7;i++)
  746.    {
  747.     line(i,7,0,i,7,7,0);
  748.     line(7,6-i,0,7,6-i,7,1);
  749.     delay(speed);
  750.    };
  751.    break;
  752.   case 3:
  753.    for (i=0;i<7;i++)
  754.    {
  755.     line(7,7-i,0,7,7-i,7,0);
  756.     line(6-i,0,0,6-i,0,7,1);
  757.     delay(speed);
  758.    };
  759.    break;
  760.   case 0:
  761.    for (i=0;i<7;i++)
  762.    {
  763.     line(7-i,0,0,7-i,0,7,0);
  764.     line(0,i+1,0,0,i+1,7,1);
  765.     delay(speed);
  766.    };
  767. }
  768. }
  769. void roll_3_xy(uchar n,uint speed)
  770. {
  771. uchar xdata i;
  772. switch(n)
  773. {
  774.   case 1:
  775.    for (i=0;i<8;i++)
  776.    {
  777.     box_apeak_xy (0,i,0,7,7-i,7,1,1);
  778.     delay(speed);
  779.     if (i<7)
  780.     box_apeak_xy (3,3,0,0,i,7,1,0);
  781.    };
  782.    break;
  783.   case 2:
  784.    for (i=0;i<8;i++)
  785.    {
  786.     box_apeak_xy (7-i,0,0,i,7,7,1,1);
  787.     delay(speed);
  788.     if (i<7)
  789.     box_apeak_xy (3,4,0,i,7,7,1,0);
  790.    };
  791.    break;
  792.   case 3:
  793.    for (i=0;i<8;i++)
  794.    {
  795.     box_apeak_xy (0,i,0,7,7-i,7,1,1);
  796.     delay(speed);
  797.     if (i<7)
  798.     box_apeak_xy (4,4,0,7,7-i,7,1,0);
  799.    };
  800.    break;
  801.   case 0:
  802.    for (i=0;i<8;i++)
  803.    {
  804.     box_apeak_xy (7-i,0,0,i,7,7,1,1);
  805.     delay(speed);
  806.     if (i<7)
  807.     box_apeak_xy (4,3,0,7-i,0,7,1,0);
  808.    };
  809. }
  810. }
  811. void trans(uchar z,uint speed)
  812. {
  813. uchar i,j;
  814. for (j=0;j<8;j++)
  815. {
  816.   for (i=0;i<8;i++)
  817.   {
  818.    display[z][i]>>=1;
  819.   }
  820.   delay(speed);
  821. }
  822. }
  823. void tranoutchar(uchar c,uint speed)
  824. {
  825. uchar i,j,k,a,i2=0;
  826. for (i=0;i<8;i++)
  827. {
  828.   if (i<7)
  829.   box_apeak_xy (i+1,0,0,i+1,7,7,1,1);
  830.   box_apeak_xy (i2,0,0,i2,7,7,1,0);
  831.   a=0;
  832.   i2=i+1;
  833.   for (j=0;j<=i;j++)
  834.   {
  835.    a=a|(1<<j);
  836.   }
  837.   for (k=0;k<8;k++)
  838.   {
  839.    display[k][3]|=table_cha[c][k]&a;
  840.    display[k][4]|=table_cha[c][k]&a;
  841.   }
  842.   delay(speed);
  843. }
  844. }
  845. void tranoutchar_cu(uchar c,uint speed)
  846. {
  847. uchar i,j,k,a,i2=0;
  848. for (i=0;i<8;i++)
  849. {
  850.   if (i<7)
  851.   box_apeak_xy (i+1,0,0,i+1,7,7,1,1);
  852.   box_apeak_xy (i2,0,0,i2,7,7,1,0);
  853.   a=0;
  854.   i2=i+1;
  855.   for (j=0;j<=i;j++)
  856.   {
  857.    a=a|(1<<j);
  858.   }
  859.   for (k=0;k<8;k++)
  860.   {
  861.    display[k][3]|=table_cha_cu[c][k]&a;
  862.    display[k][4]|=table_cha_cu[c][k]&a;
  863.   }
  864.   delay(speed);
  865. }
  866. }
  867. void transss()
  868. {
  869. uchar i,j;
  870. for (i=0;i<8;i++)
  871. {
  872.   for (j=0;j<8;j++)
  873.   display[i][j]<<=1;
  874. }
  875. }
  876. /*From now on,the function below is to display the flash.*/
  877. void flash_1()
  878. {
  879. clear(0);
  880. type(4,0);
  881. delay(60000);
  882. type(3,0);
  883. delay(60000);
  884. type(2,0);
  885. delay(60000);
  886. type(1,0);
  887. delay(60000);
  888. delay(60000);
  889. }
  890. void flash_16()
  891. {
  892. clear(0);
  893. rolldisplay(30000);
  894. }
  895. void flash_17()
  896. {
  897. clear(0);
  898. type(0,7);
  899. delay(60000);
  900. trailler(6000);
  901. delay(60000);
  902. }
  903. void flash_12()
  904. {
  905. clear(0);
  906. rolldisplay_yd(30000);
  907. }
  908. void flash_13()
  909. {        
  910.                  clear(0);
  911.          type(0,7);
  912.          trailler(9000);
  913.          delay(60000);
  914.                  clear(0);
  915.          type(1,7);
  916.          delay(60000);
  917.          trailler(9000);
  918.          delay(60000);
  919.                  clear(0);
  920.          type(2,7);
  921.          delay(60000);
  922.          trailler(9000);
  923.          delay(60000);
  924.                  clear(0);
  925.          type(3,7);
  926.          delay(60000);
  927.          trailler(9000);
  928.          delay(60000);
  929.                  clear(0);
  930.          type(4,7);
  931.          delay(60000);
  932.          trailler(9000);
  933.          delay(60000);
  934.                  clear(0);
  935.          type(5,7);
  936.          delay(60000);
  937.          trailler(9000);
  938.          delay(60000);
  939.                  clear(0);
  940.          type(6,7);
  941.          delay(60000);
  942.          trailler(9000);
  943.          delay(60000);
  944.                  clear(0);
  945.          type(7,7);
  946.          delay(60000);
  947.          trailler(9000);
  948.          delay(60000);
  949. }
  950. void flash_2()
  951. {
  952. uchar i;
  953. clear(0);
  954. for (i=129;i>0;i--)
  955. {
  956.   cirp(i-2,0,1);
  957.   delay(8000);
  958.   cirp(i-1,0,0);
  959. }
  960. delay(8000);
  961. for (i=0;i<136;i++)
  962. {
  963.   cirp(i,1,1);
  964.   delay(8000);
  965.   cirp(i-8,1,0);
  966. }
  967. delay(8000);
  968.   for (i=129;i>0;i--)
  969. {
  970.   cirp(i-2,0,1);
  971.   delay(8000);
  972. }
  973. delay(60000);delay(60000);delay(60000);delay(60000);
  974. delay(60000);delay(60000);delay(60000);delay(60000);
  975. delay(60000);delay(60000);delay(60000);delay(60000);
  976. delay(60000);delay(60000);delay(60000);delay(60000);
  977.   for (i=0;i<128;i++)
  978. {
  979.   cirp(i-8,1,0);
  980.   delay(8000);
  981. }
  982. delay(60000);
  983. }
  984. void flash_3()
  985. {
  986. char i;
  987. for (i=0;i<8;i++)
  988. {
  989.   box_apeak_xy(0,i,0,7,i,7,1,1);
  990.   delay(20000);
  991.   if (i<7)
  992.   box_apeak_xy(0,i,0,7,i,7,1,0);
  993. }
  994. for (i=7;i>=0;i--)
  995. {
  996.   box_apeak_xy(0,i,0,7,i,7,1,1);
  997.   delay(20000);
  998.   if (i>0)
  999.   box_apeak_xy(0,i,0,7,i,7,1,0);
  1000. }
  1001. for (i=0;i<8;i++)
  1002. {
  1003.   box_apeak_xy(0,i,0,7,i,7,1,1);
  1004.   delay(20000);
  1005.   if (i<7)
  1006.   box_apeak_xy(0,i,0,7,i,7,1,0);
  1007. }
  1008. }
  1009. void flash_4()
  1010. {
  1011. char i,j,an[8];
  1012. for (j=7;j<15;j++)
  1013.   an[j-7]=j;
  1014. for (i=0;i<=16;i++)
  1015. {
  1016.   for (j=0;j<8;j++)
  1017.   {
  1018.    if ((an[j]<8)&(an[j]>=0))
  1019.    line(0,an[j],j,7,an[j],j,1);
  1020.   }
  1021.   for (j=0;j<8;j++)
  1022.   {
  1023.    if (((an[j]+1)<8)&(an[j]>=0))
  1024.    line(0,an[j]+1,j,7,an[j]+1,j,0);
  1025.   }
  1026.   for (j=0;j<8;j++)
  1027.   {
  1028.    if (an[j]>0)
  1029.    an[j]--;
  1030.   }
  1031.   delay(15000);
  1032. }
  1033. for (j=0;j<8;j++)
  1034.   an[j]=1-j;
  1035. for (i=0;i<=16;i++)
  1036. {
  1037.   for (j=0;j<8;j++)
  1038.   {
  1039.    if ((an[j]<8)&(an[j]>=0))
  1040.    line(0,an[j],j,7,an[j],j,1);
  1041.   }
  1042.   for (j=0;j<8;j++)
  1043.   {
  1044.    if (((an[j]-1)<7)&(an[j]>0))
  1045.    line(0,an[j]-1,j,7,an[j]-1,j,0);
  1046.   }
  1047.   for (j=0;j<8;j++)
  1048.   {
  1049.    if (an[j]<7)
  1050.    an[j]++;
  1051.   }
  1052.   delay(15000);
  1053. }
  1054. }void key_donghua_scan()
  1055. {
  1056. if(!K3)  //如果检测到低电平,说明按键按下
  1057.     {
  1058.         if(msd==1||msd==2){TR0=0;}
  1059.          delay10us(); //延时去抖,一般10-20ms
  1060.      if(!K3)     //再次确认按键是否按下,没有按下则退出
  1061.            {
  1062.         while(!K3)//如果确认按下按键等待按键释放,没有则退出
  1063.                {
  1064.                    if(test==1){key1=2;}
  1065.                    if(test==2){key2=2;}
  1066.                    PWM_POW=1;      
  1067.                    delay10us();        delay10us();delay10us();delay10us();        delay10us();delay10us();
  1068.                    PWM_POW=0;      
  1069.                          }
  1070.            }
  1071.         }
  1072.         if(msd==1||msd==2){TR0=1;}
  1073. }
  1074. void key_yinyue_scan()
  1075. {
  1076. if(!K4)  //如果检测到低电平,说明按键按下
  1077.     {
  1078.         if(msd==1||msd==2){TR0=0;}
  1079.          delay10us(); //延时去抖,一般10-20ms
  1080.      if(!K4)     //再次确认按键是否按下,没有按下则退出
  1081.            {
  1082.         while(!K4)//如果确认按下按键等待按键释放,没有则退出
  1083.                {
  1084.                    if(test==1){key1=3;}
  1085.                    if(test==2){key2=1;}
  1086.                    PWM_POW=1;      
  1087.                    delay10us();        delay10us();delay10us();delay10us();        delay10us();delay10us();
  1088.                    PWM_POW=0;     
  1089.                          }
  1090.            }
  1091.         }
  1092.         if(msd==1||msd==2){TR0=1;}
  1093. }

  1094. void flash_5()
  1095. {
  1096. uint a=15000;
  1097. char i=8,j,an[4];
  1098. for (j=7;j<11;j++)
  1099.   an[j-7]=j;
  1100. while(i--)
  1101. {
  1102.   for (j=0;j<4;j++)
  1103.   {
  1104.    if (an[j]<8)
  1105.    box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);
  1106.    if (an[j]<7)
  1107.    box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);
  1108.   }
  1109.   for (j=0;j<4;j++)
  1110.   {
  1111.    if (an[j]>3)
  1112.    an[j]--;
  1113.   }
  1114.   delay(a);
  1115. }
  1116. i=3;
  1117. for (j=0;j<4;j++)
  1118. an[j]=5-j;
  1119. while(i--)
  1120. {
  1121.   for (j=1;j<4;j++)
  1122.   {
  1123.    if (an[j]<4)
  1124.    box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);
  1125.    if (an[j]<3)
  1126.    box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);
  1127.   }
  1128.   for (j=0;j<4;j++)
  1129.   {
  1130.    if (an[j]>0)
  1131.    an[j]--;
  1132.   }
  1133.   delay(a);
  1134. }
  1135. i=3;
  1136. for (j=1;j<4;j++)
  1137. an[j]=4-j;
  1138. while(i--)
  1139. {
  1140.   for (j=1;j<4;j++)
  1141.   {
  1142.    if (an[j]>=0)
  1143.    box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);
  1144.    if (an[j]>0)
  1145.    box_apeak_xy(j,an[j]-1,j,7-j,an[j]-1,7-j,0,0);
  1146.   }
  1147.   for (j=1;j<4;j++)
  1148.   {
  1149.    if (an[j]<3)
  1150.    an[j]++;
  1151.   }
  1152.   delay(a);
  1153. }
  1154. i=3;
  1155. for (j=0;j<4;j++)
  1156. an[j]=j+1;
  1157. while(i--)
  1158. {
  1159.   for (j=1;j<4;j++)
  1160.   {
  1161.    if (an[j]>3)
  1162.    box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);
  1163.    if (an[j]>3)
  1164.    box_apeak_xy(j,an[j]-1,j,7-j,an[j]-1,7-j,0,0);
  1165.   }
  1166.   for (j=0;j<4;j++)
  1167.    an[j]++;
  1168.   delay(a);
  1169. }
  1170. i=3;
  1171. for (j=3;j<6;j++)
  1172.   an[j-2]=j;
  1173. while(i--)
  1174. {
  1175.   for (j=1;j<4;j++)
  1176.   {
  1177.    box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);
  1178.    box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);
  1179.   }
  1180.   for (j=0;j<4;j++)
  1181.   {
  1182.    if (an[j]>3)
  1183.    an[j]--;
  1184.   }
  1185.   delay(a);
  1186. }
  1187. i=3;
  1188. for (j=0;j<4;j++)
  1189. an[j]=5-j;
  1190. while(i--)
  1191. {
  1192.   for (j=1;j<4;j++)
  1193.   {
  1194.    if (an[j]<4)
  1195.    box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);
  1196.    if (an[j]<3)
  1197.    box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);
  1198.   }
  1199.   for (j=0;j<4;j++)
  1200.   {
  1201.    if (an[j]>0)
  1202.    an[j]--;
  1203.   }
  1204.   delay(a);
  1205. }
  1206. i=3;
  1207. for (j=0;j<4;j++)
  1208. an[j]=3-j;
  1209. an[0]=2;
  1210. while(i--)
  1211. {
  1212.   for (j=0;j<3;j++)
  1213.   {
  1214.    if (an[j]>=0)
  1215.     box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);
  1216.    if (an[j]>=0)
  1217.     box_apeak_xy(j,an[j]+1,j,7-j,an[j]+1,7-j,0,0);
  1218.   }
  1219.   for (j=0;j<4;j++)
  1220.   {
  1221.    if (j<5-i)
  1222.    an[j]--;
  1223.   }
  1224.   delay(a);
  1225. }
  1226. i=10;
  1227. for (j=0;j<4;j++)
  1228.   an[j]=j-2;
  1229. while(i--)
  1230. {
  1231.   for (j=0;j<4;j++)
  1232.   {
  1233.    if (an[j]>=0)
  1234.    box_apeak_xy(j,an[j],j,7-j,an[j],7-j,0,1);
  1235.    if (an[j]>=0)
  1236.    box_apeak_xy(j,an[j]-1,j,7-j,an[j]-1,7-j,0,0);
  1237.   }
  1238.   for (j=0;j<4;j++)
  1239.   {
  1240.    if (an[j]<7)
  1241.    an[j]++;
  1242.   }
  1243.   delay(a);
  1244. }
  1245. }
  1246. void flash_6()
  1247. {
  1248. uchar i,j,k,z;
  1249. roll_apeak_yz(1,10000);
  1250. roll_apeak_yz(2,10000);
  1251. roll_apeak_yz(3,10000);
  1252. roll_apeak_yz(0,10000);
  1253. roll_apeak_yz(1,10000);
  1254. roll_apeak_yz(2,10000);
  1255. roll_apeak_yz(3,10000);
  1256. for (i=0;i<3;i++)
  1257.   {
  1258.    for (j=0;j<8;j++)
  1259.    {
  1260.     for (k=0;k<8;k++)
  1261.     {
  1262.      if ((table_3p[i][j]>>k)&1)
  1263.      {
  1264.       for (z=1;z<8;z++)
  1265.        {
  1266.         point (j,7-k,z,1);
  1267.         if (z-1)
  1268.         point (j,7-k,z-1,0);
  1269.         delay(5000);
  1270.        }
  1271.      }
  1272.     }
  1273.    }
  1274.    delay(60000);delay(60000);delay(60000);delay(60000);delay(60000);
  1275.    trans(7,15000);
  1276.   }
  1277. }
  1278. void flash_7()
  1279. {
  1280. uchar i;
  1281. uint a=3000;
  1282. roll_apeak_yz(0,10000);
  1283. roll_apeak_yz(1,10000);
  1284. roll_apeak_yz(2,10000);
  1285. roll_apeak_yz(3,10000);
  1286. roll_apeak_yz(0,10000);
  1287. roll_apeak_yz(1,10000);
  1288. roll_apeak_yz(2,10000);
  1289. roll_apeak_yz(3,10000);
  1290. roll_apeak_yz(0,10000);
  1291. roll_apeak_yz(1,10000);
  1292. roll_apeak_yz(2,10000);
  1293. roll_apeak_xy(0,10000);
  1294. roll_apeak_xy(1,10000);
  1295. roll_apeak_xy(2,10000);
  1296. roll_apeak_xy(3,10000);
  1297. roll_apeak_xy(0,10000);
  1298. roll_apeak_xy(1,10000);
  1299. roll_apeak_xy(2,10000);
  1300. roll_apeak_xy(3,10000);
  1301. for (i=0;i<8;i++)
  1302. {
  1303.   box_apeak_xy (0,i,0,7-i,i,7,1,1);
  1304.   delay(a);
  1305. }
  1306. delay(30000);
  1307. roll_3_xy(0,a);
  1308. delay(30000);
  1309. roll_3_xy(1,a);
  1310. delay(30000);
  1311. roll_3_xy(2,a);
  1312. delay(30000);
  1313. roll_3_xy(3,a);
  1314. delay(30000);
  1315. roll_3_xy(0,a);
  1316. delay(30000);
  1317. roll_3_xy(1,a);
  1318. delay(30000);
  1319. roll_3_xy(2,a);
  1320. delay(30000);
  1321. roll_3_xy(3,a);
  1322. for (i=7;i>0;i--)
  1323. {
  1324.   box_apeak_xy(i,0,0,i,7,7,1,0);
  1325.   delay(a);
  1326. }
  1327. }
  1328. void flash_8()
  1329. {
  1330. uchar i;
  1331. for (i=5;i<8;i++)
  1332. {
  1333.   tranoutchar(i,10000);
  1334.   delay(60000);
  1335.   delay(60000);
  1336. }
  1337. }void fvb()
  1338. {
  1339.           if(read_flag)
  1340.            {
  1341.             read_flag=0;
  1342.                  for(saom=0;saom<8;saom++)
  1343.                  {
  1344.             displayck[saom+0]=((shuzu8X8[saom*8]>>7)&0x01)+(((shuzu8X8[saom*8+1]>>7)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>7)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>7)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>7)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>7)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>7)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>7)&0x01)<<7);       
  1345.                 displayck[saom+8]=((shuzu8X8[saom*8]>>6)&0x01)+(((shuzu8X8[saom*8+1]>>6)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>6)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>6)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>6)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>6)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>6)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>6)&0x01)<<7);       
  1346.                 displayck[saom+16]=((shuzu8X8[saom*8]>>5)&0x01)+(((shuzu8X8[saom*8+1]>>5)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>5)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>5)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>5)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>5)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>5)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>5)&0x01)<<7);       
  1347.                 displayck[saom+24]=((shuzu8X8[saom*8]>>4)&0x01)+(((shuzu8X8[saom*8+1]>>4)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>4)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>4)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>4)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>4)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>4)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>4)&0x01)<<7);       
  1348.                 displayck[saom+32]=((shuzu8X8[saom*8]>>3)&0x01)+(((shuzu8X8[saom*8+1]>>3)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>3)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>3)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>3)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>3)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>3)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>3)&0x01)<<7);       
  1349.                 displayck[saom+40]=((shuzu8X8[saom*8]>>2)&0x01)+(((shuzu8X8[saom*8+1]>>2)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>2)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>2)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>2)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>2)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>2)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>2)&0x01)<<7);       
  1350.                 displayck[saom+48]=((shuzu8X8[saom*8]>>1)&0x01)+(((shuzu8X8[saom*8+1]>>1)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>1)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>1)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>1)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>1)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>1)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>1)&0x01)<<7);       
  1351.                 displayck[saom+56]=((shuzu8X8[saom*8]>>0)&0x01)+(((shuzu8X8[saom*8+1]>>0)&0x01)<<1)+(((shuzu8X8[saom*8+2]>>0)&0x01)<<2)+(((shuzu8X8[saom*8+3]>>0)&0x01)<<3)+(((shuzu8X8[saom*8+4]>>0)&0x01)<<4)+(((shuzu8X8[saom*8+5]>>0)&0x01)<<5)+(((shuzu8X8[saom*8+6]>>0)&0x01)<<6)+(((shuzu8X8[saom*8+7]>>0)&0x01)<<7);       
  1352.                  }
  1353.            }
  1354.            for(layerr=0;layerr<8;layerr++)
  1355.            {
  1356.                 key_baihei_scan();  key_shangwiej_scan();   key_donghua_scan();        key_yinyue_scan();
  1357.                 hansao(layerr);
  1358.                 sendbyteck(~displayck[layerr*8+0],~displayck[layerr*8+2],~displayck[layerr*8+4],~displayck[layerr*8+7]);
  1359.                 sendbyteck(~displayck[layerr*8+3],~displayck[layerr*8+1],~displayck[layerr*8+6],~displayck[layerr*8+5]);
  1360.                 SUO=0;                             
  1361.                 _nop_();
  1362.                 SUO=1;
  1363.                 M_EN=0;                             
  1364.                 delayus(ld);                    
  1365.                 M_EN=1;                                  

  1366.                 if(key2==1||key2==2)
  1367.                 {
  1368.                 break;
  1369.                 }
  1370.            }
  1371. }


  1372. void flash_9()
  1373. {
  1374. char i;
  1375. uchar j,an[8],x,y,t,x1,y1;
  1376. for (i=0;i<8;i++)
  1377. {
  1378.   box_apeak_xy (i,0,0,i,7,7,1,1);
  1379.   if (i)
  1380.   box_apeak_xy (i-1,0,0,i-1,7,7,1,0);
  1381.   delay(10000);
  1382. }
  1383. roll_apeak_xy(3,10000);
  1384. roll_apeak_xy(0,10000);
  1385. roll_apeak_xy(1,10000);
  1386. for (i=0;i<7;i++)
  1387. {
  1388.   line(6-i,6-i,0,6-i,6-i,7,1);
  1389.   line(i,7,0,i,7,7,0);
  1390.   delay(10000);
  1391. }
  1392. for (i=0;i<8;i++)
  1393.   an[i]=14;
  1394. for (i=0;i<85;i++)
  1395. {
  1396.   clear(0);
  1397.   for (j=0;j<8;j++)
  1398.   {
  1399.    t=an[j]%28;
  1400.    x=dat2[t]>>5;
  1401.    y=(dat2[t]>>2)&0x07;
  1402.    t=(an[j]-14)%28;
  1403.    x1=dat2[t]>>5;
  1404.    y1=(dat2[t]>>2)&0x07;
  1405.    line(x,y,j,x1,y1,j,1);
  1406.   }
  1407.   for (j=0;j<8;j++)
  1408.   {
  1409.   if ((i>j)&(j>i-71))
  1410.   an[j]++;
  1411.   }
  1412.   delay(5000);
  1413. }
  1414. for (i=0;i<85;i++)
  1415. {
  1416.   clear(0);
  1417.   for (j=0;j<8;j++)
  1418.   {
  1419.    t=an[j]%28;
  1420.    x=dat2[t]>>5;
  1421.    y=(dat2[t]>>2)&0x07;
  1422.    t=(an[j]-14)%28;
  1423.    x1=dat2[t]>>5;
  1424.    y1=(dat2[t]>>2)&0x07;
  1425.    line(x,y,j,x1,y1,j,1);
  1426.   }
  1427.   for (j=0;j<8;j++)
  1428.   {
  1429.   if ((i>j)&(j>i-71))
  1430.   an[j]--;
  1431.   }
  1432.   delay(5000);
  1433. }
  1434. for (i=0;i<29;i++)
  1435. {
  1436.   clear(0);
  1437.   t=an[0]%28;
  1438.   x=dat2[t]>>5;
  1439.   y=(dat2[t]>>2)&0x07;
  1440.   t=(an[0]-14)%28;
  1441.   x1=dat2[t]>>5;
  1442.   y1=(dat2[t]>>2)&0x07;
  1443.   box_apeak_xy(x,y,0,x1,y1,7,0,1);
  1444.   box_apeak_xy(x,y,1,x1,y1,6,0,1);
  1445.   an[0]++;
  1446.   delay(5000);
  1447. }
  1448. for (i=0;i<16;i++)
  1449. {
  1450.   clear(0);
  1451.   t=an[0]%28;
  1452.   x=dat2[t]>>5;
  1453.   y=(dat2[t]>>2)&0x07;
  1454.   t=(an[0]-14)%28;
  1455.   x1=dat2[t]>>5;
  1456.   y1=(dat2[t]>>2)&0x07;
  1457.   box_apeak_xy(x,y,0,x1,y1,7,1,1);
  1458.   an[0]--;
  1459.   delay(5000);
  1460. }
  1461. for (i=0;i<8;i++)
  1462. {
  1463.   line(i,i,0,0,0,i,0);
  1464.   delay(5000);
  1465. }
  1466. for (i=1;i<7;i++)
  1467. {
  1468.   line(i,i,7,7,7,i,0);
  1469.   delay(5000);
  1470. }
  1471. for (i=1;i<8;i++)
  1472. {
  1473.   clear(0);
  1474.   box(7,7,7,7-i,7-i,7-i,0,1);
  1475.   delay(10000);
  1476. }
  1477. for (i=1;i<7;i++)
  1478. {
  1479.   clear(0);
  1480.   box(0,0,0,7-i,7-i,7-i,0,1);
  1481.   delay(10000);
  1482. }
  1483. for (i=1;i<8;i++)
  1484. {
  1485.   clear(0);
  1486.   box(0,0,0,i,i,i,0,1);
  1487.   delay(10000);
  1488. }
  1489. for (i=1;i<7;i++)
  1490. {
  1491.   clear(0);
  1492.   box(7,0,0,i,7-i,7-i,0,1);
  1493.   delay(10000);
  1494. }
  1495. for (i=1;i<8;i++)
  1496. {
  1497.   box(7,0,0,7-i,i,i,1,1);
  1498.   delay(10000);
  1499. }
  1500. for (i=1;i<7;i++)
  1501. {
  1502.   clear(0);
  1503.   box(0,7,7,7-i,i,i,1,1);
  1504.   delay(10000);
  1505. }
  1506. }
  1507. void flash_10()
  1508. {
  1509. uchar i,j,an[4],x,y,t;
  1510. for (i=1;i<7;i++)
  1511. {
  1512.   clear(0);
  1513.   box(0,6,6,1,7,7,1,1);
  1514.   box(i,6,6-i,i+1,7,7-i,1,1);
  1515.   box(i,6,6,i+1,7,7,1,1);
  1516.   box(0,6,6-i,1,7,7-i,1,1);
  1517.   box(0,6-i,6,1,7-i,7,1,1);
  1518.   box(i,6-i,6-i,i+1,7-i,7-i,1,1);
  1519.   box(i,6-i,6,i+1,7-i,7,1,1);
  1520.   box(0,6-i,6-i,1,7-i,7-i,1,1);
  1521.   delay(30000);
  1522. }
  1523. for (i=0;i<4;i++)
  1524. {
  1525.   an[i]=6*i;
  1526. }
  1527. for (i=0;i<35;i++)
  1528. {
  1529.   clear(0);
  1530.   for(j=0;j<4;j++)
  1531.   {
  1532.    t=an[j]%24;
  1533.    x=dat3[t]>>4;
  1534.    y=dat3[t]&0x0f;
  1535.    box(x,y,0,x+1,y+1,1,1,1);
  1536.    box(x,y,6,x+1,y+1,7,1,1);
  1537.   }
  1538.   for (j=0;j<4;j++)
  1539.   an[j]++;
  1540.   delay(10000);
  1541. }
  1542. for (i=0;i<35;i++)
  1543. {
  1544.   clear(0);
  1545.   for(j=0;j<4;j++)
  1546.   {
  1547.    t=an[j]%24;
  1548.    x=dat3[t]>>4;
  1549.    y=dat3[t]&0x0f;
  1550.    box(x,y,0,x+1,y+1,1,1,1);
  1551.    box(x,y,6,x+1,y+1,7,1,1);
  1552.   }
  1553.   for (j=0;j<4;j++)
  1554.   an[j]--;
  1555.   delay(10000);
  1556. }
  1557. for (i=0;i<35;i++)
  1558. {
  1559.   clear(0);
  1560.   for(j=0;j<4;j++)
  1561.   {
  1562.    t=an[j]%24;
  1563.    x=dat3[t]>>4;
  1564.    y=dat3[t]&0x0f;
  1565.    box(x,0,y,x+1,1,y+1,1,1);
  1566.    box(x,6,y,x+1,7,y+1,1,1);
  1567.   }
  1568.   for (j=0;j<4;j++)
  1569.   an[j]++;
  1570.   delay(10000);
  1571. }
  1572. for (i=0;i<36;i++)
  1573. {
  1574.   clear(0);
  1575.   for(j=0;j<4;j++)
  1576.   {
  1577.    t=an[j]%24;
  1578.    x=dat3[t]>>4;
  1579.    y=dat3[t]&0x0f;
  1580.    box(x,0,y,x+1,1,y+1,1,1);
  1581.    box(x,6,y,x+1,7,y+1,1,1);
  1582.   }
  1583.   for (j=0;j<4;j++)
  1584.   an[j]--;
  1585.   delay(10000);
  1586. }
  1587. for (i=6;i>0;i--)
  1588. {
  1589.   clear(0);
  1590.   box(0,6,6,1,7,7,1,1);
  1591.   box(i,6,6-i,i+1,7,7-i,1,1);
  1592.   box(i,6,6,i+1,7,7,1,1);
  1593.   box(0,6,6-i,1,7,7-i,1,1);
  1594.   box(0,6-i,6,1,7-i,7,1,1);
  1595.   box(i,6-i,6-i,i+1,7-i,7-i,1,1);
  1596.   box(i,6-i,6,i+1,7-i,7,1,1);
  1597.   box(0,6-i,6-i,1,7-i,7-i,1,1);
  1598.   delay(30000);
  1599. }
  1600. }
  1601. void flash_11()
  1602. {
  1603. uchar i,j,t,x,y;
  1604. uchar code daa[13]={0,1,2,0x23,5,6,7,6,5,0x23,2,1,0};
  1605. clear(0);
  1606. for (j=0;j<5;j++)
  1607. {
  1608.   for (i=0;i<13;i++)
  1609.   {
  1610.    if (daa[i]>>4)
  1611.    {
  1612.     t=daa[i]&0x0f;
  1613.     line (0,0,t+1,0,7,t+1,1);
  1614.    }
  1615.    else
  1616.     t=daa[i];
  1617.    line (0,0,t,0,7,t,1);
  1618.    transss();
  1619.    delay(10000);
  1620.   }
  1621. }
  1622. for (j=1;j<8;j++)
  1623. {
  1624.   if (j>3)
  1625.    t=4;
  1626.   else
  1627.    t=j;
  1628.   for (i=0;i<24;i+=j)
  1629.   {
  1630.    x=dat3[i]>>4;
  1631.    y=dat3[i]&0x0f;
  1632.    box_apeak_xy(0,x,y,0,x+1,y+1,1,1);
  1633.    transss();
  1634.    delay(10000);
  1635.   }
  1636. }
  1637. for (j=1;j<8;j++)
  1638. {
  1639.   if (j>3)
  1640.    t=4;
  1641.   else
  1642.    t=j;
  1643.   for (i=0;i<24;i+=j)
  1644.   {
  1645.    x=dat3[i]>>4;
  1646.    y=dat3[i]&0x0f;
  1647.    point (0,x,y,1);
  1648.    transss();
  1649.    delay(10000);
  1650.   }
  1651. }
  1652. }void print1() interrupt 1
  1653. {
  1654. static uchar layert=0;
  1655. TR0 = 0;
  1656. ET0= 0;
  1657. //EA=0;
  1658. IRInit();
  1659. if(msd==1)         
  1660. {                 PWM_POW=0;
  1661.                  hansao(7-layert);          
  1662.                  sendbyte(~display[layert][0],~display[layert][2],~display[layert][4],~display[layert][7]);
  1663.                  sendbyte(~display[layert][3],~display[layert][1],~display[layert][6],~display[layert][5]);
  1664.                  SUO=0;_nop_();SUO=1;
  1665.                  M_EN=0;delayus(ld);M_EN=1;                                 
  1666.           if (layert<7)
  1667.                layert++;
  1668.           else
  1669.                layert=0;
  1670.              key_baihei_scan();  key_shangwiej_scan();   key_donghua_scan();        key_yinyue_scan();
  1671.                 if(msd==1)   
  1672.                 if(key2==2||key2==3){key3=2;        return;                       
  1673.                 }
  1674.                  TH0=0xef;
  1675.          TL0=0x00;
  1676. }
  1677. if(msd==2)
  1678. {
  1679.              hansao(layert);           
  1680.                  sendbyte(~display[layert][0],~display[layert][2],~display[layert][4],~display[layert][7]);
  1681.                  sendbyte(~display[layert][3],~display[layert][1],~display[layert][6],~display[layert][5]);
  1682.                  SUO=0;_nop_();SUO=1;
  1683.                  M_EN=0;delayus(ld);M_EN=1;                                 
  1684.           if (layert<7)
  1685.                layert++;
  1686.           else
  1687.                layert=0;       
  1688.              key_baihei_scan();  key_shangwiej_scan();   key_donghua_scan();        key_yinyue_scan();
  1689.                 if(msd==2)   
  1690.                 if(key2==1||key2==3){key3=2;        return;                       
  1691.                 }
  1692.                  TH0=0xef;
  1693.          TL0=0x00;
  1694. }
  1695.         TR0 = 1;
  1696.         ET0 = 1;
  1697.            //EA=1;
  1698. }

  1699. void flash_14()
  1700. {
  1701.          clear(0);
  1702.          type_sj(0,0);
  1703.          delay(60000);
  1704.                  clear(0);
  1705.          type_sj(1,1);
  1706.          delay(60000);
  1707.                  clear(0);
  1708.          type_sj(2,2);
  1709.          delay(60000);
  1710.                  clear(0);
  1711.          type_sj(3,3);
  1712.          delay(60000);
  1713.          clear(0);
  1714.          type_sj(4,4);
  1715.          delay(60000);
  1716.                  clear(0);
  1717.          type_sj(5,5);
  1718.          delay(60000);
  1719.                  clear(0);
  1720.          type_sj(6,6);
  1721.          delay(60000);
  1722.                  clear(0);
  1723.          type_sj(7,7);
  1724.          delay(60000);
  1725.                  clear(0);

  1726.          delay(60000);
  1727.          clear(0);
  1728.          type_sj(0,7);
  1729.          delay(40000);
  1730.                  clear(0);
  1731.          type_sj(1,6);
  1732.          delay(40000);
  1733.                  clear(0);
  1734.          type_sj(2,5);
  1735.          delay(40000);
  1736.                  clear(0);
  1737.          type_sj(3,4);
  1738.          delay(40000);
  1739.                  clear(0);
  1740.          type_sj(4,3);
  1741.          delay(40000);
  1742.                  clear(0);
  1743.          type_sj(5,2);
  1744.          delay(40000);
  1745.                  clear(0);
  1746.          type_sj(6,1);
  1747.          delay(40000);
  1748.                  clear(0);
  1749.          type_sj(7,0);
  1750.          delay(40000);
  1751.                  clear(0);

  1752. }
  1753. void flash_18()
  1754. {
  1755.       uchar i,j,k,z;
  1756.       roll_apeak_yz(1,10000);
  1757.       roll_apeak_yz(2,10000);
  1758.       roll_apeak_yz(3,10000);
  1759.           delay(60000);delay(60000);
  1760.       for (i=0;i<11;i++)
  1761.        {
  1762.          for (j=0;j<8;j++)
  1763.          {
  1764.           for (k=0;k<8;k++)
  1765.           {
  1766.                if ((table_3p_zf[i][j]>>k)&1)
  1767.                {
  1768.          for (z=1;z<8;z++)
  1769.           {
  1770.                point (j,7-k,z,1);
  1771.                if (z-1)
  1772.                point (j,7-k,z-1,0);
  1773.                delay(1500);
  1774.           }
  1775.                }
  1776.           }
  1777.          }
  1778.                  delay(60000);delay(60000);delay(60000);delay(60000);delay(60000);
  1779.          trans(7,15000);
  1780.        }
  1781. }
  1782. void flash_19()
  1783. {
  1784. uchar i;
  1785. for (i=0;i<9;i++)
  1786. {
  1787.   tranoutchar_cu(i,10000);
  1788.   delay(60000);
  1789.   delay(60000);
  1790. }
  1791. }

  1792. void sendbyte1(unsigned int num1,unsigned int num2,unsigned int num3,unsigned int num4)
  1793. {
  1794.     unsigned char c;
  1795.     for(c=0;c<8;c++)
  1796.    {
  1797.         CLK=0;
  1798.         M_LR_DS0=num1&0x01;
  1799.         M_LG_DS0=num2&0x01;
  1800.         M_HR_DS0=num3&0x01;
  1801.         M_HG_DS0=num4&0x01;
  1802.         CLK=1;
  1803.         num1>>=1;
  1804.         num2>>=1;
  1805.         num3>>=1;
  1806.         num4>>=1;
  1807.     }
  1808. }
  1809. void delays(int t)
  1810. {
  1811.         int i;
  1812.         while(t--)
  1813.                 for(i=0;i<700;i++);
  1814. }
  1815. void zhen(uchar *a,uchar v)
  1816. {
  1817. char layer,smsd=2,smsx=0,sudu=5;
  1818. uint cckk;
  1819. while(v--)
  1820. {

  1821.         if(sudu==25){cckk=700;}
  1822.                 else {
  1823.                 cckk=ld;
  1824.                 }
  1825.         if(ld==1){cckk=ld;}
  1826.         if(ld==1000){cckk=500;}
  1827.         ld=cckk;
  1828.   for(layer=0;layer<8;layer++)
  1829.   {
  1830.         if(xsdsq==1){;}
  1831.         else{key_baihei_scan();  key_shangwiej_scan();   key_donghua_scan();        key_yinyue_scan();}

  1832.         hansao(7-layer);
  1833.         sendbyte1(~a[layer*8+7],~a[layer*8+5],~a[layer*8+3],~a[layer*8+0]);
  1834.         sendbyte1(~a[layer*8+4],~a[layer*8+6],~a[layer*8+1],~a[layer*8+2]);
  1835.         SUO=0;                             
  1836.         _nop_();
  1837.         SUO=1;
  1838.         M_EN=0;                             
  1839.         delayus(ld);                    
  1840.         M_EN=1;                       
  1841.                 if(msd==2||msd==6)   
  1842.                 if(key2==1||key2==3)  
  1843.                 {
  1844.                 key3=1;        M_EN=1;                                  
  1845.                 break;
  1846.                 }
  1847.   }
  1848.         if(sudu==1){smsd=1;}
  1849.         if(sudu==5){smsd=5;}
  1850.         if(sudu==25){smsd=26;}
  1851.                 else {smsd=6;}
  1852.         if(sudu==5&&ld==20){smsx=7;}
  1853.         delays(smsd+smsx);                  
  1854. }
  1855. }
  1856. void flash_20()
  1857. {
  1858.         uchar a[64]={0};
  1859.         char i;
  1860.         for(i=0;i<4;i++)
  1861.         {
  1862.                 a[i*8+7]=0xff;
  1863.                 a[(7-i)*8+7]=0xff;
  1864.                 if(key3==1){break;}
  1865.                 else{zhen(a,8);}
  1866.                 delay(50);
  1867.         }
  1868.                 if(key3==1){return;}
  1869.                 else{zhen(a,30);}
  1870.         for(i=3;i>=0;i--)
  1871.         {
  1872.                 a[i*8+7]=0;
  1873.                 a[(7-i)*8+7]=0;
  1874.                 if(key3==1){break;}
  1875.                 else{zhen(a,8);}
  1876.                 delay(50);
  1877.         }
  1878. }
  1879. void hy(uchar *tab,char v)
  1880. {
  1881.         uchar a[64]={0};
  1882.         char i,j;
  1883.         for(i=0;i<8;i++)
  1884.                 a[i*8]=tab[i];
  1885.                 if(key3==1){return;}
  1886.                 else{zhen(a,v);}
  1887.         delay(50);

  1888.         for(i=1;i<8;i++)
  1889.         {
  1890.             for(j=0;j<8;j++)
  1891.                     a[i+j*8]=a[i-1+j*8];
  1892.                 if(key3==1){break;}
  1893.                 else{zhen(a,v);}
  1894.                 delay(50);
  1895.         }       
  1896.         for(i=0;i<7;i++)
  1897.         {
  1898.             for(j=0;j<8;j++)
  1899.                     a[i+j*8]=0;
  1900.                 if(key3==1){break;}
  1901.                 else{zhen(a,v);}
  1902.                 delay(50);
  1903.         }
  1904.                 if(key3==1){return;}
  1905.                 else{zhen(a,23);}
  1906.                 delay(50);       
  1907. }
  1908. void flash_21()
  1909. {
  1910.         char i;
  1911.         for(i=0;i<10;i++)
  1912.         hy(number+27*8+i*8,3);
  1913. }
  1914. uchar daoxu(uchar x)
  1915. {
  1916.         uchar k=0;
  1917.         char i;
  1918.         for(i=0;i<8;i++)
  1919.         {
  1920.                 if((x>>(7-i))&0x01)
  1921.                         k|=0x01<<i;
  1922.         }
  1923.         return k;
  1924. }

  1925. void fun1(uchar *a,uchar d,uchar b,uchar c,uchar e)//滚动字幕数据处理
  1926. {
  1927.         char i;
  1928.         for(i=0;i<8;i++)
  1929.         {
  1930.                 a[i]=e&0x01;
  1931.                 e>>=1;
  1932.         }
  1933.         a[7]|=(c<<1);
  1934.         a[6]|=(c&0x80);
  1935.         for(i=0;i<6;i++)
  1936.         {
  1937.                 a[5-i]|=((b<<(7-i))&0x80);
  1938.         }
  1939.         d=daoxu(d);
  1940.         a[0]|=((d>>1)&0x7e);
  1941. }

  1942. void zimu(uchar *x,char n,char v,int num)//滚动字幕,num表示循环次数,v表示滚动速度,n字符个数
  1943. {
  1944.         char i,j,k;
  1945.         uchar xdata a[64]={0},temp0[8],temp1[8],temp2[8],temp3[8],temp[8];
  1946.         for(i=0;i<8;i++)
  1947.         {
  1948.                 temp0[i]=0;
  1949.                 temp1[i]=0;
  1950.                 temp2[i]=0;
  1951.                 temp3[i]=0;
  1952.         }
  1953.         while(num--)
  1954.                 for(j=0;j<n;j++)//滚动
  1955.                 {
  1956.                         for(k=7;k>=0;k--)//读取数据
  1957.                                 temp[7-k]=x[j*8+k];
  1958.                         for(k=0;k<8;k++)//移动8位
  1959.                         {
  1960.                                 for(i=0;i<8;i++)
  1961.                                 {
  1962.                                         temp0[i]=(temp0[i]<<1)|(temp1[i]>>7);
  1963.                                         temp1[i]=(temp1[i]<<1)|(temp2[i]>>7);
  1964.                                         temp2[i]=(temp2[i]<<1)|(temp3[i]>>7);
  1965.                                         temp3[i]=(temp3[i]<<1)|(temp[i]>>7);
  1966.                                         temp[i]<<=1;
  1967.                                         fun1(a+i*8,temp0[i],temp1[i],temp2[i],temp3[i]);
  1968.                                 }
  1969.                 if(key3==1){break;}
  1970.                 else{zhen(a,v);}
  1971.                                 delay(50);
  1972.                         }
  1973.                 }
  1974. }
  1975. void key_baihei_scan()
  1976. {
  1977. if(!K1)  //如果检测到低电平,说明按键按下
  1978.     {
  1979.         if(msd==1||msd==2){TR0=0;}
  1980.          delay10us(); //延时去抖,一般10-20ms
  1981.      if(!K1)     //再次确认按键是否按下,没有按下则退出
  1982.            {
  1983.         while(!K1)//如果确认按下按键等待按键释放,没有则退出
  1984.                {
  1985.                    PWM_POW=1;      
  1986.                    delay10us();        delay10us();delay10us();delay10us();        delay10us();delay10us();
  1987.                    PWM_POW=0;      
  1988.                          }
  1989.                    if(test==1){key1=4;}
  1990.                    if(test==2){pu=~pu;if(pu==1){key2=4;ld=500;}if(pu==0){key2=5;ld=20;}}
  1991.            }
  1992.         }
  1993.         if(msd==1||msd==2){TR0=1;}
  1994. }

  1995. void flash_22()
  1996. {
  1997.     zimu(number,19,12,1);
  1998. }
  1999. void move(uchar *a,char kind,char direction,char length)//length不能为8
  2000. //kind=0 x轴,1 x轴,2 z轴;direction=0,负向,1正向
  2001. {
  2002.         char i,j;
  2003.         if(kind==0)
  2004.         {
  2005.                 if(direction==1)
  2006.                         for(i=0;i<64;i++)
  2007.                                 a[i]<<=length;
  2008.                 else
  2009.                         for(i=0;i<64;i++)
  2010.                                 a[i]>>=length;       
  2011.         }
  2012.         else if(kind==1)
  2013.         {
  2014.                 if(direction==1)
  2015.                         for(j=0;j<8;j++)
  2016.                         {
  2017.                                 for(i=7;i>=length;i--)
  2018.                                         a[i+j*8]=a[i-length+j*8];
  2019.                                 for(i=0;i<length;i++)
  2020.                                         a[i+j*8]=0;                       
  2021.                         }       
  2022.                 else
  2023.                         for(j=0;j<8;j++)
  2024.                         {
  2025.                                 for(i=0;i<length;i++)
  2026.                                         a[i+j*8]=a[i+length+j*8];
  2027.                                 for(i=(8-length);i<8;i++)
  2028.                                         a[i+j*8]=0;                       
  2029.                         }                       
  2030.         }
  2031.         else
  2032.         {
  2033.                 if(direction==1)
  2034.                         for(j=0;j<8;j++)
  2035.                         {
  2036.                                 for(i=7;i>=length;i--)
  2037.                                         a[j+i*8]=a[j+(i-length)*8];
  2038.                                 for(i=0;i<length;i++)
  2039.                                         a[j+i*8]=0;                       
  2040.                         }       
  2041.                 else
  2042.                         for(j=0;j<8;j++)
  2043.                         {
  2044.                                 for(i=0;i<(8-length);i++)
  2045.                                         a[j+i*8]=a[j+(i+length)*8];
  2046.                                 for(i=(8-length);i<8;i++)
  2047.                                         a[j+i*8]=0;                       
  2048.                         }       
  2049.         }
  2050. }

  2051. void flash_23()//条状升降
  2052. {
  2053.                 char i,j,k,v=2;
  2054.                 uchar a[64]={0};
  2055.                 for(i=7;i>=0;i--)
  2056.                 {
  2057.                         a[i]=0x01<<i;
  2058.                 if(key3==1){break;}
  2059.                 else{zhen(a,v+5);}
  2060.                         delay(50);
  2061.                 }
  2062.                 for(i=0;i<7;i++)
  2063.                 {
  2064.                         for(j=0;j<8;j++)
  2065.                                 a[j]=flash0__tab[i*8+j];
  2066.                 if(key3==1){break;}
  2067.                 else{zhen(a,v+5);}
  2068.                         delay(50);
  2069.                 }
  2070.                 for(i=0;i<7;i++)
  2071.                 {
  2072.                         move(a,2,1,1);
  2073.                 if(key3==1){break;}
  2074.                 else{zhen(a,v+5);}
  2075.                         delay(50);
  2076.                 }
  2077.                 for(i=0;i<64;i++)
  2078.                 {
  2079.                         if(i>55)
  2080.                                 a[i]=0xff;
  2081.                         else
  2082.                                 a[i]=0;
  2083.                 }
  2084.                 if(key3==1){return;}
  2085.                 else{zhen(a,20);}
  2086.                 delay(50);
  2087.                 for(i=7;i>=0;i--)//1
  2088.                         for(j=6;j>=0;j--)
  2089.                         {
  2090.                                 a[i+j*8]=0xff;
  2091.                                 a[i+(j+1)*8]=0;
  2092.                 if(key3==1){break;}
  2093.                 else{zhen(a,v);}
  2094.                                 delay(50);
  2095.                         }
  2096.                 if(key3==1){return;}
  2097.                 else{zhen(a,27);}
  2098.                 for(i=7;i>=0;i--)//2
  2099.                         for(j=1;j<8;j++)
  2100.                         {
  2101.                                 a[i+j*8]=0xff;
  2102.                                 a[i+(j-1)*8]=0;
  2103.                 if(key3==1){break;}
  2104.                 else{zhen(a,v);}
  2105.                                 delay(50);
  2106.                         }
  2107.                 if(key3==1){return;}
  2108.                 else{zhen(a,27);}
  2109.                 delay(50);
  2110.                 for(i=7;i>=0;i--)//3
  2111.                         for(k=6;k>=0;k--)
  2112.                         {
  2113.                                 for(j=0;j<8;j++)
  2114.                                 {
  2115.                                         if(k==0)
  2116.                                                 a[j+k*8]|=(0x80>>(7-i));
  2117.                                         else
  2118.                                                 a[j+k*8]=(0x80>>(7-i));
  2119.                                         a[j+(k+1)*8]^=(0x80>>(7-i));
  2120.                                 }
  2121.                 if(key3==1){break;}
  2122.                 else{zhen(a,v);}
  2123.                                 delay(50);
  2124.                         }
  2125.                 if(key3==1){return;}
  2126.                 else{zhen(a,27);}
  2127.                 delay(50);
  2128.                 for(i=7;i>=0;i--)//4
  2129.                         for(k=1;k<8;k++)
  2130.                         {
  2131.                                 for(j=0;j<8;j++)
  2132.                                 {
  2133.                                         if(k==7)
  2134.                                                 a[j+k*8]|=(0x80>>(7-i));
  2135.                                         else
  2136.                                                 a[j+k*8]=(0x80>>(7-i));
  2137.                                         a[j+(k-1)*8]^=(0x80>>(7-i));
  2138.                                 }
  2139.                 if(key3==1){break;}
  2140.                 else{zhen(a,v);}
  2141.                                 delay(50);
  2142.                         }
  2143.                 if(key3==1){return;}
  2144.                 else{zhen(a,27);}
  2145.                 delay(50);
  2146. }
  2147. void sendbyte(unsigned int num1,unsigned int num2,unsigned int num3,unsigned int num4)
  2148. {   
  2149.     unsigned char c;        
  2150.     for(c=0;c<8;c++)                       
  2151.    {
  2152.       CLK=0;                                  
  2153.       M_LR_DS0=num1&0x80;                         
  2154.           M_LG_DS0=num2&0x80;                       
  2155.           M_HR_DS0=num3&0x80;                       
  2156.           M_HG_DS0=num4&0x80;                       
  2157.       CLK=1;                                
  2158.           num1<<=1;               
  2159.       num2<<=1;               
  2160.       num3<<=1;               
  2161.       num4<<=1;                       
  2162.     }
  2163. }
  2164. void Delaypwm(unsigned int tpwm)
  2165. {
  2166. while(--tpwm);
  2167. }
  2168. void PWM_LED()
  2169. {
  2170. unsigned int CYCLE=100,PWM_LOW=1110,xhs=60000;
  2171. PWM_POW=0;
  2172. if (xhs>1)
  2173.     {
  2174. CYCLE=1950,PWM_LOW=201;
  2175. PWM_POW=1;
  2176. Delaypwm(60000);
  2177. for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++){
  2178.      PWM_POW=0;
  2179.      Delaypwm(PWM_LOW);
  2180.      PWM_POW=1;
  2181.        Delaypwm(CYCLE-PWM_LOW);
  2182.    }
  2183.   for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--){
  2184.      PWM_POW=0;
  2185.      Delaypwm(PWM_LOW);
  2186.      PWM_POW=1;
  2187.        Delaypwm(CYCLE-PWM_LOW);
  2188.    }
  2189.    xhs--;
  2190. }
  2191. }
  2192. void turn_on(uchar v)
  2193. {
  2194.         uchar a[64]={0};
  2195.         char i,j;
  2196.         a[7]=0x80;
  2197.                 if(key3==1){return;}
  2198.                 else{zhen(a,v);}
  2199.         delay(50);
  2200.         for(i=1;i<8;i++)
  2201.         {
  2202.                 a[i*8+7]=0x80;
  2203.                 if(key3==1){break;}
  2204.                 else{zhen(a,v);}
  2205.                 delay(50);
  2206.         }
  2207.         for(i=6;i>=0;i--)
  2208.         {
  2209.                 for(j=0;j<8;j++)
  2210.                         a[j*8+i]=0x80;
  2211.                 if(key3==1){break;}
  2212.                 else{zhen(a,v);}
  2213.                 delay(50);
  2214.         }       
  2215.         for(i=0;i<64;i++)
  2216.                 a[i]=0;       
  2217. }
  2218. void H_scan(uchar v)
  2219. {       
  2220.         uchar b[64]={0};
  2221.         char i,j;
  2222.        
  2223.         for(i=0;i<64;i++)
  2224.                 b[i]=0x80;
  2225.         for(i=0;i<8;i++)
  2226.         {
  2227.                 for(j=0;j<8;j++)
  2228.                 b[j*8+i]=0x80;
  2229.                 if(key3==1){break;}
  2230.                 else{zhen(b,1);}
  2231.         }
  2232.         for(i=0;i<8;i++)
  2233.         {
  2234.                 for(j=0;j<64;j++)
  2235.                         b[j]>>=1;
  2236.                 if(key3==1){break;}
  2237.                 else{zhen(b,v);}
  2238.                 delay(50);
  2239.         }
  2240. }
  2241. void V_scan(uchar v)
  2242. {
  2243.         uchar a[64]={0};
  2244.         char i,j;
  2245.         for(i=0;i<8;i++)
  2246.                 a[i]=0xff;
  2247.                 if(key3==1){return;}
  2248.                 else{zhen(a,v);}
  2249.         delay(50);
  2250.         for(i=1;i<8;i++)
  2251.         {
  2252.                 for(j=0;j<8;j++)
  2253.                 {
  2254.                         a[i*8+j]=0xff;
  2255.                         a[(i-1)*8+j]=0;
  2256.                 }
  2257.                 if(key3==1){break;}
  2258.                 else{zhen(a,v);}
  2259.                 delay(50);
  2260.         }
  2261. }
  2262. void W_scan(uchar v)
  2263. {
  2264.         uchar a[64]={0};
  2265.         char i,j;
  2266.         for(i=0;i<8;i++)
  2267.                 a[i*8+7]=0xff;
  2268.                 if(key3==1){return;}
  2269.                 else{zhen(a,v);}
  2270.         delay(50);
  2271.         for(i=6;i>=0;i--)
  2272.         {
  2273.                 for(j=0;j<8;j++)
  2274.                 {
  2275.                         a[j*8+i]=0xff;
  2276.                         a[j*8+i+1]=0;
  2277.                 }
  2278.                 if(key3==1){break;}
  2279.                 else{zhen(a,v);}
  2280.                 delay(50);
  2281.         }
  2282.         M_EN=0;
  2283. }
  2284. void W_side(uchar *tab,char num,char v)
  2285. {
  2286.         uchar a[64]={0};
  2287.         int i,j;
  2288.         for(j=0;j<num;j++)
  2289.         {
  2290.                 for(i=0;i<8;i++)
  2291.                         a[i*8+7]=tab[j*8+i];       
  2292.                 if(key3==1){break;}
  2293.                 else{zhen(a,v);}
  2294.                 delay(50);
  2295.         }
  2296. }
  2297. void flash_24()         
  2298. {
  2299.         uchar i,v=10,a[64]={0};
  2300.         for(i=0;i<7;i++)
  2301.                 a[7*8+i]=0xff;
  2302.         for(i=0;i<8;i++)
  2303.         {
  2304.                 move(a,2,0,1);
  2305.                 if(key3==1){break;}
  2306.                 else{zhen(a,v);}
  2307.                 delay(50);
  2308.         }
  2309. }
  2310. void flash_25()
  2311. {
  2312.         uchar a[64]={0};
  2313.         char i,j,num=5,v=3;
  2314.         while(num--)
  2315.         {
  2316.                 for(i=1;i<8;i++)
  2317.                         a[i]=0xff;
  2318.                 if(key3==1){break;}
  2319.                 else{zhen(a,v);        }
  2320.                 delay(50);
  2321.                 for(i=1;i<8;i++)
  2322.                 {
  2323.                         move(a,2,1,1);
  2324.                         for(j=0;j<8;j++)
  2325.                                 a[j]=0xff;
  2326.                 if(key3==1){break;}
  2327.                 else{zhen(a,v);}
  2328.                         delay(50);
  2329.                 }
  2330.                 for(i=0;i<8;i++)
  2331.                 {
  2332.                         if(num==0&&i==7)
  2333.                                 continue;
  2334.                         move(a,2,1,1);
  2335.                 if(key3==1){break;}
  2336.                 else{zhen(a,v);}
  2337.                         delay(50);
  2338.                 }
  2339.         }
  2340.         for(i=0;i<7;i++)
  2341.         {
  2342.                 move(a,2,0,1);
  2343.                 if(key3==1){break;}
  2344.                 else{zhen(a,v+5);}
  2345.                 delay(50);
  2346.         }
  2347. }
  2348. void leitu(uchar *b,char num,char v)
  2349. {
  2350.         uchar a[64]={0},p;
  2351.         char i,j,k,m;
  2352.         for(m=0;m<num;m++)
  2353.         {
  2354.                 for(i=0;i<8;i++)
  2355.                         for(k=0;k<8;k++)
  2356.                                 for(j=0;j<8;j++)
  2357.                                 {
  2358.                                         p=b[m*64+i*8+k]&(0x01<<j);
  2359.                                         if(p)
  2360.                                         {
  2361.                                                 a[i*8+k]|=p;
  2362.                 if(key3==1){break;}
  2363.                 else{zhen(a,v);}
  2364.                                                 delay(50);
  2365.                                         }
  2366.                                 }
  2367.                 if(key3==1){break;}
  2368.                 else{zhen(a,60);}
  2369.                 delay(50);
  2370.                 for(j=0;j<64;j++)
  2371.                 {
  2372.                         if(!a[j])
  2373.                                 continue;
  2374.                         a[j]=0;
  2375.                 if(key3==1){break;}
  2376.                 else{zhen(a,v-1);}
  2377.                         delay(50);
  2378.                 }
  2379.                 delays(30);
  2380.         }
  2381. }

  2382. void flash_26()
  2383. {
  2384. leitu(yc_table,5,2);
  2385. }
  2386. void flash_27()
  2387. {
  2388.         uchar a[64];
  2389.         char i,j,k,v=3;
  2390.         for(k=0;k<8;k++)
  2391.                 for(i=0;i<8;i++)
  2392.                         for(j=0;j<8;j++)
  2393.                         {
  2394.                                 a[tab_mian[i]*8+tab_xian[j]]|=(0x01<<tab_dian[(i+j)*8+k]);
  2395.                 if(key3==1){break;}
  2396.                 else{zhen(a,v);}
  2397.                                 delay(50);
  2398.                         }
  2399.                 if(key3==1){return;}
  2400.                 else{zhen(a,90);}
  2401.                 delay(50);
  2402.         for(k=0;k<8;k++)
  2403.                 for(i=0;i<8;i++)
  2404.                         for(j=0;j<8;j++)
  2405.                         {
  2406.                                 a[tab_mian[i]*8+tab_xian[j]]^=(0x01<<tab_dian[(i+j)*8+k]);
  2407.                 if(key3==1){break;}
  2408.                 else{zhen(a,v);}
  2409.                                 delay(50);
  2410.                         }
  2411. }

  2412. void water1(char x,char y,char v)
  2413. {
  2414.         uchar a[64]={0};
  2415.         char i,r;
  2416.         a[7*8+y]=0x01<<x;
  2417.                 if(key3==1){return;}
  2418.                 else{zhen(a,v);}
  2419.         delay(50);
  2420.         for(i=6;i>=0;i--)
  2421.         {
  2422.                 a[i*8+y]=a[(i+1)*8+y];
  2423.                 a[(i+1)*8+y]=0;
  2424.                 if(key3==1){break;}
  2425.                 else{zhen(a,v);}
  2426.                 delay(25);
  2427.         }//下落
  2428.         for(r=0;r<7;r++)
  2429.         {
  2430.                 for(i=0;i<8;i++)
  2431.                         a[i]=tab_water[r*16+7-y+i]>>(7-x);
  2432.                 if(key3==1){break;}
  2433.                 else{zhen(a,v+1);}
  2434.                 delay(25);
  2435.         }//扩散
  2436. }
  2437. void water2(char x1,char y1,char x2,char y2,char v)
  2438. {
  2439.         uchar a[64]={0};
  2440.         char i,r;
  2441.         a[7*8+y1]=0x01<<x1;
  2442.                 if(key3==1){return;}
  2443.                 else{zhen(a,v);}
  2444.         delay(50);
  2445.         for(i=6;i>=0;i--)
  2446.         {
  2447.                 move(a,2,0,1);
  2448.                 if(i==5)
  2449.                 {
  2450.                         a[7*8+y2]=0x01<<x2;                       
  2451.                 }
  2452.                 if(key3==1){break;}
  2453.                 else{zhen(a,v);}
  2454.                 delay(25);
  2455.         }
  2456.         for(r=0;r<9;r++)
  2457.         {
  2458.                 if(r<2)
  2459.                         move(a,2,0,1);
  2460.                 else
  2461.                         for(i=0;i<8;i++)
  2462.                                 a[i]=tab_water[(r-2)*16+7-y2+i]>>(7-x2);               
  2463.                 if(r<7)
  2464.                         for(i=0;i<8;i++)
  2465.                                 a[i]|=(tab_water[r*16+7-y1+i]>>(7-x1));
  2466.                 if(r==1)
  2467.                         a[y2]|=0x01<<x2;
  2468.                 if(key3==1){break;}
  2469.                 else{zhen(a,v);}
  2470.                 delay(25);
  2471.         }
  2472. }
  2473. void water3(char x1,char y1,char x2,char y2,char x3,char y3,char v)
  2474. {//3水滴
  2475.         uchar a[64]={0};
  2476.         char i,r;
  2477.         a[7*8+y1]=0x01<<x1;
  2478.                 if(key3==1){return;}
  2479.                 else{zhen(a,v);        }
  2480.         delay(25);
  2481.         for(i=6;i>=0;i--)
  2482.         {
  2483.                 move(a,2,0,1);
  2484.                 if(i==5)//第二点
  2485.                         a[7*8+y2]=0x01<<x2;       
  2486.                 if(i==3)
  2487.                         a[7*8+y3]=0x01<<x3;        //第三点               
  2488.                 if(key3==1){break;}
  2489.                 else{zhen(a,v);}
  2490.                 delay(25);
  2491.         }
  2492.         for(r=0;r<11;r++)
  2493.         {
  2494.                 if(r<4)
  2495.                         move(a,2,0,1);
  2496.                 if(r<11&&r>=4)
  2497.                         for(i=0;i<8;i++)
  2498.                                 a[i]=tab_water[(r-4)*16+7-y3+i]>>(7-x3);
  2499.                 if(r<9&&r>=2)
  2500.                         for(i=0;i<8;i++)
  2501.                                 a[i]|=tab_water[(r-2)*16+7-y2+i]>>(7-x2);               
  2502.                 if(r<7)
  2503.                         for(i=0;i<8;i++)
  2504.                                 a[i]|=(tab_water[r*16+7-y1+i]>>(7-x1));
  2505.                 if(r==1)
  2506.                         a[y2]|=0x01<<x2;
  2507.                 if(r==3)
  2508.                         a[y3]|=0x01<<x3;
  2509.                 if(key3==1){break;}
  2510.                 else{zhen(a,v);}
  2511.                 delay(25);
  2512.         }
  2513. }
  2514. void flash_28()
  2515. {               
  2516.                 water1(1,2,10);water1(2,4,10);
  2517.                 water1(4,3,10);water1(7,1,10);
  2518.                 water1(5,6,10);                       
  2519.                 water2(0,2,7,1,9);
  2520.                 water2(2,4,7,7,9);
  2521.                 water2(4,7,7,1,9);
  2522.                 water2(3,6,7,7,9);
  2523.                 water2(4,1,6,6,9);
  2524.                 water2(7,3,1,2,9);
  2525.                 water3(0,4,7,4,5,1,9);
  2526.                 water3(7,7,0,0,0,7,9);
  2527.                 water3(0,6,6,6,5,1,9);
  2528.                 water3(6,7,0,0,2,2,9);
  2529.                 water3(3,3,6,6,2,2,9);
  2530. }
  2531. void link_pingmian1(char v)
  2532. {
  2533.         uchar a[64]={0};
  2534.         char i,j;
  2535.         for(i=0;i<8;i++)
  2536.                 for(j=0;j<8;j++)
  2537.                 {
  2538.                         a[7*8+j]|=(0x01<<i);
  2539.                 if(key3==1){break;}
  2540.                 else{zhen(a,v);}
  2541.                         delay(50);
  2542.                 }
  2543. }
  2544. void pingmian1(char num,char v)
  2545. {
  2546.         char i,k;
  2547.         uchar a[64]={0};
  2548.         for(i=0;i<8;i++)
  2549.                 a[7*8+i]=0xff;
  2550.                 if(key3==1){return;}
  2551.                 else{zhen(a,v);        }
  2552.         delay(50);
  2553.         while(num--)
  2554.                 for(i=0;i<28;i++)
  2555.                 {
  2556.                         if(i<7)
  2557.                                 for(k=0;k<8;k++)
  2558.                                 {
  2559.                                         a[(6-i)*8+k]=0x01;
  2560.                                         a[7*8+k]>>=1;
  2561.                                 }
  2562.                         else if(i<14)
  2563.                                 for(k=0;k<8;k++)
  2564.                                 {
  2565.                                         a[k]|=0x01<<(i-6);
  2566.                                         a[(14-i)*8+k]=0;
  2567.                                 }
  2568.                         else if(i<21)
  2569.                                 for(k=0;k<8;k++)
  2570.                                 {
  2571.                                         a[(i-13)*8+k]=0x80;
  2572.                                         a[k]<<=1;
  2573.                                 }       
  2574.                         else
  2575.                                 for(k=0;k<8;k++)
  2576.                                 {
  2577.                                         a[7*8+k]|=0x80>>(i-20);
  2578.                                         a[(i-21)*8+k]=0;
  2579.                                 }
  2580.                 if(key3==1){break;}
  2581.                 else{zhen(a,v);        }
  2582.                         delay(50);
  2583.                 }
  2584.         M_EN=0;
  2585. }
  2586. void flash_29()
  2587. {
  2588.                 link_pingmian1(1);
  2589.                 pingmian1(8,3);
  2590. }

  2591. void print(uchar *a,char m)//m=0中空显示,m=1实心显示
  2592. {
  2593.         uchar p;
  2594.         char i,j,k;
  2595.         uchar b[64]={0};
  2596.         for(i=0;i<8;i++)
  2597.         {
  2598.                 b[7*8+i]=0xff;
  2599.         }       
  2600.         for(i=0;i<8;i++)//行切换
  2601.         {
  2602.                 for(j=0;j<8;j++)//点移动
  2603.                 {
  2604.                         p=a[i]&(0x01<<j);
  2605.                         if(p)
  2606.                         {
  2607.                                 for(k=6;k>0;k--)
  2608.                                 {
  2609.                                         if(m==1&&k==6)
  2610.                                         {;}
  2611.                                         else
  2612.                                                 b[(k+1)*8+7-i]&=(~p);
  2613.                                         b[k*8+7-i]|=(0x01<<j);
  2614.                 if(key3==1){break;}
  2615.                 else{zhen(b,1);}
  2616.                                         delay(50);
  2617.                                 }
  2618.                                 b[1*8+7-i]=0;
  2619.                                 b[7-i]|=p;
  2620.                 if(key3==1){break;}
  2621.                 else{zhen(b,1);         }
  2622.                                 delay(50);
  2623.                         }
  2624.                         b[7-i]|=p;
  2625.                 }
  2626.         }
  2627.                 if(key3==1){return;}
  2628.                 else{zhen(b,40); }
  2629.         delay(50);
  2630.         b[0]=0;
  2631.         for(j=7;j>0;j--)
  2632.         {
  2633.                 for(i=7;i>0;i--)
  2634.                 {
  2635.                         b[i]=b[i-1];

  2636.                 }
  2637.                 if(key3==1){break;}
  2638.                 else{zhen(b,5);        }
  2639.                         delay(50);               
  2640.         }
  2641.         M_EN=0;
  2642. }
  2643. void flash_30()
  2644. {
  2645.         char i;
  2646.         for(i=0;i<4;i++)
  2647.                 print(tab_print+i*8,0);
  2648. }
  2649. void link_jb0(char v)
  2650. {
  2651.         uchar a[64]={0};
  2652.         char i;
  2653.         for(i=0;i<64;i++)
  2654.         {
  2655.                 a[i]=0x80;
  2656.                 if(key3==1){break;}
  2657.                 else{zhen(a,v);}
  2658.                 delay(50);
  2659.         }
  2660. }
  2661. void jb0(char num,char v)///////////////////////////////
  2662. {
  2663.         char i,k;
  2664.         uchar c[64]={0};
  2665.         for(i=0;i<64;i++)
  2666.                 c[i]=0x80;
  2667.                 if(key3==1){return;}
  2668.                 else{zhen(c,v);}
  2669.         delay(50);
  2670.         while(num--)
  2671.                 for(i=0;i<28;i++)
  2672.                 {
  2673.                         if(i<7)
  2674.                                 for(k=0;k<8;k++)
  2675.                                 {
  2676.                                         c[k*8]|=(0x80>>(i+1));
  2677.                                         c[k*8+7-i]=0;
  2678.                                 }
  2679.                         else if(i<14)
  2680.                                 for(k=0;k<8;k++)
  2681.                                 {
  2682.                                         c[k*8+i-6]=0x01;
  2683.                                         c[k*8]>>=0x01;
  2684.                                 }
  2685.                         else if(i<21)
  2686.                                 for(k=0;k<8;k++)
  2687.                                 {
  2688.                                         c[k*8+i-14]=0;
  2689.                                         c[k*8+7]|=(0x01<<(i-13));
  2690.                                 }
  2691.                         else if(i<28)
  2692.                                 for(k=0;k<8;k++)
  2693.                                 {
  2694.                                         c[k*8+27-i]=0x80;
  2695.                                         c[k*8+7]<<=1;
  2696.                                 }
  2697.                 if(key3==1){break;}
  2698.                 else{zhen(c,v);}
  2699.                         delay(50);
  2700.                 }
  2701.         M_EN=0;
  2702. }
  2703. void yinchu(uchar *table,char n,char v)
  2704. {
  2705. /****************************
  2706. n为帧数
  2707. ******************************/
  2708.         char i,j,k;
  2709.         uchar a[64]={0},p;
  2710.         for(k=0;k<n;k++)
  2711.         {
  2712.                 for(i=0;i<8;i++)
  2713.                 {
  2714.                         p=0xff;
  2715.                         for(j=0;j<64;j++)
  2716.                         {
  2717.                                 a[j]=(table[j+k*64]|(0x80>>i))&(p<<(7-i));
  2718.                         }
  2719.                 if(key3==1){break;}
  2720.                 else{zhen(a,v);        }
  2721.                         delay(50);
  2722.                 }
  2723.                 if(key3==1){break;}
  2724.                 else{zhen(table+k*64,50);}
  2725.                 delay(50);
  2726.         }

  2727. }
  2728. void flash_31()
  2729. {
  2730.         link_jb0(1);
  2731.         jb0(4,3);
  2732.         yinchu(yc_table,5,9);
  2733.         link_jb0(1);
  2734.         jb0(4,3);
  2735. }               
  2736. void link(char v)
  2737. {
  2738. /****************************
  2739. 旋转衔接
  2740. ******************************/
  2741.         char i,j,k;
  2742.         uchar a[64]={0};
  2743.         for(i=0;i<64;i++)
  2744.                 a[i]=0x80;
  2745.                 if(key3==1){return;}
  2746.                 else{zhen(a,3);        }
  2747.         delay(50);
  2748.         for(i=0;i<8;i++)
  2749.         {
  2750.                 for(j=0;j<8;j++)
  2751.                 {
  2752.                         if(i<7)
  2753.                                 a[j*8+7-i]&=0x7f;
  2754.                         a[j*8+i]|=(0x80>>i);
  2755.                 }
  2756.                 if(key3==1){break;}
  2757.                 else{zhen(a,v);}
  2758.                 delay(50);
  2759.         }
  2760.         for(i=0;i<6;i++)
  2761.         {
  2762.                 for(j=0;j<8;j++)
  2763.                         for(k=0;k<8;k++)
  2764.                                 a[j*8+k]=tab_xuanzhuantiao[(i+8)*8+k];
  2765.                 if(key3==1){break;}
  2766.                 else{zhen(a,3);}
  2767.                 delay(50);
  2768.         }
  2769. }
  2770. void xuanzhuantiao(char kind,char num,char v)//空心旋转,kind=1实心,否则空心
  2771. {
  2772.         uchar a[64]={0};
  2773.         char i,j,k;
  2774.         while(num--)
  2775.         {
  2776.                 for(i=0;i<14;i++)
  2777.                 {
  2778.                         for(j=0;j<8;j++)
  2779.                         {
  2780.                                 for(k=0;k<8;k++)
  2781.                                 {
  2782.                                         if(k>1&&k<6&&j>1&&j<6&&kind!=1)
  2783.                                                 a[k+j*8]=tab_xuanzhuantiao[i*8+k]&0xc3;
  2784.                                         else
  2785.                                                 a[k+j*8]=tab_xuanzhuantiao[i*8+k];
  2786.                                 }
  2787.                         }
  2788.                 if(key3==1){break;}
  2789.                 else{zhen(a,v);}
  2790.                         delay(50);
  2791.                 }
  2792.         }
  2793. }
  2794. void flash_32()
  2795. {
  2796.         link(9);         //从左边开始进入连接选择条的开端
  2797.         xuanzhuantiao(1,8,4);//实心旋转显示选择一个面
  2798.         xuanzhuantiao(0,8,4);//空心旋转显示选择一个面
  2799. }
  2800. void xuanzhuantiao2(char num,char v)//空心旋转,kind=1实心,否则空心
  2801. {
  2802.         uchar a[64]={0};
  2803.         char i,j,k;
  2804.         while(num--)
  2805.                 for(i=0;i<56;i++)
  2806.                 {
  2807.                         for(j=0;j<8;j++)
  2808.                                 for(k=0;k<8;k++)
  2809.                                         a[j*8+k]=tab_xuanzhuantiao2[i*8+k];
  2810.                 if(key3==1){break;}
  2811.                 else{zhen(a,v);}
  2812.                         delay(50);
  2813.                 }
  2814. }
  2815. void flash_33()
  2816. {
  2817.         xuanzhuantiao2(3,3);
  2818. }
  2819. void qumianxuanzhuan(char kind,char num,char v)//曲面旋转
  2820. {
  2821.         uchar a[64]={0};
  2822.         char i,j,k;
  2823.         for(j=0;j<8;j++)
  2824.                 for(i=0;i<8;i++)
  2825.                         a[i+j*8]=tab_xuanzhuantiao[i];
  2826.                 if(key3==1){return;}
  2827.                 else{zhen(a,v);}
  2828.         delay(50);
  2829.         if(kind==1)
  2830.         {
  2831.                 for(j=1;j<8;j++)//顺时针初形变换
  2832.                 {
  2833.                         for(i=0;i<j;i++)
  2834.                                 for(k=0;k<8;k++)
  2835.                                         a[k+i*8]=tab_xuanzhuantiao[(j-i)*8+k];
  2836.                 if(key3==1){break;}
  2837.                 else{zhen(a,v);}
  2838.                         delay(50);
  2839.                 }
  2840.                 for(i=8;i<14;i++)
  2841.                 {
  2842.                         move(a,2,1,1);
  2843.                         for(j=0;j<8;j++)
  2844.                                 a[j]=tab_xuanzhuantiao[i*8+j];
  2845.                 if(key3==1){break;}
  2846.                 else{zhen(a,v);}
  2847.                         delay(50);
  2848.                 }
  2849.         }
  2850.         else
  2851.         {
  2852.                 for(j=1;j<8;j++)//逆时针初形变换
  2853.                 {
  2854.                         for(i=0;i<j;i++)
  2855.                                 for(k=0;k<8;k++)
  2856.                                         a[k+i*8]=tab_xuanzhuantiao[(14-j+i)*8+k];
  2857.                 if(key3==1){break;}
  2858.                 else{zhen(a,v);}
  2859.                         delay(50);
  2860.                 }
  2861.                 for(i=7;i>=0;i--)
  2862.                 {
  2863.                         move(a,2,1,1);
  2864.                         for(j=0;j<8;j++)
  2865.                                 a[j]=tab_xuanzhuantiao[i*8+j];
  2866.                 if(key3==1){break;}
  2867.                 else{zhen(a,v);        }
  2868.                         delay(50);
  2869.                 }
  2870.         }

  2871.         while(num--)//主循环
  2872.         {
  2873.                 if(kind==1)
  2874.                         for(i=0;i<14;i++)
  2875.                         {
  2876.                                 move(a,2,1,1);
  2877.                                 for(j=0;j<8;j++)
  2878.                                         a[j]=tab_xuanzhuantiao[i*8+j];
  2879.                 if(key3==1){break;}
  2880.                 else{zhen(a,v);}
  2881.                                 delay(50);
  2882.                         }
  2883.                 else
  2884.                         for(i=13;i>=0;i--)
  2885.                         {
  2886.                                 move(a,2,1,1);                               
  2887.                                 for(j=0;j<8;j++)
  2888.                                         a[j]=tab_xuanzhuantiao[i*8+j];
  2889.                 if(key3==1){break;}
  2890.                 else{zhen(a,v);}
  2891.                                 delay(50);
  2892.                         }
  2893.         }
  2894.         if(kind==1)
  2895.                 for(j=0;j<7;j++)
  2896.                 {
  2897.                         for(i=7;i>=j;i--)
  2898.                         {
  2899.                                 if(i>j)
  2900.                                         for(k=0;k<8;k++)
  2901.                                                 a[k+i*8]=tab_xuanzhuantiao[(14-i+j)*8+k];
  2902.                                 else
  2903.                                         for(k=0;k<8;k++)
  2904.                                                 a[k+i*8]=tab_xuanzhuantiao[k];
  2905.                         }
  2906.                 if(key3==1){break;}
  2907.                 else{zhen(a,v);}
  2908.                         delay(50);
  2909.                 }
  2910.         else
  2911.                 for(j=1;j<7;j++)
  2912.                 {
  2913.                         for(i=7;i>=j;i--)
  2914.                         {
  2915.                                 if(i>j)
  2916.                                         for(k=0;k<8;k++)
  2917.                                                 a[k+i*8]=tab_xuanzhuantiao[(i-j)*8+k];
  2918.                                 else
  2919.                                         for(k=0;k<8;k++)
  2920.                                                 a[k+i*8]=tab_xuanzhuantiao[k];
  2921.                         }
  2922.                 if(key3==1){break;}
  2923.                 else{zhen(a,v);}
  2924.                         delay(50);
  2925.                 }
  2926. }
  2927. void flash_34()
  2928. {
  2929.         qumianxuanzhuan(1,10,4);
  2930.         qumianxuanzhuan(0,10,4);
  2931. }
  2932. void qumianxuanzhuan2(char num,char v)//曲面旋转
  2933. {
  2934.         uchar a[64]={0};
  2935.         char i,j,k;
  2936.         for(j=0;j<8;j++)
  2937.                 for(i=0;i<8;i++)
  2938.                         a[i+j*8]=tab_xuanzhuantiao[i];
  2939.                 if(key3==1){return;}
  2940.                 else{zhen(a,v);}
  2941.         delay(50);
  2942.         for(j=1;j<8;j++)
  2943.         {
  2944.                 for(i=0;i<j;i++)
  2945.                         for(k=0;k<8;k++)
  2946.                                 a[k+i*8]=tab_xuanzhuantiao[(14-j+i)*8+k];
  2947.                 if(key3==1){break;}
  2948.                 else{zhen(a,v);}
  2949.                 delay(50);
  2950.         }
  2951.         while(num--)
  2952.         {
  2953.                 for(j=1;j<8;j++)
  2954.                 {
  2955.                         move(a,2,1,1);
  2956.                         for(i=0;i<j;i++)
  2957.                         {
  2958.                                 for(k=0;k<8;k++)
  2959.                                 {
  2960.                                         if(j!=7|i!=0)
  2961.                                                 a[i*8+k]=tab_xuanzhuantiao[k+(j+7-i)*8];
  2962.                                         else
  2963.                                                 a[k]=tab_xuanzhuantiao[k];
  2964.                                 }
  2965.                         }
  2966.                 if(key3==1){break;}
  2967.                 else{zhen(a,v);}
  2968.                         delay(50);
  2969.                 }
  2970.                 for(j=1;j<8;j++)
  2971.                 {
  2972.                         move(a,2,1,1);
  2973.                         for(i=0;i<j;i++)
  2974.                         {
  2975.                                 for(k=0;k<8;k++)
  2976.                                         a[i*8+k]=tab_xuanzhuantiao[k+(14-j+i)*8];
  2977.                         }
  2978.                 if(key3==1){break;}
  2979.                 else{zhen(a,v);}
  2980.                         delay(50);
  2981.                 }
  2982.         }
  2983. }
  2984. void flash_35()
  2985. {
  2986.         qumianxuanzhuan2(13,4);
  2987. }
  2988. void donghua(uchar *tab,uchar num,uchar n,char v)
  2989. {
  2990.         char i;
  2991.         while(n--)
  2992.         {
  2993.                 for(i=0;i<num;i++)//清空
  2994.                 {
  2995.                 if(key3==1){break;}
  2996.                 else{zhen(tab+i*64,v);}
  2997.                         delay(50);
  2998.                 }
  2999.         }
  3000. }
  3001. void xzcube()
  3002. {
  3003.                 char i;
  3004.                 donghua(y_table,6,8,8);
  3005.                 for(i=0;i<26;i++)
  3006.                 {
  3007.                         if(i==12||i==13||i==14)
  3008.                                 {                if(key3==1){break;}
  3009.                 else{zhen(yx_table+i*64,30);}
  3010.                                 delay(50);}
  3011.                         else {
  3012.                                                 if(key3==1){break;}
  3013.                 else{zhen(yx_table+i*64,14);}
  3014.                                 delay(50);  }
  3015.                 }
  3016.                 donghua(x_table,6,8,8);
  3017.                 for(i=0;i<26;i++)
  3018.                 {
  3019.                         if(i==12||i==13||i==14)
  3020.                                 {                if(key3==1){break;}
  3021.                 else{zhen(xz_table+i*64,30);}
  3022.                                 delay(50);}
  3023.                         else{
  3024.                                                 if(key3==1){break;}
  3025.                 else{zhen(xz_table+i*64,14);}
  3026.                                 delay(50);}
  3027.                 }
  3028.                 donghua(z_table,6,8,8);
  3029. }
  3030. void flash_36()
  3031. {
  3032.         donghua(bianxing_table,11,1,24);
  3033.         xzcube();
  3034.         donghua(y_table,6,5,5);
  3035.         donghua(x_table,6,5,5);
  3036.         donghua(z_table,6,5,5);
  3037. }
  3038. void produce_cube(uchar *a,char n)
  3039. {
  3040.         char i,j;
  3041.         for(i=0;i<8;i++)
  3042.                 for(j=0;j<8;j++)
  3043.                 {
  3044.                         if(j<n&&i<n)
  3045.                                 a[j+i*8]=0xff>>(8-n);
  3046.                         else
  3047.                                 a[j+i*8]=0;
  3048.                 }       
  3049. }
  3050. void link00()
  3051. {
  3052.         uchar a[64]={0};
  3053.         char i;
  3054.         for(i=10;i>7;i--)
  3055.         {
  3056.                                 if(key3==1){break;}
  3057.                 else{zhen(bianxing_table+i*64,70);}
  3058.                 delay(50);
  3059.         }
  3060.         produce_cube(a,6);
  3061.         move(a,1,1,1);
  3062.         move(a,0,1,1);
  3063.                         if(key3==1){return;}
  3064.                 else{zhen(a,110);}
  3065.         delay(50);
  3066.         produce_cube(a,8);
  3067.                         if(key3==1){return;}
  3068.                 else{zhen(a,110);}
  3069.         delay(50);
  3070. }
  3071. void flash_37()         
  3072. {
  3073.         link00();  
  3074. }
  3075. void shensuo(uchar v)
  3076. {
  3077.         char i,j;
  3078.         uchar a[64]={0};
  3079.         for(i=0;i<64;i++)
  3080.                 a[i]=0xff;
  3081.         for(i=0;i<7;i++)
  3082.         {
  3083.                 move(a,0,0,1);
  3084.                                 if(key3==1){break;}
  3085.                 else{zhen(a,v);}
  3086.                 delay(50);
  3087.         }
  3088.         for(i=0;i<7;i++)
  3089.         {
  3090.                 move(a,0,1,1);
  3091.                 for(j=0;j<64;j++)
  3092.                         a[j]|=0x01;
  3093.                                 if(key3==1){break;}
  3094.                 else{zhen(a,v);}
  3095.                 delay(50);
  3096.         }
  3097.         for(i=0;i<7;i++)
  3098.         {
  3099.                 move(a,2,0,1);
  3100.                                 if(key3==1){break;}
  3101.                 else{zhen(a,v);}
  3102.                 delay(50);
  3103.         }
  3104.         for(i=0;i<7;i++)
  3105.         {
  3106.                 move(a,2,1,1);
  3107.                 for(j=0;j<8;j++)
  3108.                         a[j]|=0xff;
  3109.                                 if(key3==1){break;}
  3110.                 else{zhen(a,v);}
  3111.                 delay(50);
  3112.         }
  3113.         for(i=7;i>0;i--)
  3114.         {
  3115.                 for(j=0;j<8;j++)
  3116.                         a[j*8+i]=0;
  3117.                                 if(key3==1){break;}
  3118.                 else{zhen(a,v);        }
  3119.                 delay(50);
  3120.         }
  3121.         for(i=1;i<8;i++)
  3122.         {
  3123.                 for(j=0;j<8;j++)
  3124.                         a[j*8+i]|=0xff;
  3125.                                 if(key3==1){break;}
  3126.                 else{zhen(a,v);}
  3127.                 delay(50);
  3128.         }
  3129. }
  3130. void flash_38()         
  3131. {
  3132.         shensuo(5);
  3133. }
  3134. void produce_empty(uchar *a,char n)//0<n<=8,注意n不能为0
  3135. {
  3136.         char j;
  3137.         uchar p;
  3138.         for(j=0;j<64;j++)
  3139.                 a[j]=0;
  3140.         p=0xff>>(8-n);
  3141. /************X4列*************/
  3142.         a[(n-1)*8+n-1]=p;
  3143.         a[(n-1)*8]=p;
  3144.         a[0]=p;
  3145.         a[n-1]=p;
  3146.         for(j=0;j<n;j++)
  3147.         {
  3148.                 p=(0x01|(0x01<<(n-1)));
  3149. /************竖直4列*************/
  3150.                 a[j*8]|=p;
  3151.                 a[j*8+n-1]|=p;
  3152. /************Y4列*************/
  3153.                 a[j]|=p;
  3154.                 a[(n-1)*8+j]|=p;
  3155.         }
  3156. }
  3157. void cube(char empty,char kind,char v)
  3158. {
  3159.         uchar a[64]={0};
  3160.         char i;
  3161.         for(i=1;i<=8;i++)//生成
  3162.         {
  3163.                 if(empty==0)
  3164.                         produce_cube(a,i);
  3165.                 else
  3166.                         produce_empty(a,i);
  3167.                 if(kind==0)
  3168.                         {;}
  3169.                 else if(kind==1)
  3170.                         move(a,1,1,8-i);
  3171.                 else if(kind==2)
  3172.                 {
  3173.                         move(a,1,1,8-i);
  3174.                         move(a,0,1,8-i);
  3175.                 }
  3176.                 else
  3177.                         move(a,0,1,8-i);
  3178.                                 if(key3==1){break;}
  3179.                 else{zhen(a,v);        }
  3180.                 delay(50);
  3181.         }
  3182.         for(i=7;i>0;i--)//退出
  3183.         {
  3184.                 if(empty==0)
  3185.                         produce_cube(a,i);
  3186.                 else
  3187.                         produce_empty(a,i);
  3188.                 if(kind==0)
  3189.                 {
  3190.                         move(a,1,1,8-i);
  3191.                         move(a,0,1,8-i);
  3192.                 }
  3193.                 else if(kind==1)
  3194.                         move(a,0,1,8-i);
  3195.                 else if(kind==2)
  3196.                         {;}
  3197.                 else
  3198.                         move(a,1,1,8-i);                               
  3199.                                 if(key3==1){break;}
  3200.                 else{zhen(a,v);}
  3201.                 delay(50);
  3202.         }
  3203. }
  3204. void flash_39()          
  3205. {
  3206.         char i,j;
  3207.                 for(i=0;i<3;i++)         
  3208.                         for(j=0;j<3;j++)
  3209.                                 cube(0,j,6);
  3210.                 for(i=0;i<3;i++)     
  3211.                         for(j=0;j<3;j++)
  3212.                                 cube(1,j,6);
  3213. }

  3214. void flash_40()         
  3215. {
  3216.         donghua(hart_table,2,10,32);
  3217. }
  3218. void shandian(char v)
  3219. {
  3220.                 char i,j;
  3221.                 uchar a[64];
  3222.                 for(i=0;i<64;i++)
  3223.                         a[i]=tab_shandian[64*21+i];
  3224.                 for(i=0;i<22;i++)
  3225.                                         if(key3==1){break;}
  3226.                 else{zhen(tab_shandian+64*i,v);}
  3227.                         delay(50);
  3228.                 for(i=0;i<22;i++)
  3229.                 {
  3230.                         for(j=0;j<64;j++)
  3231.                                 a[j]=a[j]&(~tab_shandian[64*i+j]);
  3232.                                         if(key3==1){break;}
  3233.                 else{zhen(a,v);}
  3234.                         delay(50);
  3235.                 }
  3236. }
  3237. void flash_41()         
  3238. {
  3239.                 char i;
  3240.                 for(i=2;i>0;i--)
  3241.                         shandian(i);       
  3242. }
  3243. void szfc0(char v)//数字上浮
  3244. {
  3245.         char i,j;
  3246.         uchar a[64];
  3247.         for(i=0;i<64;i++)
  3248.         {
  3249.                 a[i]=0;
  3250.         }
  3251.         for(j=124;j>=0;j--)
  3252.         {
  3253.                 for(i=7;i>=0;i--)
  3254.                 {
  3255.                         a[i*8+3]=szfc_table[j+i];
  3256.                         a[i*8+4]=szfc_table[j+i];
  3257.                 }
  3258.                                 if(key3==1){break;}
  3259.                 else{zhen(a,v);        }
  3260.                 delay(50);
  3261.         }
  3262. }
  3263. void flash_42()         
  3264. {
  3265.                 szfc0(10);
  3266. }
  3267. void rain(char menu,char num,char v)
  3268. {//menu=0,up;menu=1,down
  3269.         uchar a[64]={0};
  3270.         char i,j;
  3271.         if(menu==0)
  3272.         {
  3273.                 for(i=0;i<8;i++)
  3274.                         a[i]=tab_rain[i];
  3275.                                 if(key3==1){return;}
  3276.                 else{zhen(a,v);}
  3277.                 delay(50);
  3278.                 for(i=1;i<8;i++)
  3279.                 {
  3280.                         move(a,2,1,1);
  3281.                         for(j=0;j<8;j++)
  3282.                                 a[j]=tab_rain[i*8+j];
  3283.                                         if(key3==1){break;}
  3284.                 else{zhen(a,v);}
  3285.                         delay(50);
  3286.                 }       
  3287.                 while(num--)
  3288.                 {       
  3289.                         for(i=0;i<8;i++)
  3290.                         {
  3291.                                 move(a,2,1,1);
  3292.                                 for(j=0;j<8;j++)
  3293.                                         a[j]=tab_rain[i*8+j];
  3294.                                                 if(key3==1){break;}
  3295.                 else{zhen(a,v);}
  3296.                                 delay(50);
  3297.                         }
  3298.                 }
  3299.         }
  3300.         else
  3301.         {
  3302.                 for(i=0;i<8;i++)
  3303.                         a[7*8+i]=tab_rain[i];
  3304.                                 if(key3==1){return;}
  3305.                 else{zhen(a,v);}
  3306.                 delay(50);
  3307.                 for(i=1;i<8;i++)
  3308.                 {
  3309.                         move(a,2,0,1);
  3310.                         for(j=0;j<8;j++)
  3311.                                 a[7*8+j]=tab_rain[i*8+j];
  3312.                                         if(key3==1){break;}
  3313.                 else{zhen(a,v);}
  3314.                         delay(50);
  3315.                 }
  3316.                 while(num--)
  3317.                 {       
  3318.                         for(i=0;i<8;i++)
  3319.                         {
  3320.                                 move(a,2,0,1);
  3321.                                 for(j=0;j<8;j++)
  3322.                                         a[j+7*8]=tab_rain[i*8+j];
  3323.                                                 if(key3==1){break;}
  3324.                 else{zhen(a,v);}
  3325.                                 delay(50);
  3326.                         }                               
  3327.                 }
  3328.         }
  3329. }
  3330. void flash_15()         
  3331. {
  3332.         rain(1,10,9);
  3333.         rain(0,10,9);
  3334. }
  3335. void delayyp(unsigned int n1)
  3336. {
  3337.     unsigned int xdata i;
  3338.     while(n1--)
  3339.      for (i=0;i<200;i++);
  3340. }
  3341. unsigned int Read_ADC0()
  3342. {
  3343. ADC_CONTR|=0x08;
  3344. _nop_();
  3345. _nop_();
  3346. _nop_();
  3347. _nop_();
  3348. while(!(ADC_CONTR&0x10));
  3349. ADC_CONTR&=~0x10;
  3350. return ((ADC_RES<<2)|(ADC_RESL));
  3351. }
  3352. unsigned int voivol(unsigned int n)
  3353. {
  3354. unsigned int xdata val,result,rel=0;
  3355. while(n)
  3356. {
  3357.   val=Read_ADC0();
  3358.   delayyp(2);
  3359.   result=val;
  3360.   rel=rel+result;
  3361.   n--;
  3362. }
  3363. return rel;
  3364. }
  3365. void Vol_watch_0(unsigned char kxg)
  3366. {
  3367. unsigned int xdata result=0,l=1,n=500;
  3368. while(n)
  3369. {
  3370.   if ((result>>5)>l)
  3371.   l=result>>5;
  3372.   else
  3373.    if (l>1)
  3374.     l--;
  3375.   if (l>7)
  3376.   l=7;

  3377. if(kxg==1)
  3378. {
  3379.   box(0,0,0,l,l,l,0,1);
  3380.   result=voivol(16);
  3381.   box(0,0,0,7,7,7,1,0);          
  3382. }
  3383. if(kxg==2)
  3384. {
  3385.   box(7,7,7,7-l,7-l,7-l,0,1);
  3386.   result=voivol(16);
  3387.   box(7,7,7,7-l,7-l,7-l,1,0);
  3388. }
  3389. if(kxg==3)
  3390. {  box(7,0,7,0,l,0,0,1);
  3391.   result=voivol(16);
  3392.   box(l,0,l,0,7,0,1,0);          
  3393. }
  3394. if(kxg==4)
  3395. {   
  3396.   box(l,l,l,7-l,7-l,7-l,0,1);
  3397.   result=voivol(16);
  3398.   box(7-l,7-l,7-l,l,l,l,1,0);       
  3399. }
  3400. if(kxg==5)
  3401. {
  3402.   box(0,7,7,l,7-l,0,0,1);
  3403.   result=voivol(16);
  3404.   box(0,7,7,l,7-l,0,1,0);         
  3405. }
  3406. if(kxg==6)
  3407. {
  3408.   box(l,l,l,7-l,7-l,7-l,0,1);
  3409.   result=voivol(16);
  3410.   box(7-l,7-l,7-l,7,7,7,1,0);       
  3411. }
  3412. if(kxg==7)
  3413. {
  3414.   box(l,0,7,0,7,0,0,1);
  3415.   result=voivol(16);
  3416.   box(7,0,l,0,l,0,1,0);             
  3417. }
  3418.   n--;
  3419. if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3420. else{if(key2==2){msd=2;break;}}}
  3421. }
  3422. }

  3423. void Vol_watch_2()
  3424. {
  3425. unsigned int xdata result=0,l=0,n=500;
  3426. while(n)
  3427. {
  3428.   if ((result>>5)>l)
  3429.   l=result>>5;
  3430.   else
  3431.    if (l>0)
  3432.     l--;
  3433.   if (l>7)
  3434.   l=7;
  3435.   clear(0);
  3436.   switch(l)
  3437.   {
  3438.    case 0:point(4,4,4,1);break;
  3439.    case 1:box(3,3,3,4,4,4,1,1);break;
  3440.    case 2:box(2,2,2,4,4,4,1,1);break;
  3441.    case 3:box(2,2,2,5,5,5,1,1);break;
  3442.    case 4:box(1,1,1,5,5,5,1,1);break;
  3443.    case 5:box(1,1,1,6,6,6,1,1);break;
  3444.    case 6:box(0,0,0,6,6,6,1,1);break;
  3445.    default:box(0,0,0,7,7,7,1,1);
  3446.   }
  3447.   result=voivol(16);
  3448.   n--;
  3449.   if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3450. else{if(key2==2){msd=2;break;}}}
  3451. }
  3452. }
  3453. void Vol_watch_3()
  3454. {
  3455. unsigned int result,l,n=500;
  3456. while(n)
  3457. {
  3458.   result=voivol(3);
  3459.   l=result>>3;
  3460.   if (l>7)
  3461.   l=7;
  3462.   transss();
  3463.   box_apeak_xy(0,0,0,0,7,l,1,1);
  3464.   delayyp(60);
  3465.   n--;
  3466.   if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3467. else{if(key2==2){msd=2;break;}}}
  3468. }
  3469. }
  3470. void init_uart(void)
  3471. {
  3472. PCON |= 0x80;
  3473. SCON = 0x50;
  3474. AUXR |= 0x40;
  3475. AUXR &= 0xFE;
  3476. TMOD &= 0x0F;
  3477. TMOD |= 0x20;                                          
  3478. TL1 = 0xE8;
  3479. TH1 = 0xE8;
  3480. ET1 = 0;
  3481. TR1 = 1;
  3482. ES=1;
  3483. EA=1;
  3484. }
  3485. void sendbyteck(unsigned int num1,unsigned int num2,unsigned int num3,unsigned int num4)
  3486. {
  3487.     unsigned char c;
  3488.     for(c=0;c<8;c++)
  3489.    {
  3490.         CLK=0;
  3491.         M_LR_DS0=num1&0x01;
  3492.         M_LG_DS0=num2&0x01;
  3493.         M_HR_DS0=num3&0x01;
  3494.         M_HG_DS0=num4&0x01;
  3495.         CLK=1;
  3496.         num1>>=1;
  3497.         num2>>=1;
  3498.         num3>>=1;
  3499.         num4>>=1;
  3500.     }
  3501. }
  3502. void key_shangwiej_scan()
  3503. {
  3504. if(!K2)  //如果检测到低电平,说明按键按下
  3505.     {
  3506.         if(msd==1||msd==2){TR0=0;}
  3507.          delay10us();  //延时去抖,一般10-20ms
  3508.      if(!K2)     //再次确认按键是否按下,没有按下则退出
  3509.            {
  3510.         while(!K2)//如果确认按下按键等待按键释放,没有则退出
  3511.                {
  3512.                    if(test==1){key1=1;}
  3513.                    if(test==2){key2=3;}
  3514.                    PWM_POW=1;      
  3515.                    delay10us();        delay10us();delay10us();delay10us();        delay10us();delay10us();
  3516.                    PWM_POW=0;      
  3517.                          }
  3518.            }
  3519.         }
  3520.         if(msd==1||msd==2){TR0=1;}
  3521. }
  3522. /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
  3523. void main()
  3524. {
  3525.         unsigned char p=0,k=0,l=0;          //定义
  3526.         sinter();
  3527.         IDelay(100);
  3528.         IRInit();                                   //初始化红外中断
  3529.         clear(0);
  3530.         PWM_LED();//开启PWM呼吸灯功能
  3531.         turn_on(10);
  3532.         H_scan(10);
  3533.         V_scan(10);
  3534.         W_scan(10);
  3535.         PWM_POW=0;//打开电源指示灯
  3536.         test=1;       
  3537.         while(1)
  3538.         {
  3539.                 ld=500;
  3540.                 H_scan(40);
  3541.                 if(key1==1||key1==2||key1==3||key1==4){        break;}        V_scan(40);
  3542.                 if(key1==1||key1==2||key1==3||key1==4)        {break;}W_scan(40);
  3543.                 if(key1==1||key1==2||key1==3||key1==4)        {break;}}
  3544.         while(1)
  3545.         {
  3546.                 if(key1==3)        {H_scan(40); } if(key1==2){V_scan(40); }if(key1==1){W_scan(40);        }if(key1==4){
  3547.                 test=2;          
  3548.                 msd=2;   
  3549.                 ld=500;
  3550.                 break; //退出测试功能
  3551.                 }
  3552.         }
  3553.         delay(10);         TR0=0;       
  3554.         while(1)  /*play list*/
  3555.         {
  3556.                 if(msd==1)         
  3557.                 {       
  3558.                         key3=3;       
  3559.                         TR0=0;       
  3560.                                           
  3561.                         //EA=0;
  3562.                         ET0=0;
  3563.                         IRInit();  
  3564.                         xsdsq=1;
  3565.                         hy(number+(36+1)*8,10);       
  3566.                         W_side(number+(36+1)*8,1,200);
  3567.                         xsdsq=0;
  3568.                         PWM_POW=0;
  3569.                         TR0=1;                                  //开启定时器显示扫描
  3570.                         ET0=1;
  3571.                         //EA=1;
  3572.                         test=2;
  3573.                    while(1)
  3574.                    {
  3575.                                 if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3576.                                 else{if(key2==2){msd=2;break;}}}else{  clear(0); Vol_watch_0(1);}
  3577.                                 if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3578.                                 else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_0(2);}
  3579.                                 if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3580.                                 else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_0(3);        }
  3581.                                 if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3582.                                 else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_0(4);        }
  3583.                                 if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3584.                                 else{if(key2==2){msd=2;break;}}}else{  clear(0); Vol_watch_0(5);}
  3585.                                 if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3586.                                 else{if(key2==2){msd=2;break;}}}else{  clear(0); Vol_watch_0(6);}
  3587.                                 if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3588.                                 else{if(key2==2){msd=2;break;}}}else{   clear(0); Vol_watch_0(7);}
  3589.                                 if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3590.                                 else{if(key2==2){msd=2;break;}}}else{ clear(0);         Vol_watch_1(1);}
  3591.                                 if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3592.                                 else{if(key2==2){msd=2;break;}}}else{ clear(0);         Vol_watch_1(2);}
  3593.                                 if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3594.                                 else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_1(3); }
  3595.                                 if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3596.                                 else{if(key2==2){msd=2;break;}}}else{ clear(0);         Vol_watch_1(4);}
  3597.                                 if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3598.                                 else{if(key2==2){msd=2;break;}}}else{ clear(0);         Vol_watch_1(5);}
  3599.                                 if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3600.                                 else{if(key2==2){msd=2;break;}}}else{ clear(0);         Vol_watch_2();}
  3601.                                 if(key2==3||key2==2){if(key2==3){msd=3;break;}
  3602.                                 else{if(key2==2){msd=2;break;}}}else{ clear(0); Vol_watch_3();}
  3603.                    }
  3604.                 }
  3605.                 if(msd==2)         
  3606.                 {       
  3607.                         key3=3;       
  3608.                         xsdsq=1;
  3609.                         hy(number+(36+2)*8,10);       
  3610.                         W_side(number+(36+2)*8,1,200);
  3611.                         xsdsq=0;
  3612.                    while(1)
  3613.                    {
  3614.                                 msd=6;
  3615.                                 TR0=0;                                  //关闭定时器显示扫描
  3616.                                 TR1=0;
  3617.                         //        EA=0;
  3618.                                 ET0=0;
  3619.                                 IRInit();  
  3620.                                  flash_20();         //第一个面屏幕上下拉开
  3621.                                 flash_21();         //从后面往前面显示数组的数字9-0
  3622.                                 flash_22();         //围绕着最外面的LED循环滚动显示数组中内容
  3623.                                 flash_23();         //分层升降左右上下前后以此打开升降测试
  3624.                                  flash_24();  //从最上面的一个面往下面的一层移动完
  3625.                                  flash_25();         //光立方全亮并且闪烁5次
  3626.                                  flash_26();  //从下面往上面依次显示出数组中的内容IXU
  3627.                                  flash_27();         //狼七八咋的显示出LED的每一个灯展示灯火效果
  3628.                                  flash_28();         //显示从上面往下面滴水的效果
  3629.                                  flash_29();         //将4个面围城圈圈然后旋转几次
  3630.                                  flash_30();         //空心显示将数组内容打印出来可以打印4个数组内容
  3631.                                  flash_31();         //将左右的四个面围绕成圈圈转起来4次之后从左边往右边显示数组中一幅图像64个的数据
  3632.                                  flash_32();         //从左边显示一个面然后旋转出一个面的空心效果实心效果
  3633.                                  flash_33();         //旋转单个面依次交换到买一个面
  3634.                                  flash_34();         //以中点位轴进行选择左右旋转切换实现波纹的效果
  3635.                                  flash_35();         //旋转左右为中心加快速度实现每个面的抖动效果
  3636.                                 flash_36();         //将数组中的内容显示出现进行旋转是一个正方形的
  3637.                                 flash_37();         //将方形变形缩小然后变成一个全亮的效果
  3638.                                 flash_38();         //前后左右上下伸缩全亮
  3639.                                 flash_39();         //实心和空心缩放和放大正方形全亮显示
  3640.                                 flash_40();         //动画显示一个数组里面的心形数据 会动的心形
  3641.                                 flash_41();         //显示一个电梯的图形
  3642.                                 flash_42();         //显示数字往上移动出来
  3643.                                 flash_15();  //显示下雨的效果
  3644.                                    msd=2;                       
  3645.                                 TR0=1;
  3646.                                 TR1=1;               
  3647.                                 //EA=1;
  3648.                                 ET0=1;
  3649.                
  3650.                 //显示中有些动画包含本店的数据如果不需要请自己将动画函数屏蔽
  3651.                 //flash_14();flash_18();flash_12();
  3652.                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3653.                                 else{if(key2==3){msd=3;break;}}}else{flash_1();}//包含第一个面显示4321倒计时的文字
  3654.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3655.                                 else{if(key2==3){msd=3;break;}}}else{flash_17();}//显示出一个VI的版本标志然后从最里面往外面滚动出来
  3656.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3657.                                 else{if(key2==3){msd=3;break;}}}else{flash_16();}//从边边的左右中滚动显示默认的英文字母ideasoft
  3658.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3659.                                 else{if(key2==3){msd=3;break;}}}else{flash_14();}//一个一个的字变出来显示上升沿电子光立方可以修改显示数据
  3660.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3661.                                 else{if(key2==3){msd=3;break;}}}else{flash_18();}//显示出上升沿电子8X8X8光立方下雨效果飘出字移动出去
  3662.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3663.                                 else{if(key2==3){msd=3;break;}}}else{flash_2();}//图形圈圈显示出来
  3664.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3665.                                 else{if(key2==3){msd=3;break;}}}else{flash_3();}//从前一排显示到后面一排两次
  3666.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3667.                                 else{if(key2==3){msd=3;break;}}}else{flash_4();}//从前一排斜杆到最后一排两次
  3668.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3669.                                 else{if(key2==3){msd=3;break;}}}else{flash_5();}//框框伸缩从中间到前面到后面
  3670.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3671.                                 else{if(key2==3){msd=3;break;}}}else{flash_6();}//滚四边的圈圈然后下雨效果飘出字移动出去
  3672.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3673.                                 else{if(key2==3){msd=3;break;}}}else{flash_7();}//滚四边包括前后左右滚然后出来半边三角形
  3674.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3675.                                 else{if(key2==3){msd=3;break;}}}else{flash_8();}//从左移动一排到右边中间显示文字图形
  3676.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3677.                                 else{if(key2==3){msd=3;break;}}}else{flash_9();}//从左到右边滚出斜杆然后螺旋转轴旋转框框显示方框伸缩孔空心和实心
  3678.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3679.                                 else{if(key2==3){msd=3;break;}}}else{flash_10();}//从最左小脚伸缩出框框然后变轮子前后左右上下滚动然后收缩还原
  3680.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3681.                                 else{if(key2==3){msd=3;break;}}}else{flash_11();}//象红旗一样被风飘动象蛇一样飘动走动
  3682.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3683.                                 else{if(key2==3){msd=3;break;}}}else{flash_12();}//滚动上升沿电子的字模数据文字移动显示出来
  3684.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3685.                                 else{if(key2==3){msd=3;break;}}}else{flash_13();}//渐变出来文字VI1234IXU的图案
  3686.                                                 if(key2==1||key2==3){if(key2==1){msd=1;break;}
  3687.                                 else{if(key2==3){msd=3;break;}}}else{flash_19();}//平行滑动显示出3D CULE FFT的字?
  3688.                                 TR0=0;       
  3689.                                 TR1=0;               
  3690.                                 //EA=0;
  3691.                                 ET0=0;
  3692.                                 IRInit();  
  3693.                                 PWM_POW=0;
  3694.                         }
  3695.                 }
  3696.                 if(msd==3)         
  3697.                 {
  3698.                         key3=3;                               
  3699.                         TR0=0;
  3700.                         TR1=0;                         
  3701.                         EA=0;
  3702.                         IRInit();  
  3703.                         xsdsq=1;
  3704.                         hy(number+(36+3)*8,10);
  3705.                         W_side(number+(36+3)*8,1,200);       
  3706.                         xsdsq=0;
  3707.                         PWM_POW=0;
  3708.                         init_uart();
  3709.                            test=2;
  3710.                    while(1)
  3711.                    {
  3712.                                 fvb();
  3713.                                 if(key2==1||key2==2){if(key2==1){msd=1;break;}
  3714.                              else{if(key2==2){msd=2;break;}}}
  3715.                         }
  3716.                 }
  3717.         }
  3718. }

  3719. /*******************红外***************************************/
  3720. void IR_IN(void) interrupt 0
  3721. {
  3722.           
  3723.   unsigned char j,k,N=0;                  
  3724.      EX0 = 0;
  3725.          IRdelay(15);
  3726.          if (IRIN==1)
  3727.      { EX0 =1;
  3728.            return;
  3729.           }
  3730.                            //确认IR信号出现
  3731.   while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。
  3732.     {IRdelay(1);}

  3733. for (j=0;j<4;j++)         //收集四组数据
  3734. {
  3735.   for (k=0;k<8;k++)        //每组数据有8位
  3736.   {
  3737.    while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
  3738.      {IRdelay(1);}
  3739.     while (!IRIN)          //等 IR 变为高电平
  3740.      {IRdelay(1);}
  3741.      while (IRIN)           //计算IR高电平时长
  3742.       {
  3743.     IRdelay(1);
  3744.     N++;           
  3745.     if (N>=30)
  3746.          { EX0=1;
  3747.          return;}                  //0.14ms计数过长自动离开。
  3748.       }                        //高电平计数完毕               
  3749.      IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补“0”
  3750.      if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  //数据最高位补“1”
  3751.      N=0;
  3752.   }
  3753. }
  3754.    
  3755.    if (IRCOM[2]!=~IRCOM[3])
  3756.    { EX0=1;
  3757.      return; }

  3758.    IRCOM[5]=IRCOM[2] & 0x0F;     //取键码的低四位
  3759.    IRCOM[6]=IRCOM[2] >> 4;       //右移4次,高四位变为低四位

  3760.    if(IRCOM[5]>9)
  3761.     { IRCOM[5]=IRCOM[5]+0x37;}
  3762.    else
  3763.           IRCOM[5]=IRCOM[5]+0x30;

  3764.    if(IRCOM[6]>9)
  3765.     { IRCOM[6]=IRCOM[6]+0x37;}
  3766.    else
  3767.           IRCOM[6]=IRCOM[6]+0x30;

  3768.          if(IRCOM[2]==0x45)
  3769.          {
  3770.                  m=1; //判断显示
  3771.                  if(msd==1||msd==2){TR0=0;}         
  3772.                  PWM_POW=1;      
  3773.                  delay10us();        delay10us();delay10us();delay10us();        delay10us();delay10us();
  3774.                  PWM_POW=0;                           
  3775.                  if(test==1){key1=4;}
  3776.                  if(test==2){pu=~pu;if(pu==1){key2=4;ld=500;}if(pu==0){key2=5;ld=20;}}                  
  3777.                  if(msd==1||msd==2){TR0=1;}                          
  3778.          }
  3779.           
  3780.          if(IRCOM[2]==0x46)
  3781.          {
  3782.                  m=2; //判断显示
  3783.                 
  3784.          }          
  3785.          if(IRCOM[2]==0x47)
  3786.          {
  3787.                  if(msd==1||msd==2){TR0=0;}
  3788.                  PWM_POW=1;      
  3789.                    delay10us();        delay10us();delay10us();delay10us();        delay10us();delay10us();
  3790.                    PWM_POW=0;
  3791.                 if(test==1){key1=1;}
  3792.                 if(test==2){key2=3;}
  3793.                   
  3794.                 if(msd==1||msd==2){TR0=1;}       
  3795.          }
  3796.          if(IRCOM[2]==0x44)
  3797.          {
  3798.                  m=3; //判断显示
  3799.                  if(msd==1||msd==2){TR0=0;}
  3800.                 PWM_POW=1;      
  3801.                    delay10us();        delay10us();delay10us();delay10us();        delay10us();delay10us();
  3802.                    PWM_POW=0;
  3803.                 if(test==1){key1=2;}
  3804.                 if(test==2){key2=2;}
  3805.                   
  3806.                 if(msd==1||msd==2){TR0=1;}       
  3807.          }
  3808.          
  3809.          if(IRCOM[2]==0x40)
  3810.          {
  3811.                  m=5; //判断显示
  3812.                 if(msd==1||msd==2){TR0=0;}
  3813.                 PWM_POW=1;      
  3814.                 delay10us();        delay10us();delay10us();delay10us();        delay10us();delay10us();
  3815.                 PWM_POW=0;
  3816.                 if(test==1){key1=3;}
  3817.                 if(test==2){key2=1;}                  
  3818.                 if(msd==1||msd==2){TR0=1;}       
  3819.          }
  3820.          
  3821.          if(IRCOM[2]==0x43) m=6; //判断显示
  3822.          if(IRCOM[2]==0x07) m=7; //判断显示
  3823.          if(IRCOM[2]==0x15) m=8; //判断显示
  3824.          if(IRCOM[2]==0x09) m=9; //判断显示
  3825.          if(IRCOM[2]==0x16) shuzi1++; //判断显示
  3826.          if(IRCOM[2]==0x19) shuzi1++; //判断显示
  3827.          if(IRCOM[2]==0x0d) m=10; //判断显示
  3828.          if(IRCOM[2]==0x0c) m=11; //判断显示
  3829.          if(IRCOM[2]==0x18) m=12; //判断显示
  3830.          if(IRCOM[2]==0x5e) m=13; //判断显示
  3831.          if(IRCOM[2]==0x08) m=14; //判断显示
  3832.          if(IRCOM[2]==0x1c) m=15; //判断显示
  3833.          if(IRCOM[2]==0x5a) m=16; //判断显示
  3834.          if(IRCOM[2]==0x42) m=17; //判断显示
  3835.          if(IRCOM[2]==0x52) m=18; //判断显示
  3836.          if(IRCOM[2]==0x4a) m=19; //判断显示

  3837.      EX0 = 1;
  3838. }
复制代码

所有资料51hei提供下载:
光立方.zip (4.36 MB, 下载次数: 78)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:416364 发表于 2019-3-3 20:03 | 显示全部楼层
楼主你的源代码转换不了HEX格式怎么回事,麻烦看一下
回复

使用道具 举报

ID:432687 发表于 2019-4-22 08:43 来自手机 | 显示全部楼层
灵感和学习效果的完美页面..我对这项创新感到非常惊讶好主意,和我们在一起!不幸的是,我不懂你的语言,我严重依赖翻译。谢谢分享。
回复

使用道具 举报

ID:518387 发表于 2019-4-22 10:42 | 显示全部楼层
谢谢分享!
回复

使用道具 举报

ID:628602 发表于 2019-10-23 03:28 | 显示全部楼层
非常好的一篇帖子,学到了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表