找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1513|回复: 2
收起左侧

YL-236试验台 题目《产品包装控制》

[复制链接]
回帖奖励 15 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
ID:272089 发表于 2018-10-28 08:16 | 显示全部楼层 |阅读模式
  1. #include<reg51.h>
  2. #include<intrins.h>

  3. #define uchar unsigned char
  4. #define uint  unsigned int

  5. void delay(uint i){while(i--);}

  6. sbit cs1=P2^0; sbit cs2=P2^1;sbit en=P2^2;sbit rw=P2^3;
  7. sbit rs=P2^4;  sbit wr=P2^5; sbit LED=P2^6; sbit f=P2^7;

  8. sbit wl1=P1^0;sbit wl2=P1^1;sbit wl3=P1^2;sbit wl4=P1^3;
  9. sbit wl5=P1^4;sbit wl6=P1^5;sbit wl7=P1^6;sbit col0=P1^7;


  10. sbit col1=P3^0;sbit col2=P3^1;sbit col3=P3^2;
  11. sbit w1=P3^3; sbit w2=P3^4;sbit w3=P3^5;
  12. sbit w4=P3^6;sbit w5=P3^7;

  13. sbit row0=P0^0;sbit row1=P0^1;sbit row2=P0^2;sbit row3=P0^3;

  14. #define zuo    {w1=0;w2=1;}
  15. #define you    {w1=1;w2=0;}
  16. #define stop   {w1=1;w2=1;}
  17. #define jia    {w3=0;w4=1;}
  18. #define song   {w3=1;w4=0;}
  19. #define shang  {w5=1;}
  20. #define xia    {w5=0;}

  21. uchar code ledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
  22.                       0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x19,0x10,
  23.                                           0xbf,0xff};
  24. uchar buf[8];


  25. uchar code zm16x16l[]="产品手动包装控制白黄色工作状态左右移上升下降故障";
  26. uchar code zm16x16[][32]=
  27. {
  28. /*--  文字:  产  --*/
  29. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  30. 0x00,0x04,0xE4,0x44,0x4C,0x74,0x54,0x45,0x46,0x64,0x54,0x4C,0x44,0x64,0x44,0x00,
  31. 0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  32. /*--  文字:  品  --*/
  33. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  34. 0x00,0x00,0x00,0x00,0x7E,0x22,0x22,0x22,0x22,0x22,0x22,0x7E,0x00,0x00,0x00,0x00,
  35. 0x00,0x7F,0x21,0x21,0x21,0x21,0x7F,0x00,0x7F,0x21,0x21,0x21,0x21,0x7F,0x00,0x00,

  36. /*--  文字:  手  --*/
  37. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  38. 0x00,0x24,0x24,0x24,0x24,0x24,0x24,0xFE,0x22,0x22,0x22,0x22,0x22,0x20,0x00,0x00,
  39. 0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,

  40. /*--  文字:  动  --*/
  41. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  42. 0x20,0x24,0x24,0xE4,0x24,0x24,0x24,0x20,0x10,0x10,0xFF,0x10,0x10,0xF0,0x00,0x00,
  43. 0x08,0x1C,0x0B,0x08,0x0C,0x05,0x4E,0x24,0x10,0x0C,0x03,0x20,0x40,0x3F,0x00,0x00,

  44. /*--  文字:  包  --*/
  45. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  46. 0x80,0x40,0x20,0xD8,0x4F,0x4A,0x48,0x48,0x48,0xC8,0x08,0x08,0xFC,0x08,0x00,0x00,
  47. 0x00,0x00,0x00,0x3F,0x42,0x42,0x42,0x42,0x42,0x43,0x48,0x50,0x4F,0x40,0x70,0x00,

  48. /*--  文字:  装  --*/
  49. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  50. 0x00,0x42,0x2C,0x24,0x10,0xFF,0x04,0x64,0xA4,0x24,0x3F,0x24,0x24,0x24,0x04,0x00,
  51. 0x20,0x21,0x11,0x11,0xF9,0x45,0x23,0x03,0x05,0x09,0x11,0x29,0x45,0xC1,0x41,0x00,

  52. /*--  文字:  控  --*/
  53. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  54. 0x08,0x08,0x08,0xFF,0x88,0x48,0x00,0x98,0x48,0x28,0x0A,0x2C,0x48,0xD8,0x08,0x00,
  55. 0x02,0x42,0x81,0x7F,0x00,0x00,0x40,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x40,0x00,

  56. /*--  文字:  制  --*/
  57. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  58. 0x00,0x50,0x4F,0x4A,0x48,0xFF,0x48,0x48,0x48,0x00,0xFC,0x00,0x00,0xFF,0x00,0x00,
  59. 0x00,0x00,0x3F,0x01,0x01,0xFF,0x21,0x61,0x3F,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,

  60. /*--  文字:  白  --*/
  61. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  62. 0x00,0x00,0xF8,0x08,0x08,0x0C,0x0B,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,
  63. 0x00,0x00,0x7F,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x7F,0x00,0x00,0x00,

  64. /*--  文字:  黄  --*/
  65. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  66. 0x20,0x24,0x24,0xA4,0xA4,0xBF,0xA4,0xE4,0xA4,0xBF,0xA4,0xA4,0x24,0x24,0x20,0x00,
  67. 0x00,0x80,0x80,0x5F,0x32,0x12,0x12,0x1F,0x12,0x12,0x32,0x5F,0xC0,0x00,0x00,0x00,

  68. /*--  文字:  色  --*/
  69. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  70. 0x00,0x40,0x20,0xF0,0x28,0x27,0x24,0xE4,0x24,0x34,0x2C,0xE4,0x00,0x00,0x00,0x00,
  71. 0x00,0x00,0x00,0x3F,0x42,0x42,0x42,0x43,0x42,0x42,0x42,0x43,0x40,0x78,0x00,0x00,

  72. /*--  文字:  工  --*/
  73. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  74. 0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
  75. 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,

  76. /*--  文字:  作  --*/
  77. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  78. 0x80,0x40,0x20,0xF8,0x07,0x22,0x18,0x0C,0xFB,0x48,0x48,0x48,0x68,0x48,0x08,0x00,
  79. 0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x04,0x04,0x04,0x04,0x06,0x04,0x00,

  80. /*--  文字:  状  --*/
  81. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  82. 0x08,0x30,0x00,0xFF,0x20,0x20,0x20,0x20,0xFF,0x20,0xE1,0x26,0x2C,0x20,0x20,0x00,
  83. 0x04,0x02,0x01,0xFF,0x40,0x20,0x18,0x07,0x00,0x00,0x03,0x0C,0x30,0x60,0x20,0x00,

  84. /*--  文字:  态  --*/
  85. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  86. 0x00,0x04,0x04,0x04,0x84,0x44,0x34,0x4F,0x94,0x24,0x44,0x84,0x84,0x04,0x00,0x00,
  87. 0x00,0x60,0x39,0x01,0x00,0x3C,0x40,0x42,0x4C,0x40,0x40,0x70,0x04,0x09,0x31,0x00,

  88. /*--  文字:  左  --*/
  89. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  90. 0x08,0x08,0x08,0x08,0x08,0xC8,0x3F,0x0A,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
  91. 0x40,0x20,0x50,0x4C,0x43,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x40,0x00,

  92. /*--  文字:  右  --*/
  93. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  94. 0x08,0x08,0x08,0x88,0xC8,0x38,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
  95. 0x04,0x02,0x01,0x00,0x7F,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x7F,0x00,0x00,0x00,

  96. /*--  文字:  移  --*/
  97. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  98. 0x10,0x92,0x72,0xFE,0x91,0x19,0x90,0x88,0x44,0x53,0xA2,0x52,0x0A,0x06,0x00,0x00,
  99. 0x02,0x01,0x00,0xFF,0x00,0x81,0x88,0x44,0x46,0x29,0x11,0x09,0x05,0x03,0x01,0x00,

  100. /*--  文字:  上  --*/
  101. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  102. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
  103. 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00,

  104. /*--  文字:  升  --*/
  105. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  106. 0x00,0x40,0x44,0x44,0x44,0xFE,0x42,0x42,0x40,0x40,0xFE,0x40,0x40,0x60,0x40,0x00,
  107. 0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,

  108. /*--  文字:  下  --*/
  109. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  110. 0x00,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x22,0x62,0xC2,0x82,0x02,0x03,0x02,0x00,
  111. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,

  112. /*--  文字:  降  --*/
  113. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  114. 0x00,0xFE,0x22,0x5A,0x86,0x00,0x48,0x44,0x2B,0xD2,0x2A,0x26,0x42,0x40,0x40,0x00,
  115. 0x00,0xFF,0x02,0x04,0x03,0x00,0x0D,0x09,0x09,0xFF,0x09,0x09,0x09,0x08,0x00,0x00,

  116. /*--  文字:  故  --*/
  117. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  118. 0x10,0x90,0x90,0xFF,0x90,0x90,0x10,0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x10,0x00,
  119. 0x00,0x3F,0x10,0x10,0x10,0x5F,0x41,0x20,0x20,0x13,0x0C,0x13,0x20,0x60,0x20,0x00,

  120. /*--  文字:  障  --*/
  121. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  122. 0x00,0xFE,0x22,0x5A,0x86,0x10,0xD2,0x56,0x5A,0x53,0x52,0x5A,0xD6,0x12,0x10,0x00,
  123. 0x00,0xFF,0x02,0x04,0x13,0x10,0x17,0x15,0x15,0xFD,0x15,0x15,0x17,0x10,0x10,0x00,

  124. };


  125. uchar code zm8x16l[]="0123456789";
  126. uchar code zm8x16[][16]=
  127. {
  128. /*--  文字:  0  --*/
  129. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  130. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,

  131. /*--  文字:  1  --*/
  132. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  133. 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,

  134. /*--  文字:  2  --*/
  135. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  136. 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,

  137. /*--  文字:  3  --*/
  138. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  139. 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,

  140. /*--  文字:  4  --*/
  141. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  142. 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,

  143. /*--  文字:  5  --*/
  144. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  145. 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,

  146. /*--  文字:  6  --*/
  147. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  148. 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,

  149. /*--  文字:  7  --*/
  150. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  151. 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,

  152. /*--  文字:  8  --*/
  153. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  154. 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,

  155. /*--  文字:  9  --*/
  156. /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  157. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
  158. };

  159. /*  键盘扫描 */
  160. uchar key()
  161. {
  162.     uchar k=25;
  163.     row0=0;  k=col0==0?0:col1==0?1:col2==0?2:col3==0?3:k;       row0=1;
  164.         row1=0;  k=col0==0?4:col1==0?5:col2==0?6:col3==0?7:k;       row1=1;
  165.         row2=0;  k=col0==0?8:col1==0?9:col2==0?10:col3==0?11:k;     row2=1;
  166.         row3=0;  k=col0==0?12:col1==0?13:col2==0?14:col3==0?15:k;   row3=1;
  167.         return k;
  168. }

  169. /*  写命令  */
  170. void wc(uchar com)
  171. {
  172.     rs=0;rw=0;
  173.         P0=com;
  174.         en=1;en=0;
  175. }
  176. /*  写数据     */
  177. void wd(uchar dat)
  178. {
  179.     rs=1;rw=0;
  180.         P0=dat;
  181.         en=1;en=0;
  182. }
  183. /* 清屏 */
  184. void clr()
  185. {
  186.     uchar i,j;
  187.         cs1=cs2=1;
  188.         for(i=0;i<8;i++)
  189.         {
  190.             wc(0xb8+i);
  191.                 wc(0x40);
  192.                 for(j=0;j<64;j++)wd(0);
  193.         }
  194. }
  195. /* 12864初始化 */
  196. void init()
  197. {
  198.    wc(0x3f);
  199.    wc(0xc0);
  200.    clr();
  201. }
  202. /* 显示任意字模 */
  203. void showxy(uchar row,uchar col,uchar x,uchar y,uchar *tab)
  204. {
  205.     bit right;
  206.         uchar i,j;
  207.         if(col<64){right=0;}
  208.         else {col-=64;right=1;}
  209.         for(i=0;i<y;i++)
  210.         {
  211.             if(right)cs1=0,cs2=1;
  212.                 else cs1=1,cs2=0;
  213.                 wc(0xb8+row+i);
  214.                 wc(0x40+col);
  215.                 for(j=0;j<x;j++)
  216.                 {
  217.                     if(col+j<64)wd(tab[i*x+j]);
  218.                         else if(right==0)
  219.                         {
  220.                             cs1=0,cs2=1;
  221.                                 wc(0xb8+row+i);
  222.                                 wc(0x40+(col+j-64));
  223.                                 wd(tab[i*x+j]);
  224.                         }
  225.                 }
  226.         }
  227. }
  228. /*  8x16的索引 */
  229. uchar enn(uchar *s)
  230. {
  231.     uchar i;
  232.         for(i=0;zm8x16l[i]!=0;i++)if(zm8x16l[i]==s[0])break;
  233.         return i;
  234. }
  235. /*  16x16的索引 */
  236. uchar cnn(uchar *s)
  237. {
  238.     uchar i;
  239.         for(i=0;zm16x16l[i]!=0;i+=2)
  240.            if(zm16x16l[i]==*s&&zm16x16l[i+1]==*(s+1))break;
  241.         return i/2;
  242. }
  243. /*  显示8x16及16x16的索引  */
  244. void showstr(uchar row,uchar col,uchar *s)
  245. {
  246.          uchar i;
  247.          for(i=0;s[i]!=0;i++)
  248.          {
  249.              if(s[i]<0x80)
  250.                  {
  251.                       showxy(row,col,8,2,zm8x16[enn(&s[i])]);
  252.                           col+=8;
  253.                  }
  254.                  else
  255.                  {
  256.                       showxy(row,col,16,2,zm16x16[cnn(&s[i])]);
  257.                           col+=16;i+=1;
  258.                  }
  259.                  if(col>120)
  260.                  {
  261.                       col=0;row+=2;
  262.                  }
  263.          }
  264. }
  265. /*  数码管的驱动  */
  266. void dis()
  267. {
  268.     uchar i,j=0x7f;
  269.         for(i=0;i<8;i++)
  270.         {
  271.             cs1=0;cs2=1;
  272.                 P0=ledcode[buf[i]];wr=1;wr=0;
  273.                 cs1=1;cs2=0;
  274.                 P0=j;wr=1;wr=0;
  275.                 delay(40);
  276.                 j=(j>>1)|0x80;
  277.                 cs1=cs2=0;
  278.                 P0=0xff;wr=1;wr=0;
  279.         }
  280. }

  281. bit runflag=1,timeflag=1,timesz,keyflag,dian,stopflag=1;                  //运行,时间,时间设置,按键,小数点,停止的标志
  282. uchar bs=0,hs=0,sec,min;                                                                                  //白色球,黄色球,秒,分的定义
  283. uchar n=0,moveflag,flag;                                                                      //n是机械手工步,moveflag是工作状态标志,flag夹球颜色判断,


  284. void ka()                                                                                                   //键值和控制设置
  285. {
  286.         uchar i,k;
  287.         if(key()!=25&&keyflag==0)
  288.         {
  289.             keyflag=1;
  290.             if(key()==13&&runflag==1&&timeflag==1)
  291.                 {
  292.                     while(key()==13);
  293.                         bs++;                                                                                //白色球设置
  294.                         if(bs>10)bs=0;                                                                //到10就归0
  295.                 }
  296.                 if(key()==14&&runflag==1&&timeflag==1)
  297.                 {
  298.                     while(key()==14);
  299.                         hs++;                                                                                 //黄色球设置
  300.                         if(hs>10)hs=0;                                                                 //到时就归零
  301.                 }

  302.                 if(key()==12)timesz=1;                                                         //时间设置按钮被按下

  303.                         if(key()<10&×z==1)                                                 //键盘值小于十
  304.                         {
  305.                            k=key();       
  306.                            for(i=0;i<7;i++)buf[i]=buf[i+1];                         //buf[7]显示当前数值,将之前的数值往前推
  307.                            buf[7]=k;
  308.                         }
  309.                             else if(key()==10&&dian==1)                                 //按键按下小数点,并且没有重复按下
  310.                                 {
  311.                                     dian=0;
  312.                                     buf[7]=buf[7]+10;                                         //将原来的数值加上十,就成为了有小数点的数
  313.                                 }
  314.                                    if(buf[7]<10)dian=1;

  315.                         min=buf[5]-10;                                                                 //分的取值
  316.                         sec=buf[6]*10+buf[7];                                                 //秒的取值


  317.                 if(key()==11&×z==1&&(bs!=0||hs!=0)&&(sec!=0||min!=0))                //按下运行键,时间被设置完成,球的数量也被设置完成
  318.                 {
  319.                     runflag=0;                                                                                                        //运行标志变为 0 表示在运行
  320.                         stopflag=1;                                                                                                        //停止标志置 1
  321.                 }
  322.                 if(runflag==0&&key()==15)stopflag=0;                                                        //按下暂停键,停止标志置 0
  323.                 if(stopflag==0){stop;runflag=1;}                                                                //停止,并且运行键置 1
  324.         }
  325.                                                                                                                         //按键松开或没有按下的标志
  326.         if(key()==25)keyflag=0;
  327. }


  328. void jxs()                                                                                                   //机械手运行函数
  329. {
  330.     switch(n)
  331.         {
  332.             case 0:
  333.                      if(wl5){xia;moveflag=4;break;}                                   //左移并显示
  334.                          n=1;
  335.                 case 1:
  336.                      delay(20000);                                                                   //延时0.2秒等待机械手判断
  337.                          n=2;
  338.                 case 2:
  339.                      if(wl7==0)flag=0;                                               //flag=0是黄色,白色相反
  340.                          else flag=1;
  341.                          n=3;
  342.                 case 3:
  343.                      if(wl6){jia;break;}                                                   //夹球
  344.                          n=4;
  345.                 case 4:
  346.                      if(wl6==0){n=5;break;}                                                   //夹紧就下一步
  347.                          else {moveflag=5;break;}                      //故障显示
  348.                 case 5:
  349.                      if(wl4){shang;moveflag=3;break;}                           //上升并显示
  350.                          n=6;
  351.                 case 6:
  352.                      if(wl3){zuo;moveflag=1;break;}                                   //左移并显示
  353.                          stop;
  354.                          n=7;
  355.                 case 7:
  356.                      if(wl6==0){song;break;}                                           //松球
  357.                          if(flag==0)hs--;                                                           //减少黄球数
  358.                          else bs--;                                                                           //减少白球数
  359.                          n=8;
  360.                 case 8:
  361.                      if(wl1){you;moveflag=2;break;}                                   //右移并显示
  362.                          stop;
  363.                          if(bs==0&&hs==0){runflag=1;moveflag=6;}           //运球完成 开始包装
  364.                          n=0;
  365.         }
  366. }  

  367. void init1()                                                                                          //初始化函数a
  368. {
  369.    TMOD=0x01;
  370.    EA=ET0=1;
  371.    init();
  372.    showstr(0,0,"产品手动包装控制");                                                   //12864显示
  373.    buf[0]=buf[1]=buf[2]=buf[3]=20;                                                   //显示 ---------
  374.    buf[4]=buf[5]=buf[6]=buf[7]=20;
  375.    while(wl1)you;                                                                                   //机械手归位
  376.    stop;                                                                                                   //移到一工位停止
  377.    song;                                                                                                   //松开爪子
  378.    delay(50000);                                                                                  
  379.    showstr(3,0,"白色");                                                                           //12864显示
  380.    showstr(3,64,"黄色");
  381. }

  382. void main()                                                                                                   //主函数
  383. {                                                                                                                       
  384.    uchar z,x;                                                                                           //蜂鸣器及灯的闪烁
  385.    end:
  386.    init1();
  387.    while(1)
  388.    {
  389.         showxy(3,40,8,2,zm8x16[bs%10]);                                           //白球数量显示
  390.                 showxy(3,104,8,2,zm8x16[hs%10]);                                   //黄球数量显示

  391.                 ka();                                                                                          

  392.         if(runflag==0)                                                                           //系统运行
  393.                 {                                                                                                   //定时器开
  394.                    TR0=1;                                                                                   //时间设置置 1
  395.                    timesz=1;                                                                           //机械手开启
  396.                    jxs();                                                                                  
  397.                    buf[5]=min%10+10;                                                            //时间倒计时显示
  398.                    buf[6]=sec/10%10;
  399.                    buf[7]=sec%10;

  400.                    /*   工作状态显示   */
  401.                    showstr(6,0,"工作状态");
  402.                    if(moveflag==1)showstr(6,80,"左移");
  403.                    else if(moveflag==2)showstr(6,80,"右移");
  404.                    else if(moveflag==3)showstr(6,80,"上升");
  405.                    else if(moveflag==4)showstr(6,80,"下降");
  406.                    else if(moveflag==5)                                                                  //故障报警
  407.                    {
  408.                         showstr(6,80,"故障");                                                  //蜂鸣器以1秒五个周期报警
  409.                                 delay(10000);
  410.                             f=!f;
  411.                    }

  412.                    if(sec==0&&min==0){runflag=1;stop;}               //时间到就停止         
  413.                 }

  414.                 /*  抓球结束  */
  415.                 if(moveflag==6)                                                                                 //包装  
  416.                 {
  417.                    showstr(6,80,"包装");
  418.                    for(z=0;z<40;z++)                                                                 //循环二十秒
  419.                    {
  420.                        delay(25550);
  421.                            f=!f;                                                                                 //蜂鸣器一秒一周期
  422.                            for(x=0;x<2;x++)
  423.                            {
  424.                                delay(25550);
  425.                                    LED=!LED;                                                                 //LED0一秒两周期
  426.                            }
  427.                    }
  428.                    moveflag=0;                                                                                 //完成所有操作回到初始化
  429.                    goto end;
  430.                 }
  431.                dis();
  432.    }
  433. }

  434. void time() interrupt 1                                                                                 //定时1
  435. {
  436.     TH0=0xfc;
  437.         TL0=0x17;
  438.         if(++c==1000)                                                                                          //运行时分秒的运行
  439.         {
  440.                c=0;
  441.                    sec--;
  442.                    if(sec==0&&min>0)
  443.                    {
  444.                         sec=60;
  445.                                 min--;
  446.                    }
  447.         }
  448. }
复制代码


评分

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

查看全部评分

回复

使用道具 举报

ID:88049 发表于 2019-5-28 18:43 | 显示全部楼层
厉害了
回复

使用道具 举报

ID:523982 发表于 2022-12-5 22:31 | 显示全部楼层
不错不错,有任务书更好了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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