找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机钢筋调直机源程序-第一个自主编译C程序

[复制链接]
跳转到指定楼层
楼主
ID:83710 发表于 2015-6-23 20:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一个自主设计自主编译的C程序,虽然比不上人家的那好,但是这是我是实实在在,经过N多失败,仿真得出的,我珍惜,我还要努力!

  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit led4=P1^0;
  5. sbit led3=P1^1;    //第一个自己编写的c程序,付出了太多,才换回这几行代码,源于热爱!2010年8月8日与天津开发区
  6. sbit led2=P1^2;
  7. sbit led1=P1^3;
  8. sbit inc=P2^0; //加
  9. sbit dec=P2^1; //减
  10. sbit flage=P2^3;//模拟传感器
  11. sbit start=P2^2;
  12. sbit ctrl=P1^7;

  13. float setdate,setdate1,setdate10,ly=0.10,yi=1;//实际 要设定的浮点数
  14.   uint h;
  15. uchar g=0,s=0,bw=0,q=0; //显示单元 个位、十位、百位、千位
  16. uchar gruang,sgruang;//计算圈数实际圈数
  17. uchar j=0;//实际圈数
  18. uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//不带小数点显示0~9
  19. uchar code tab1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //带小数点显示0~9
  20. void delay(uint z) //延时程序
  21. {
  22. uint x,a,b;
  23.          for (x=0;x<z;x++)
  24.   
  25.        {
  26.        for(b=120;b>0;b--)
  27.     {
  28.         for(a=3;a>0;a--);
  29.    
  30.              }
  31.     }


  32. }
  33. void display1() //显示程序

  34. {   
  35.             
  36.     led1=0;
  37.     P0=tab[g]; //个
  38.     delay(1);
  39.     led1=1;
  40.      led2=0;
  41.     P0=tab1[s];//十
  42.     delay(1);
  43.     led2=1;
  44.     led3=0;
  45.     P0=tab[bw];   //百
  46.     delay(1);
  47.     led3=1;
  48.                  led4=0;
  49.     P0=tab[q];    //千
  50.     delay(1);
  51.     led4=1;


  52. }

  53. void display2() //显示程序

  54. {   
  55.          
  56.     led1=0;
  57.     P0=tab[g]; //个
  58.     delay(1);
  59.     led1=1;
  60.      led2=0;
  61.     P0=tab[s];//十
  62.     delay(1);
  63.     led2=1;
  64.     led3=0;
  65.     P0=tab[bw];   //百
  66.     delay(1);
  67.     led3=1;
  68.                  led4=0;
  69.     P0=tab[q];    //千
  70.     delay(1);
  71.     led4=1;


  72. }


  73. float keyball()   //按键设置程序对加工料长短设置
  74. {  
  75.          if(inc==0)     //两位加
  76.                   {           
  77.       delay(30);
  78.    if(inc==0)   
  79.        {
  80.       
  81.         
  82.          if(g>9)
  83.         {g=0;
  84.         if(s>9)
  85.            
  86.          {g=0;s=0;setdate=0;setdate1=0;setdate10=0;}
  87.       
  88.      else  s++,setdate1=0,setdate10=(setdate10+yi);//+1

  89.       
  90.       
  91.       
  92.       
  93.         }
  94.                   
  95.     else g++,setdate1=(setdate1+ly); //+0.1
  96.      
  97.       
  98.          
  99.       }


  100.               }
  101.      if(dec==0)
  102.                   {               //两位减
  103.       delay(30);
  104.    if(dec==0)   
  105.      {
  106.       
  107.         
  108.          if(g==0)
  109.         {g=9;
  110.          if(s==0)
  111.          {g=9;s=9;}
  112.         else s--,setdate10=(setdate10-yi);//-1

  113.       
  114.       
  115.       
  116.         }
  117.                   
  118.       
  119.       else   g--,setdate1=(setdate1-ly); //-0.1

  120.       
  121.          
  122.     }


  123.               }


  124.    setdate=(setdate1+setdate10);
  125. return setdate;//返回按键设定值

  126. }

  127. uint divdate(float set) //设定计算函数换算成整数圈
  128. {
  129. float d,e,c;
  130.    
  131.      d=0.034; //0.34米/10
  132.   e=set;//设定米数
  133.     c=(e/d); //值
  134.   h=c;
  135. return h; //返回计算后要转的圈数
  136. }

  137. uint jiance()    //圈数检测传感器函数
  138. {
  139.   
  140. if(flage==0)
  141. {
  142.     delay(19);
  143.   if(flage==0)
  144.   {
  145.    
  146.      if(gruang==j)
  147.       { ;   //一旦J=S了证明长度达到了空操作
  148.            }
  149.    else j++; //不到则J++
  150.     }


  151. }


  152. return j;     //返回实际圈数
  153. }



  154. void main() //主函数
  155. {   uint a;
  156. P2=0x1f;
  157. while (1)
  158. {


  159.    gruang=divdate(keyball());//读入设定值然后换算成计算圈数


  160.         display1();//显示
  161.    
  162.   if(gruang>0)   
  163.    {      if(start==0)
  164.     {
  165.     delay(25);
  166.         if(start==0)
  167.       {
  168.              s=0;
  169.           g=0;
  170.                       while(1)
  171.           {
  172.            
  173.            

  174.          sgruang=jiance();//实际转的圈数
  175.                                                             a=sgruang;
  176.                                                                     g=a%10;   
  177.                                                                                              s=a/10;
  178.                         bw=a/100;
  179.                         q=a/1000;         
  180.                                                                                     
  181.       
  182.         
  183.       
  184.                                                                                             
  185.          
  186.            display2();
  187.         if(gruang==sgruang)
  188.                                        {
  189.             
  190.                          ctrl=0;
  191.      
  192.                          delay(100);
  193.          
  194.                                         ctrl=1;
  195.                 j=0;//长度到了,j复位     
  196.                                     }
  197.           else  ctrl=1;
  198.          
  199.          
  200.          
  201.          
  202.          
  203.          
  204.          
  205.          
  206.          
  207.           }
  208.      
  209.      
  210.      
  211.       }
  212.    
  213.    
  214.    
  215.    
  216.    
  217.    
  218.    
  219.    
  220.     }
  221.      
  222.    


  223.   }

  224. }


  225. }
复制代码

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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