找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2128|回复: 0
打印 上一主题 下一主题
收起左侧

单片机做的切断机

[复制链接]
跳转到指定楼层
楼主
本程序可以设置切断物品的长度(mm),批次。速度。每批次切断的数量。
名称:切管机

功能:可设置长度.速度,批次,产量
    12864显示
    24C02存储

编写:鞠宝伦
版本:I
编写日期:2016.03.025
修改:无
修改日期:无

  1. #include<reg52.h>
  2. #include"12864.h"
  3. #include"delay.h"
  4. #include"i2c.h"
  5. #include"def.h"

  6. //uchar fer[4];
  7. #define  AT24C02 0xa0  //AT24C02 地址  这个地址是自己设置的 全局宏定义
  8. //unsigned char xdata fer[40];  //外部数据存储器
  9. sbit set=P3^2;//设置。
  10. sbit up=P3^3;//加.
  11. sbit down=P3^4;//减.
  12. sbit strat=P3^5;//启动.

  13. uchar set_num=0;
  14. uint Changdu=10,pici=10,sudu=10,Changdu1=0,pici1=0,sudu1=0,mcsl=10;
  15. uint i=0,o=0,k=0,count,cou=0;

  16. uchar FFW_flag=0;
  17. //uchar REV_flag=0;
  18. uchar stop_flag=0;
  19. uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
  20. //uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};

  21. uchar code lineA_data[]={"    福泰克      "};
  22. uchar code lineB_data[]={"  电子有限公司  "};
  23. uchar code lineC_data[]={"  我爱单片机    "};
  24.                                           
  25. uchar code line0_data[]={"长度:     mm    "};
  26. uchar code line1_data[]={"切断: 000/    次"};
  27. uchar code line2_data[]={"速度:     r/s   "};
  28. uchar code line3_data[]={"产量: 000/   PCS"};

  29. uchar code linea0_data[]={"长度设定:     mm"};//长度设定。
  30. uchar code linea1_data[]={"切断批次:     次"};//批次设定
  31. uchar code linea2_data[]={"速度设定:     rs"};//速度设定。
  32. uchar code linea3_data[]={"产量设定:    pcs"};        //计数器
  33.                                                                             
  34. /////////////////////////////////////////////////////////
  35. void  lcd_pos(uchar X,uchar Y)
  36. {                          
  37.   uchar  pos;
  38.   if (X==1) {X=0x80;}
  39.   else if (X==2) {X=0x90;}
  40.   else if (X==3) {X=0x88;}
  41.   else if (X==4) {X=0x98;}
  42.   pos = X+Y ;
  43.   lcd_wcmd(pos);     //显示地址
  44. }
  45. /////////////////////////////////////////////////////////////
  46. void Changdu_display()          //长度
  47. {       
  48.         lcd_wdat(Changdu/100%10+0x30);
  49.         lcd_wdat(Changdu/10%10+0x30);
  50.         lcd_wdat(Changdu%10+0x30);
  51. }
  52. void  pici_display()          //批次       
  53. {       
  54.         lcd_wdat(pici/100%10+0x30);
  55.         lcd_wdat(pici/10%10+0x30);
  56.         lcd_wdat(pici%10+0x30);
  57. }
  58. void sudu_display()           //速度
  59. {
  60. //        lcd_wdat(sudu/100%10+0x30);
  61.         lcd_wdat(sudu/10%10+0x30);
  62.         lcd_wdat(sudu%10+0x30);
  63. }
  64. void count_display()         //延时时间
  65. {       
  66.         lcd_wdat(count/100%10+0x30);
  67.         lcd_wdat(count/10%10+0x30);
  68.         lcd_wdat(count%10+0x30);
  69. }
  70. void display()
  71. {
  72.         lcd_pos(1,5);       
  73.         lcd_wdat(Changdu/100%10+0x30);
  74.         lcd_wdat(Changdu/10%10+0x30);
  75.         lcd_wdat(Changdu%10+0x30);

  76.         lcd_pos(2,5);
  77.         lcd_wdat(pici/100%10+0x30);
  78.         lcd_wdat(pici/10%10+0x30);
  79.         lcd_wdat(pici%10+0x30);

  80.         lcd_pos(3,5);       
  81.   //  lcd_wdat(sudu/100%10+0x30);
  82.         lcd_wdat(sudu/10%10+0x30);
  83.         lcd_wdat(sudu%10+0x30);

  84.         lcd_pos(4,5);
  85.         lcd_wdat(count/100%10+0x30);
  86.         lcd_wdat(count/10%10+0x30);
  87.         lcd_wdat(count%10+0x30);


  88. }
  89. /////////////////////////////////////////////////////////////
  90. void display1()        //设置过后的数据显示
  91. {
  92.         lcd_pos(1,3);       
  93.         lcd_wdat(Changdu/100%10+0x30);
  94.         lcd_wdat(Changdu/10%10+0x30);
  95.         lcd_wdat(Changdu%10+0x30);
  96.         delay_ms(2);
  97.        
  98.         lcd_pos(2,5);
  99.         lcd_wdat(pici/100%10+0x30);
  100.         lcd_wdat(pici/10%10+0x30);
  101.         lcd_wdat(pici%10+0x30);
  102.                 delay_ms(2);
  103.         lcd_pos(2,3);
  104.         lcd_wdat(pici1/100%10+0x30);
  105.         lcd_wdat(pici1/10%10+0x30);
  106.         lcd_wdat(pici1%10+0x30);


  107.         delay_ms(2);

  108.         lcd_pos(3,3);       

  109. //        lcd_wdat(sudu/100%10+0x30);
  110.         lcd_wdat(sudu/10%10+0x30);
  111.         lcd_wdat(sudu%10+0x30);
  112.          delay_ms(2);
  113.          lcd_pos(4,3);
  114.         lcd_wdat(cou/100%10+0x30);
  115.         lcd_wdat(cou/10%10+0x30);
  116.         lcd_wdat(cou%10+0x30);
  117.         delay_ms(2);
  118.         lcd_pos(4,5);
  119.         lcd_wdat(count/100%10+0x30);
  120.         lcd_wdat(count/10%10+0x30);
  121.         lcd_wdat(count%10+0x30);
  122. }

  123. void ds_display()
  124. {
  125.         lcd_pos(1,0);
  126.         for(i=0;i<16;i++)
  127.         {
  128.                 lcd_wdat(line0_data[i]);
  129.                 delay_ms(1);
  130.         }
  131.         lcd_pos(2,0);
  132.         for(i=0;i<16;i++)
  133.         {
  134.                 lcd_wdat(line1_data[i]);
  135.                 delay_ms(1);
  136.         }
  137.         lcd_pos(3,0);
  138.         for(i=0;i<16;i++)
  139.         {
  140.                 lcd_wdat(line2_data[i]);
  141.                 delay_ms(1);
  142.         }
  143.         lcd_pos(4,0);
  144.         for(i=0;i<16;i++)
  145.         {
  146.                 lcd_wdat(line3_data[i]);
  147.                 delay_ms(1);
  148.         }
  149.        
  150. }
  151. ////////////////////////////////初始化广告图表////////////////////////////////
  152. void cs_display()
  153. {
  154.         lcd_pos(1,0);
  155.         for(i=0;i<16;i++)
  156.         {
  157.                 lcd_wdat(lineA_data[i]);
  158.                 delay_ms(1);
  159.         }
  160.         lcd_pos(2,0);
  161.         for(i=0;i<16;i++)
  162.         {
  163.                 lcd_wdat(lineB_data[i]);
  164.                 delay_ms(1);
  165.         }
  166.         lcd_pos(4,0);
  167.         for(i=0;i<16;i++)
  168.         {
  169.                 lcd_wdat(lineC_data[i]);
  170.                 delay_ms(1);
  171.         }
  172.        
  173. }
  174. ///////////////////////////////////////////////////////////////////
  175. void scankey()
  176. {       
  177.         uchar mun=0;
  178.         if(set==0)           //设置
  179.         {
  180.                 delay_ms(10);
  181.                 if(set==0)
  182.                 {
  183.                         delay_ms(10);
  184.                         while(!set);
  185.                         set_num++;
  186.                         lcd_clr();
  187.                         lcd_pos(1,0);
  188.                         for(i=0;i<16;i++)
  189.                         {
  190.                                 lcd_wdat(linea0_data[i]);
  191.                                 delay_ms(1);
  192.                         }       
  193.                         lcd_pos(2,0);
  194.                         for(i=0;i<16;i++)
  195.                         {
  196.                                 lcd_wdat(linea1_data[i]);
  197.                                 delay_ms(1);
  198.                         }       
  199.                         lcd_pos(3,0);
  200.                         for(i=0;i<16;i++)
  201.                         {
  202.                                 lcd_wdat(linea2_data[i]);
  203.                                 delay_ms(1);
  204.                         }
  205.                         lcd_pos(4,0);
  206.                         for(i=0;i<16;i++)
  207.                         {
  208.                                 lcd_wdat(linea3_data[i]);
  209.                                 delay_ms(1);
  210.                         }
  211.                         display();                                       
  212.                         if(set_num==1)
  213.                         {       
  214.                        
  215.                                 lcd_wcmd(0x0c);        //关光标关闪烁
  216.                                 lcd_pos(1,5);
  217.                                 Changdu_display();
  218.                                
  219.                                 lcd_pos(1,6);
  220.                                 lcd_wcmd(0x0f);        //开光标并闪烁
  221.                                                                
  222.                         }
  223.                         if(set_num==2)
  224.                         {
  225.                                 lcd_wcmd(0x0c);        //关光标关闪烁                               
  226.                                 lcd_pos(2,5);
  227.                                 pici_display();
  228.                                 lcd_pos(2,6);
  229.                                 lcd_wcmd(0x0f);        //开光标并闪烁                       
  230.                         }                       
  231.                         if(set_num==3)
  232.                         {
  233.                                 lcd_wcmd(0x0c);        //关光标关闪烁
  234.                                 lcd_pos(3,5);
  235.                                 sudu_display();
  236.                                 lcd_pos(3,6);
  237.                                 lcd_wcmd(0x0f);        //开光标并闪烁                       
  238.                         }
  239.                         if(set_num==4)
  240.                         {
  241.                                 lcd_wcmd(0x0c);        //关光标关闪烁
  242.                                 lcd_pos(4,5);
  243.                                 count_display();
  244.                                 lcd_pos(4,6);
  245.                                 lcd_wcmd(0x0f);        //开光标并闪烁                       
  246.                         }
  247.                        
  248.                         if(set_num==5)
  249.                         {
  250.                                 set_num=0;
  251.                                 display();
  252.                                 //display1();
  253.                                 delay_ms(5);
  254.                                 lcd_wcmd(0x0c);        //关光标关闪烁
  255.                                 write24c02(110,Changdu);
  256.                                 write24c02(111,pici);
  257.                                 write24c02(112,sudu);
  258.                                 write24c02(113,count);
  259. //                                write24c02(114,old5);
  260. //                                write24c02(115,old6);

  261.                         delay_ms(1);
  262.                         lcd_clr();
  263.                         ds_display();
  264.                         //display();
  265.                        
  266.                         display1();        //设置过后的数据显示
  267.                
  268.                         }               
  269.                
  270.                 }
  271.         }
  272.         if(set_num!=0)
  273.         {
  274.                 if(down==0)         //--
  275.                 {
  276.                         delay_ms(5);
  277.                         if(down==0)
  278.                         {       
  279.                                 if(set_num==1)
  280.                                 {  
  281.                                          Changdu--;
  282.                                          if(Changdu==0)Changdu=100;lcd_pos(1,5);Changdu_display();lcd_pos(1,6);
  283.                                 }
  284.                                 if(set_num==2)
  285.                                 {  
  286.                                          pici--;
  287.                                          if(pici==0)pici=100;lcd_pos(2,5);pici_display();lcd_pos(2,6);
  288.                                 }
  289.                                 if(set_num==3)
  290.                                 {  
  291.                                          sudu--;
  292.                                          if(sudu==0)sudu=30;lcd_pos(3,5);sudu_display();lcd_pos(3,6);
  293.                                 }
  294.                                 if(set_num==4)
  295.                                 {  
  296.                                          count--;
  297.                                          if(count==0)count=100;lcd_pos(4,5);count_display();lcd_pos(4,6);
  298.                                 }
  299.                                
  300.                                 mun=0;
  301.                                 while(!down)
  302.                                 {
  303.                                         delay_ms(5);
  304.                                         if(mun!=100)mun++;
  305.                                         else
  306.                                         {       
  307.                                                 if(set_num==1)
  308.                                                 {  
  309.                                                          Changdu--;
  310.                                                          if(Changdu==0)Changdu=100;lcd_pos(1,5);Changdu_display();lcd_pos(1,6);
  311.                                                 }
  312.                                                 if(set_num==2)
  313.                                                 {  
  314.                                                          pici--;
  315.                                                          if(pici==0)pici=100;lcd_pos(2,5);pici_display();lcd_pos(2,6);
  316.                                                 }
  317.                                                 if(set_num==3)
  318.                                                 {  
  319.                                                          sudu--;
  320.                                                          if(sudu==0)sudu=30;lcd_pos(3,5);sudu_display();lcd_pos(3,6);
  321.                                                 }
  322.                                                 if(set_num==4)
  323.                                                 {  
  324.                                                          count--;
  325.                                                          if(count==0)count=100;lcd_pos(4,5);count_display();lcd_pos(4,6);
  326.                                                 }
  327.                                                
  328.                                         }
  329.                                 }
  330.                         }        
  331.                 }
  332.                 if(up==0)         //++
  333.                 {
  334.                         delay_ms(5);
  335.                         if(up==0)
  336.                         {       
  337.                                 if(set_num==1)
  338.                                 {  
  339.                                    Changdu++;
  340.                                    if(Changdu>100)Changdu=0;lcd_pos(1,5);Changdu_display();lcd_pos(1,6);
  341.                                 }
  342.                                 if(set_num==2)
  343.                                 {  
  344.                                    pici++;
  345.                                    if(pici>100)pici=0;lcd_pos(2,5);pici_display();lcd_pos(2,6);
  346.                                 }
  347.                                 if(set_num==3)
  348.                                 {  
  349.                                    sudu++;
  350.                                    if(sudu>30)sudu=0;lcd_pos(3,5);sudu_display();lcd_pos(3,6);
  351.                                 }
  352.                                 if(set_num==4)
  353.                                 {  
  354.                                    count++;
  355.                                    if(count>100)count=0;lcd_pos(4,5);count_display();lcd_pos(4,6);
  356.                                 }
  357.                                
  358.                                 mun=0;
  359.                                 while(!up)
  360.                                 {
  361.                                         delay_ms(5);
  362.                                         if(mun!=100)mun++;
  363.                                         else
  364.                                         {       
  365.                                                 if(set_num==1)
  366.                                                 {  
  367.                                                          Changdu++;
  368.                                                          if(Changdu>100)Changdu=0;lcd_pos(1,5);Changdu_display();lcd_pos(1,6);
  369.                                                 }
  370.                                                 if(set_num==2)
  371.                                                 {  
  372.                                                          pici++;
  373.                                                          if(pici>100)pici=0;lcd_pos(2,5);pici_display();lcd_pos(2,6);
  374.                                                 }
  375.                                                 if(set_num==3)
  376.                                                 {  
  377.                                                          sudu++;
  378.                                                          if(sudu>30)sudu=0;lcd_pos(3,5);sudu_display();lcd_pos(3,6);
  379.                                                 }
  380.                                                 if(set_num==4)
  381.                                                 {  
  382.                                                          count++;
  383.                                                          if(count>100)count=0;lcd_pos(4,5);count_display();lcd_pos(4,6);
  384.                                                 }
  385.                                                
  386.                                         }
  387.                                 }
  388.                         }                
  389.             }
  390.         }
  391. }
  392. void motor_ffw()
  393. {
  394.        
  395.    //圆的周长=400脉冲=10MM  //1MM=10MM除以400脉冲=40脉冲
  396.         unsigned long zhongmaicong;        //总脉冲
  397.      uchar i;
  398.         zhongmaicong=(Changdu*40)*mcsl;//长度*1MM*每次数量
  399.         while(zhongmaicong)
  400.         {       
  401.                 P1=FFW[i];
  402.                 delay_ms(sudu);
  403.                 i++;k++;o++;
  404.                 if(i==8)i=0;
  405.                 if(o==Changdu*40)                       
  406.                 {       
  407.                         o=0;
  408.                         cou++;
  409.                         display1();                               
  410.                 }

  411.                 if(k==(Changdu*40)*mcsl)
  412.                 {
  413.                         pici1++;
  414.                         display1();
  415.                 }       
  416.                 zhongmaicong--;
  417.                                                
  418.         }
  419.         FFW_flag=0;                       
  420. }

  421.                                
  422. //////////////////////////////////////////////////////////////////////////
  423. void main()
  424. {
  425.          //uchar z;
  426.         lcd_init();
  427.         lcd_clr();
  428.         init();        //初始化24C02
  429.         cs_display();//广告图表       
  430.                
  431. /*********下面的一小段程序的功能为格式化密码存储区。************
  432. ******当24c02中这些存储区由于其他程序的运行而导致***************
  433. *******所存数据发生了变化,或者密码遗忘时,        ********************
  434. ******可以删掉其前面的注释线,然后重新编译下载。****************
  435. ******而将密码还原为000000后,请将下面的程序用******************
  436. ******注释屏蔽掉,重新编译、下载,方可正常使用****************/
  437. //        write24c02(110,0x00);
  438. //        write24c02(111,0x00);//24c02的第110到115地址单元作为密码存储区
  439. //        write24c02(112,0x00);
  440. //        write24c02(113,0x00);
  441. //        write24c02(114,0x00);
  442. //        write24c02(115,0x00);
  443. //////////////////////////////////////////////////////////

  444.         Changdu=read24c02(110);  
  445.         pici=read24c02(111);
  446.         sudu=read24c02(112);
  447.         count=read24c02(113);

  448.         delay_ms(100);
  449.         ds_display();               
  450.     display1();        //设置过后的数据显示
  451.         while(1)
  452.         {
  453.                 scankey();
  454.                 if(set_num==0)
  455.                 {
  456.                         if(!strat)
  457.                         {
  458.                                 delay_ms(2);
  459.                                 while(!strat)
  460.                                 {
  461.                                          motor_ffw();
  462.                                          display1();        //设置过后的数据显示
  463.                                 }
  464.                         }       
  465.                 }
  466.                 if((up==0)&down==0)
  467.                 {
  468.                         delay_ms(2);
  469.                         if((up==0)&down==0)
  470.                         {
  471.                                 while(!(up&down));
  472.                                 {
  473.                                         pici1=0;cou=0;
  474.                                    display1();
  475.                                 }
  476.                         }
  477.                 }
  478.         }       
  479. }
  480. /*void timer0()interrupt 1
  481. {
  482.         TH0=(65536-50000)/256;
  483.         TL0=(65536-50000)%256;
  484.         a++;
  485.         if(a==2)
  486.         {
  487.                 a=0;
  488.                 keyprocess();
  489.                
  490.     }
  491.         TR0=0;
  492. }*/
复制代码



附件如下:

切管机12864显示24C02存储.rar

77.24 KB, 下载次数: 23, 下载积分: 黑币 -5

评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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