找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8729|回复: 16
收起左侧

16路输入输出可编程晶体管工控板原理图PCB工程与源码下载(单片机串口及485通讯)

  [复制链接]
ID:284341 发表于 2018-2-18 17:05 | 显示全部楼层 |阅读模式

STC12C5A60S2单片机主控的十六入十六出场效应管工控开发板简介

l  尺寸:145mmX103mmX25MM

l  供电:板子供电直流6到40V

l  十六路路数字量输入光耦(PC817)隔离

l  十六路路场效应管输出带光耦(PC817)隔离

l  输入输出带指示

l  晶振11.0592Mhz

l  单片机内部带eeprom

l  控制电源和供电电源隔离

l  带有串口232通讯接口(系在程序和通讯用)

l  带有485接口,可以多块控制板并联

l  场效应管(IRF1205)输出可控制55V44A负载

功能:十六个输入可以接十六个NPN型传感器,或者控制设备的限位开关、启动、停止开关等等,可以实现任意控制设备的编程(仿西门子s7-200开关管型),可以控制直流12V到55V,107w负载


Altium Designer画的单片机工控开发板原理图和PCB图如下:(51hei附件中可下载工程文件)
0.png 0.jpg

实物图:
ALIM0035.JPG ALIM0038.JPG
八入八出场效应管工控开发板说明书
第一部分:八入八出场效应管工控开发板功能介绍
1.八入八出场效应管工控开发板简介
2.硬件连接使用说明
3.STC12C5A60S2单片机简介
4.N沟道Irf1205场效应管简介
第二部分:板子编程入门教学
1. Keil uVision4
2.用keil软件建一个简单工程
3.开发板下载程序方法
第三部分:板子各种软件应用实例
一、基础类
1.控制某一路延时通断实例
2.随机输出控制使用实例
3.八路输出流水灯实例
4.一对一输入输出互锁控制实例
5.一对一输入输出自锁控制实例
6.一对一输入输出点动控制实例
7.电脑采集输入控制输出实例
二、提高类
1.掉电记忆应用实例
2.加密设定次数应用实例
附录:
1、硬件原理图
0.png

注:RS485建议采用双绞线连接,采用带屏蔽的双绞线连接,并将屏蔽层接地,总线上挂多个模块时,采用手拉手不的连接方式。
    采集外部干接点开关量信号的接法
0.png

第三部分:板子各种软件应用实例

通过485或232接口均可与上位机通讯测试程序
单片机源程序如下:
  1. /********************************************************************
  2.                             汇诚科技
  3. 实现功能:485或者232接口都可以通过上位机控制16路场效应管
  4. 使用芯片:STC12CA60S2
  5. 晶振:11.0592MHZ
  6. 波特率:9600bps  8位数据位  一位停止位  无效验
  7. 编译环境:Keil
  8. 硬件环境:八入八出出场效应管带485和232接口  编号:kzs131-39y5k
  9. 作者:yang
  10. QQ:790244909
  11. 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!     

  12. *********************************************************************/
  13. #include "hedder\\STC12C5A60S2.h"
  14. #include"hedder\\DODI.h"
  15. #define  uchar unsigned char
  16. #define  uint  unsigned int
  17. uchar dat;
  18. /********************************************************************
  19.                                 串口初始化
  20. *********************************************************************/
  21. void init ()
  22. {
  23.    //串口2波特率
  24.         TMOD = 0x20;                                  //定时器1产生波特率
  25.         SCON = 0x50;                                 //方式1,8位数据,波特率可变
  26.         TH1=0xfd;
  27.         TL1 = 0xfd;                         //波特率 9600

  28.   //串口1波特率        
  29.         S2CON = 0x50;                                 //方式1,八位数据,可变波特率
  30.         BRT=0XFD;                                  //设置波特率9600
  31.         TR1=1;                                          //启动定时器产生串口2波特率        
  32.         AUXR=0x10;                                 //启动串口1波特率发生器
  33.         IP=0x00;                                 //优先级默认
  34.         EA=1;                                  //开总中断
  35.         ES=1;                                         //开串口1中断
  36.         IE2=0x01;                                 //开串口2中断
  37. }

  38. /*
  39.        // 串口一 发送一个字符
  40. void  uart1_txd(uchar x)
  41. {
  42.         SBUF = x;
  43. }
  44. //     串口二   发送一个字符
  45. void  uart2_txd(uchar x)
  46. {
  47.         S2BUF = x;
  48. }
  49. */
  50. /********************************************************************
  51.                                 延时函数
  52. *********************************************************************/
  53. void delay ( uint t )
  54. {
  55.         uint i,j;
  56.         for( i=0; i<t; i++)
  57.         for( j=0; j<250; j++);
  58. }
  59. /********************************************************************
  60.                                     主函数
  61. *********************************************************************/
  62. void main()
  63. {
  64.    uchar k=10;
  65.     //配置P4.4为IO口
  66.    P4SW|=0x70;                  
  67.    P4M0&=0x80;                  
  68.    P4M1&=0x80;

  69.    init();   //串口初始化
  70.    fxctl=0;  //485接收
  71.    while(1)
  72.    {
  73. /********************************************************************
  74.                             接收数据判断函数
  75. *********************************************************************/
  76.         switch(dat) //接收数据判断
  77.         {
  78.                 case 'I':
  79.                                   P1&=0x0c;
  80.                                   P3&=0x03;
  81.                           P4&=0x81;
  82.                                   P5=0;
  83.                           delay(200);
  84.                                   init();
  85.                               break; //  全开
  86.                                  
  87.                 case 'i':
  88.                            P3|=0XFF;
  89.                                    P1|=0XFF;
  90.                            P4|=0xff;
  91.                                    P5=0xff;
  92.                                    delay(k);        
  93.                                    break; //  全关
  94.                
  95.                 case 'A': OUT1=0;delay(k);break;           //  第一路开
  96.                 case 'B': OUT2=0;delay(k);break;           //  第二路开
  97.                 case 'C': OUT3=0;delay(k);break;           //  第三路开
  98.                 case 'D': OUT4=0;delay(k);break;           //  第四路开
  99.                 case 'E': OUT5=0;delay(k);break;           //  第五路开
  100.                 case 'F': OUT6=0;delay(k);break;           //  第六路开
  101.                 case 'G': OUT7=0;delay(k);break;           //  第七路开
  102.                 case 'H': OUT8=0;delay(k);break;           //  第八路开
  103.                 case 'J': OUT9=0;delay(k);break;           //  第九路开
  104.                 case 'K': OUT10=0;delay(k);break;           //  第十路开
  105.                 case 'L': OUT11=0;delay(k);break;           //  第十一路开
  106.                 case 'M': OUT12=0;delay(k);break;           //  第十二路开
  107.                 case 'N': OUT13=0;delay(k);break;           //  第十三路开
  108.                 case 'O': OUT14=0;delay(k);break;           //  第十四路开
  109.                 case 'P': OUT15=0;delay(k);break;           //  第十五路开
  110.                 case 'Q': OUT16=0;delay(k);break;           //  第十六路开
  111.                         
  112.                 case 'a': OUT1=1;delay(k);break;           //  第一路关
  113.                 case 'b': OUT2=1;delay(k);break;           //  第二路关
  114.                 case 'c': OUT3=1;delay(k);break;           //  第三路关
  115.                 case 'd': OUT4=1;delay(k);break;           //  第四路关
  116.                 case 'e': OUT5=1;delay(k);break;           //  第五路关
  117.                 case 'f': OUT6=1;delay(k);break;           //  第六路关
  118.                 case 'g': OUT7=1;delay(k);break;           //  第七路关
  119.                 case 'h': OUT8=1;delay(k);break;           //  第八路关
  120.                 case 'j': OUT9=1;delay(k);break;           //  ...
  121.                 case 'k': OUT10=1;delay(k);break;           //  ...
  122.                 case 'l': OUT11=1;delay(k);break;           //  ...
  123.                 case 'm': OUT12=1;delay(k);break;           //  ...
  124.                 case 'n': OUT13=1;delay(k);break;           //  ...
  125.                 case 'o': OUT14=1;delay(k);break;           //  ...
  126.                 case 'p': OUT15=1;delay(k);break;           //  ...
  127.                 case 'q': OUT16=1;delay(k);break;           //  ...
  128.            default:break;                      //  跳出
  129.    }
  130. }        
  131. }
  132. /********************************************************************
  133.                          串口一 发送接收中断函数
  134. *********************************************************************/
  135. void uart_isr()  interrupt 4
  136. {
  137.         if( RI ) RI = 0;
  138.         
  139.         dat = SBUF;
  140.         
  141.         if( TI ) TI = 0;
  142. }
  143. /********************************************************************
  144.                          串口二    发送接收中断函数
  145. *********************************************************************/
  146. void uart2_isr()  interrupt 8
  147. {
  148.    if( S2CON & 0x01 )
  149.          {
  150.                 S2CON &= ~0x01;
  151.                    dat= S2BUF;
  152.          }

  153.         if( S2CON & 0x02 )
  154.         {
  155.           S2CON &= ~0x02;
  156.         }
  157. }
  158. /********************************************************************
  159.                                     结束
  160. *********************************************************************/

复制代码

1.  随机输出控制使用实例
单片机源程序如下:
  1. /**********************************************************
  2. 程序说明:
  3. 程序中数组KM(数据表)中的数据控制8个场效应管的通断
  4. 适合用作控制广告彩灯,灯箱,等等
  5. **********************************************************/
  6. #include<STC12C5A60S2.h>                 //库文件
  7. #include <intrins.h>
  8. #define uchar unsigned char//宏定义无符号字符型
  9. #define uint unsigned int  //宏定义无符号整型
  10. /********************************************************************
  11.                             初始定义
  12. *********************************************************************/
  13. /********************************************************************
  14.                             初始定义
  15. *********************************************************************/
  16. /*定义八位数字量输入为单片机P0口*/
  17. sbit X00=P0^0;
  18. sbit X01=P0^1;
  19. sbit X02=P0^2;
  20. sbit X03=P0^3;
  21. sbit X04=P0^4;
  22. sbit X05=P0^5;
  23. sbit X06=P0^6;
  24. sbit X07=P0^7;
  25. /*定义八位数字量输出IO口*/
  26. sbit Y00=P2^6;
  27. sbit Y01=P2^7;
  28. sbit Y02=P5^0;
  29. sbit Y03=P5^1;
  30. sbit Y04=P4^1;
  31. sbit Y05=P4^6;
  32. sbit Y06=P4^5;
  33. sbit Y07=P4^4;
  34. /********************************************************************
  35.                             数据表格
  36. *********************************************************************/
  37. code uchar KM[]={
  38. 0xFF,0xE1,0xFF,0xFF,0xFF,0xFF,0xFC,0xC5,0x92,0xFF,0xB7,0xB8,0xC9,0x80,0x7F,0xFF,
  39. 0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFC,0x4F,0xEF,0x3F,0xC8,0x1A,0x20,0xC0,0x00,0x00,
  40. 0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xF8,0x7F,0xFF,0xFF,0x75,0x86,0xF6,0xC0,0x00,0x00,
  41. 0xFF,0x03,0xEF,0x9F,0xFB,0xFF,0xF8,0x7F,0xFF,0xFF,0xFB,0xDF,0xFE,0xC0,0x7F,0xFF,
  42. 0x00,0x07,0xDE,0x7F,0xC7,0xFF,0xF0,0x7E,0x7F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,
  43. 0x00,0x07,0x1C,0xF7,0x9F,0xDF,0xF0,0x7E,0x7F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,
  44. 0xFC,0x07,0x00,0x8C,0x1F,0xBF,0xE7,0x3C,0x3F,0xFF,0xFF,0xFF,0xFF,0xC0,0x7F,0xFF,
  45. 0x00,0x07,0x00,0x08,0x1C,0x3F,0x88,0x3C,0x7F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,
  46. 0x00,0x06,0x0C,0x08,0x98,0x7F,0x80,0x0D,0x9F,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,
  47. 0xFC,0x06,0x1C,0xE3,0x99,0xFF,0x00,0x0C,0x0F,0xFF,0xFF,0xFF,0xFF,0xC0,0x5F,0xFF,
  48. }; //数据表格
  49. /********************************************************************
  50.                             延时函数
  51. *********************************************************************/
  52. void delay(uchar t)         //当t等于50时,大概延时0.5秒;当t等于10时,大概延时0.1秒;
  53. {
  54.         uchar m,n,s;
  55.         for(m=t;m>0;m--)
  56.         for(n=20;n>0;n--)
  57.         for(s=248;s>0;s--);
  58. }
  59. /********************************************************************
  60.                            输出处理函数
  61. *********************************************************************/
  62. void open_X3(uchar turm)
  63. {
  64. char i;
  65. for(i=7;i>=0;i--)
  66. {
  67. urm=_crol_(turm,1);
  68. switch(i)
  69. {
  70.   case 0:Y00=turm&0x01;break;
  71.   case 1:Y01=turm&0x01;break;
  72.   case 2:Y02=turm&0x01;break;
  73.   case 3:Y03=turm&0x01;break;
  74.   case 4:Y04=turm&0x01;break;
  75.   case 5:Y05=turm&0x01;break;
  76.   case 6:Y06=turm&0x01;break;
  77.   case 7:Y07=turm&0x01;break;
  78.   default:break;
  79. }        
  80. }
  81. }

  82. /********************************************************************
  83.                             配置P4口
  84. *********************************************************************/
  85. void P4_init(void)
  86. {
  87.     P4SW=0x70;   //配置P4口
  88.     P4M0&=0x80;         
  89.     P4M1&=0x80;
  90. }
  91. /********************************************************************
  92.                             主函数
  93. *********************************************************************/
  94. ……………………

  95. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png 0.png

工控板的所有资料51hei提供下载(pcb+原理图工程文件+源码+说明文档):
16路入16出可编程场效应管DXP资料.rar (719.61 KB, 下载次数: 337)
回复

使用道具 举报

ID:381894 发表于 2018-8-1 22:00 | 显示全部楼层
想下载,积分不够
回复

使用道具 举报

ID:385372 发表于 2018-8-11 21:53 | 显示全部楼层
东西真的很不错 就是需要币
回复

使用道具 举报

ID:369814 发表于 2018-8-13 22:13 | 显示全部楼层
初学,测试了可以用,这个单片机厉害,两个串口
回复

使用道具 举报

ID:369814 发表于 2018-8-13 22:15 | 显示全部楼层
初学者,程序正常运行,这个单片机厉害,两个串口
回复

使用道具 举报

ID:230847 发表于 2018-9-8 13:35 | 显示全部楼层
谢谢分享,目前正在做一个项目需要这些资料
回复

使用道具 举报

ID:119140 发表于 2019-1-28 19:09 | 显示全部楼层

谢谢分享,做一个项目需要这些资料,学习一下。
回复

使用道具 举报

ID:184707 发表于 2019-3-18 10:54 | 显示全部楼层
很好的资料,谢谢楼主了
回复

使用道具 举报

ID:512979 发表于 2019-4-29 14:38 | 显示全部楼层
想下载,积分不够
回复

使用道具 举报

ID:204391 发表于 2019-7-16 17:40 | 显示全部楼层
十六入出 ,八入出,两串口。
回复

使用道具 举报

ID:625030 发表于 2019-10-16 14:22 来自手机 | 显示全部楼层
怎么联发楼主
回复

使用道具 举报

ID:425919 发表于 2020-1-6 17:16 | 显示全部楼层
努力学习中…………
回复

使用道具 举报

ID:298215 发表于 2020-8-17 10:00 | 显示全部楼层

初学,测试了可以用,这个单片机厉害,两个串口
回复

使用道具 举报

ID:97678 发表于 2020-8-18 08:38 | 显示全部楼层
下载来,看看。能不能把单片机换成最新的? 怎么总是看到用老掉牙的单片机?
回复

使用道具 举报

ID:251992 发表于 2021-12-28 21:00 | 显示全部楼层
电路漂亮              
回复

使用道具 举报

ID:928284 发表于 2021-12-30 16:25 | 显示全部楼层
厉害了,学单片机就是为了用于实际。
回复

使用道具 举报

ID:868837 发表于 2022-2-25 14:46 | 显示全部楼层
有BOM表吗? 做板出来试一下。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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