找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机组态例程

[复制链接]
跳转到指定楼层
楼主
ID:595580 发表于 2021-4-17 11:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家可以用MODBUS协议通过人机界面来调试程序或学习通信协议。

1.使用前,需要安装GUIBuild触摸屏组态软件,软件在"\单片机开发工具\GUIBuild触摸屏组态软件"

2.使用GUIBuild和OPS6触摸软件前,先双击学习光盘中的“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;    //时间片计数器

  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. * 函数名称: ConversionStr(void)
  39. * 功能描述: 字符串转换函数
  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: 系统初始化
  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.            //动态文本画面数据测试
  164.            if(TickOut(&T[1],D[30])) //D[30]位人机设定的动作速度
  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.                   //温度状态反色显示
  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.            }
复制代码


           //拨码开关控制[运行状态显示]
           D[99]=0;
           if(X1&0x10) D[99]=1; //拨码开关1
           if(X1&0x20) D[99]=2; //拨码开关2
           if(X1&0x40) D[99]=3; //拨码开关3
           if(X1&0x80) D[99]=4; //拨码开关4

         
以上代码下载: 27 组态例程.rar (2.02 MB, 下载次数: 25)

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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