標(biāo)題: 單片機(jī)組態(tài)例程 [打印本頁(yè)]

作者: 老手    時(shí)間: 2021-4-17 11:16
標(biāo)題: 單片機(jī)組態(tài)例程
大家可以用MODBUS協(xié)議通過(guò)人機(jī)界面來(lái)調(diào)試程序或?qū)W習(xí)通信協(xié)議。

1.使用前,需要安裝GUIBuild觸摸屏組態(tài)軟件,軟件在"\單片機(jī)開(kāi)發(fā)工具\(yùn)GUIBuild觸摸屏組態(tài)軟件"

2.使用GUIBuild和OPS6觸摸軟件前,先雙擊學(xué)習(xí)光盤(pán)中的“KeiLib.exe”

3.軟件安裝好后,雙擊Test.op6 即可運(yùn)行程序。

4.使用GUIBuild觸摸屏軟件時(shí),先編譯,再選擇在線(xiàn)模擬,再選擇正確的COM口后點(diǎn)擊連接。

單片機(jī)源程序如下:
  1. /******************************************************************************************************************
  2. 標(biāo)題:  綜合程序                                                                                                                                                                          *
  3. *            此程序包含了板中大部分的功能,配合上位機(jī)一起使用  編譯前請(qǐng)雙擊Keillib.exe                                                                                                                                                                                                                  *
  4. *                                                                                                                                                                                                                                  *
  5. *******************************************************************************************************************/

  6. #include <system.h>

  7. #define  NOP() _nop_()  /* 定義空指令 */
  8. #define  TRUE  0xff
  9. #define  FALSE 0


  10. //6T/12T工作模式
  11. #define  Model_6T  0


  12. unsigned char bdata X0,X1,Y0,Key;
  13. unsigned int  Tick_10ms=0;    //時(shí)間片計(jì)數(shù)器

  14. sbit K0=Key^0;
  15. sbit K1=Key^1;
  16. sbit K2=Key^2;
  17. sbit K3=Key^3;
  18. sbit K4=Key^4;
  19. sbit K5=Key^5;
  20. sbit K6=Key^6;
  21. sbit K7=Key^7;

  22. bit K0J,K1J,K2J,K3J,K4J,K5J;


  23. #define  M_Sum 32
  24. #define  D_Sum 185
  25. unsigned char  idata M[M_Sum];
  26. unsigned short xdata D[D_Sum];

  27. unsigned int TestDelay1, TestDelay2, TestDelay3;
  28. unsigned int T[6];


  29. //*********************************************************************
  30. #define UCHAR unsigned char
  31. void delay(unsigned int i)
  32. {
  33.     UCHAR j;
  34.     for(i; i > 0; i--)
  35.         for(j = 200; j > 0; j--);
  36. }

  37. /*************************************************************************
  38. * 函數(shù)名稱(chēng): ConversionStr(void)
  39. * 功能描述: 字符串轉(zhuǎn)換函數(shù)
  40. * 輸    入: *Register, *str
  41. ***************************************************************************/
  42. void ConversionStr(unsigned short *Register,unsigned char code *str)
  43. {
  44.   unsigned char sL,sH;
  45.   while(1)
  46.    {
  47.      if(*str == '\0') break;
  48.      sL=(*str++);
  49.      sH=(*str++);         
  50.      *Register++=sH<<8|sL;         
  51.    }
  52. }



  53. /*************************************************************      
  54. * (T0) 10 ms 時(shí)鐘沖斷     
  55. ;************************************************************/
  56. void T0zd(void) interrupt 1
  57. {
  58.     //TH0=0xC4; //18.432M
  59.     //TL0=0x00;

  60.     #if Model_6T
  61.         TH0=0xB8; //22.1184M
  62.         TL0=0x00;
  63.         #else
  64.         TH0=0xDC; //11.0592M
  65.         TL0=0x00;
  66.         #endif

  67.     Tick_10ms++;
  68. }


  69. /***********************************************************
  70. purpose: 系統(tǒng)初始化
  71. /**********************************************************/
  72. void system_Ini()
  73. {
  74.     TMOD|= 0x11;
  75.         //TH0=0xC4; //18.432M
  76.     //TL0=0x00;

  77.         #if Model_6T
  78.         TH0=0xB8; //22.1184M
  79.         TL0=0x00;
  80.         #else
  81.         TH0=0xDC; //11.0592M
  82.         TL0=0x00;
  83.         #endif
  84.         IE    = 0x8A;        
  85.     TR0  = 1;

  86.         //PWM  
  87.     //TH1 = 0xfe; //11.0592
  88.     //TL1 = 0x33;
  89.     //TR1  = 1;
  90. }



  91. //***********************************************************
  92. main()
  93. {  unsigned char Input;
  94.    unsigned char i,j;
  95.    unsigned char code str1[] = "PLC動(dòng)作版本 V1.05   ";
  96.    unsigned char code str2[] = "51板程序版本 V3.28  ";

  97.         system_Ini();
  98.         InitMotor();

  99.         Input=ReHC74165();
  100.     X0=Input;

  101.         #if Model_6T   // 晶振 波特率 站號(hào)
  102.         Modbus_Init(221184, 57600, 1, &M[0], &D[0]);
  103.         #else
  104.             //Modbus_Init(110592, 19200, 1, &M[0], &D[0]);
  105.                 Modbus_Init(120000, 19200, 1, &M[0], &D[0]);
  106.         #endif
  107.         //Modbus_Init(184320, 57600, X1, &M[0], &D[0]);

  108.         for(i=0; i<M_Sum; i++) M[i]=0;        
  109.         for(i=0; i<D_Sum; i++) D[i]=i;        
  110.         Y0=0;
  111.         D[12]=1;
  112.         D[24]=0;
  113.         D[28]=100;
  114.         D[30]=50;
  115.         D[100]=0; //PLC-K0~K3控制畫(huà)面切換OFF
  116.         D[180]=0; //AD采樣控制
  117.         D[181]=0; //曲線(xiàn)黑色背景
  118.         ConversionStr(&D[50],str1);

  119.     ////////////////////////////////////////////////////////////////////////
  120.         while(1)
  121.         {  
  122.        Input=ReHC74165();
  123.        X0=Input;
  124.            Key=X0;

  125.        if(K0&K0J) //單次圖片切換 D27
  126.            {
  127.              M[0]=~M[0];
  128.                  if(++D[27]>5) D[27]=0;
  129.                  if(D[100]) D[24]=10; //控制觸摸屏(顯示畫(huà)面號(hào)=10)
  130.            }
  131.            K0J=~K0;
  132.             
  133.            //由K1~K5微分控制, 交替切換M1~M5
  134.            if(K1&K1J)
  135.            {
  136.               M[1]=~M[1];
  137.                   if(D[100]) D[24]=17; //控制觸摸屏(顯示畫(huà)面號(hào)=17)
  138.            }
  139.            K1J=~K1;
  140.               
  141.            if(K2&K2J)
  142.            {
  143.               M[2]=~M[2];
  144.                   if(D[100])D[24]=29; //控制觸摸屏(顯示畫(huà)面號(hào)=29)
  145.            }
  146.            K2J=~K2;
  147.                   
  148.            if(K3&K3J)
  149.            {
  150.               M[3]=~M[3];
  151.                   if(D[100])D[24]=30; //控制觸摸屏(顯示畫(huà)面號(hào)=30)
  152.            }
  153.            K3J=~K3;

  154.            if(K4&K4J)M[4]=~M[4]; K4J=~K4;   
  155.            if(K5&K5J)M[5]=~M[5]; K5J=~K5;


  156.            if(M[1])         //自動(dòng)圖片切換 D[27] 間隔10ms*D[28] 加加一次
  157.            {
  158.                      if(TickOut(&T[0],D[28])) if(++D[27]>5) D[27]=0;  //10ms*D[28]   
  159.            }

  160.            //顯示下位機(jī)程序版本
  161.            if(K0) ConversionStr(&D[50],str1);
  162.            if(K1) ConversionStr(&D[50],str2);


  163.            //動(dòng)態(tài)文本畫(huà)面數(shù)據(jù)測(cè)試
  164.            if(TickOut(&T[1],D[30])) //D[30]位人機(jī)設(shè)定的動(dòng)作速度
  165.            {
  166.               //報(bào)警信息
  167.               if((K0)&&(D[21]<58)) ++D[21];
  168.               if((K1)&&(D[21]>0))  --D[21];

  169.                   //動(dòng)作信息
  170.                   if((K2)&&(D[22]<9))  ++D[22];
  171.               if((K3)&&(D[22]>0))  --D[22];

  172.                   //溫度狀態(tài)反色顯示
  173.                   D[90]++;

  174.                   //周期時(shí)間
  175.                   D[93]++;
  176.            
  177.                   //按下S5(單ON/雙OFF),控制報(bào)警自動(dòng)變化
  178.                   if(M[4])
  179.                   {                  
  180.                     if(++D[21]>57) D[21]=0;
  181.                   }

  182.                   //按下S6(單ON/雙OFF),控制動(dòng)作自動(dòng)變化
  183.                   if(M[5])
  184.                   {                  
  185.                     if(!M[6]) //動(dòng)作++
  186.                     {
  187.                           if(++D[22]>8)
  188.                           {
  189.                             D[22]=8;
  190.                             M[6]=TRUE;
  191.                           }
  192.                         }
  193.                         else //動(dòng)作--
  194.                         {
  195.                           if(--D[22]==0) M[6]=FALSE;
  196.                         }
  197.                   }
  198.            }
復(fù)制代碼


           //撥碼開(kāi)關(guān)控制[運(yùn)行狀態(tài)顯示]
           D[99]=0;
           if(X1&0x10) D[99]=1; //撥碼開(kāi)關(guān)1
           if(X1&0x20) D[99]=2; //撥碼開(kāi)關(guān)2
           if(X1&0x40) D[99]=3; //撥碼開(kāi)關(guān)3
           if(X1&0x80) D[99]=4; //撥碼開(kāi)關(guān)4

         
以上代碼下載: 27 組態(tài)例程.rar (2.02 MB, 下載次數(shù): 25)





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1