找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1940|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機組態(tài)例程

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:595580 發(fā)表于 2021-4-17 11:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
大家可以用MODBUS協(xié)議通過人機界面來調(diào)試程序或?qū)W習(xí)通信協(xié)議。

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

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

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

4.使用GUIBuild觸摸屏軟件時,先編譯,再選擇在線模擬,再選擇正確的COM口后點擊連接。

單片機源程序如下:
  1. /******************************************************************************************************************
  2. 標題:  綜合程序                                                                                                                                                                          *
  3. *            此程序包含了板中大部分的功能,配合上位機一起使用  編譯前請雙擊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ù)器

  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ù)名稱: 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 時鐘沖斷     
  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動作版本 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   // 晶振 波特率 站號
  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控制畫面切換OFF
  116.         D[180]=0; //AD采樣控制
  117.         D[181]=0; //曲線黑色背景
  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; //控制觸摸屏(顯示畫面號=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; //控制觸摸屏(顯示畫面號=17)
  138.            }
  139.            K1J=~K1;
  140.               
  141.            if(K2&K2J)
  142.            {
  143.               M[2]=~M[2];
  144.                   if(D[100])D[24]=29; //控制觸摸屏(顯示畫面號=29)
  145.            }
  146.            K2J=~K2;
  147.                   
  148.            if(K3&K3J)
  149.            {
  150.               M[3]=~M[3];
  151.                   if(D[100])D[24]=30; //控制觸摸屏(顯示畫面號=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[27] 間隔10ms*D[28] 加加一次
  157.            {
  158.                      if(TickOut(&T[0],D[28])) if(++D[27]>5) D[27]=0;  //10ms*D[28]   
  159.            }

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


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

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

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

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

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


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

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

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表