找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2625|回復: 0
打印 上一主題 下一主題
收起左側

單片機鋼筋調直機源程序-第一個自主編譯C程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:83710 發(fā)表于 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日與天津開發(fā)區(qū)
  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;//實際 要設定的浮點數(shù)
  14.   uint h;
  15. uchar g=0,s=0,bw=0,q=0; //顯示單元 個位、十位、百位、千位
  16. uchar gruang,sgruang;//計算圈數(shù)實際圈數(shù)
  17. uchar j=0;//實際圈數(shù)
  18. uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//不帶小數(shù)點顯示0~9
  19. uchar code tab1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //帶小數(shù)點顯示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) //設定計算函數(shù)換算成整數(shù)圈
  128. {
  129. float d,e,c;
  130.    
  131.      d=0.034; //0.34米/10
  132.   e=set;//設定米數(shù)
  133.     c=(e/d); //值
  134.   h=c;
  135. return h; //返回計算后要轉的圈數(shù)
  136. }

  137. uint jiance()    //圈數(shù)檢測傳感器函數(shù)
  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;     //返回實際圈數(shù)
  153. }



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


  159.    gruang=divdate(keyball());//讀入設定值然后換算成計算圈數(shù)


  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();//實際轉的圈數(shù)
  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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表