找回密码
 立即注册
查看: 300|回复: 0

基于STC15W104单片机设计的RS232串口通信控制4路晶体管开关原理图+例程分享

[复制链接]

该用户从未签到

42

主题

7

回帖

246

积分

中级会员

积分
246
发表于 2023-7-2 23:30:00 | 显示全部楼层 |阅读模式
功能描述:
此数模块是基于,STC15F104W单片机为核心的,可编程控制,可以通过对单片机编程,实现串口对输出的控制,
输出可以接5V~24V的直流负载。板子自带TTL接口,可以直接对单片机进行程序下载,支持TTL通讯和串口通讯,
输出为PNP输出,可以直接驱动3W以内的直流负载。此模块提供,例程 原理图 相关软件及资料。
【简要说明】
一、板子尺寸:长62mmX宽53mmX高12mm
二、主要器件STC15F104W
三、工作电压:板子供电5V。输出供电5~24V
四、板子功耗:小于50mA
五、特点:
1、具有四路输出信号LED指示功能
2标准串口通讯
3支持TTL通讯和程序下载
4PNP型晶体管输出
5输出光电隔离
6接受定制或者编程服务
7、工作温度-40度至 +70度
8、工作湿度 40%  ~ 80%RH
GYJ-0242 淘宝描述660.png
GYJ-0242 淘宝描述669.png
GYJ-0242 淘宝描述689.png
GYJ-0242 淘宝描述698.png
GYJ-0242 淘宝描述711.png
GYJ-0242 淘宝描述715.png
GYJ-0242 淘宝描述731.png
【声明】此程序仅用于学习与参考!     
#include "reg52.h"
#include <intrins.H>
#define uchar unsigned char //宏定义字符型变量
#define uint  unsigned int        //宏定义整型变量
/********************************************************************
                            波特率设定
*********************************************************************/
//#define BAUD 0XF400  //1200bps@ 11.0592MHZ
//#define BAUD 0XFA00  //2400bps@ 11.0592MHZ
//#define BAUD 0XFD00  //4800bps@ 11.0592MHZ
#define BAUD 0XFE80  //9600bps@ 11.0592MHZ
//#define BAUD 0XFF40  //19200bps@ 11.0592MHZ
//#define BAUD 0XFFA0  //38400bps@ 11.0592MHZ

uchar dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
/********************************************************************
                            定义特殊寄存器
*********************************************************************/
sfr AUXR  =  0x8E;   //辅助寄存器
sbit RXB=P3^0;
sbit TXB=P3^1;
sbit OUT1=P3^2;
sbit OUT2=P3^3;
sbit OUT3=P3^4;
sbit OUT4=P3^5;
/********************************************************************
                           定义数据类型
*********************************************************************/
uchar TBUF,RBUF;
uchar TDAT,RDAT;
uchar TCNT,RCNT;
uchar TBIT,RBIT;
uint TING,RING;
uint TEND,REND;

void UART_INIT(); //声明函数

uchar t,r;                  //定义数据类型
uchar but;          //数据存储数组
/********************************************************************
                            延时函数
*********************************************************************/
void delay(uchar t)
{
  uchar i,j;
   for(i=0;i<t;i++)
   {
            for(j=13;j>0;j--);
         { ;
         }
   }
}

/****************发送函数*********************/
void senduart2()
{       

                    if(TEND)          //允许发送
                        {
                                 TEND=0;
                                 TBUF=but;
                                 TING=1;
                        }
                        while(!TEND);
}
/********************************************************************
                            主函数
*********************************************************************/
void main()
{

TMOD=0X00;           //定时器T0设定
AUXR=0X80;           //辅助寄存器
TL0=BAUD;           //十六位寄存器
TH0=BAUD>>8;   //十六位寄存器
TR0=1;                   //开定时器
ET0=1;
PT0=1;
EA=1;                   //开总中断
UART_INIT();   //串口初始化
while(1)           //无线循环
{
//if(IN1==0) OUT1=0;else  OUT1=1;

if(REND)
  {
   REND=0;
   r++;
   dat=RBUF;
   }

switch(dat) //接收数据判断
{
uchar k;
k=10;
case 'A': OUT1=0;delay(k);dat=0xee;break;           //  开
case 'a': OUT1=1;delay(k);dat=0xee;break;           //  关
case 'B': OUT2=0;delay(k);dat=0xee;break;           //  开
case 'b': OUT2=1;delay(k);dat=0xee;break;           //  关
case 'C': OUT3=0;delay(k);dat=0xee;break;           //  开
case 'c': OUT3=1;delay(k);dat=0xee;break;           //  关
case 'D': OUT4=0;delay(k);dat=0xee;break;           //  开
case 'd': OUT4=1;delay(k);dat=0xee;break;           //  关
case 'I': OUT1=0;OUT2=0;OUT3=0;OUT4=0;delay(k);dat=0xee;break;           //  开
case 'i': OUT1=1;OUT2=1;OUT3=1;OUT4=1;delay(k);dat=0xee;break;           //  关
default:break;                                           //  跳出
}

         }
   }
/********************************************************************
                            接收数据判断函数
*********************************************************************/






/********************************************************************
                            定时器T0
*********************************************************************/
void tm0()interrupt 1 using 1
{
if(RING)
  {
   if(--RCNT==0)
    {
         RCNT=3;
         if(--RBIT==0)
        {
                 RBUF=RDAT;
                 RING=0;
         REND=1;
                }
                else
                {
                 RDAT>>=1;
                 if(RXB)RDAT|=0X80;
                }

    }
  }
    else if(!RXB)
        {
         RING=1;
         RCNT=4;
         RBIT=9;
        }
    if(--TCNT==0)
        {
        TCNT=3;
        if(TING)
        {
          if(TBIT==0)
          {
          TXB=0;
          TDAT=TBUF;
          TBIT=9;
          }
          else
          {
          TDAT>>=1;
          if(--TBIT==0)
          {
           TXB=1;
           TING=0;
           TEND=1;
          }
          else
          {
          TXB=CY;
          }
          }
        }
        }
}
/********************************************************************
              功能:串口初始化,波特率9600,方式1
*********************************************************************/
void UART_INIT()
{
TING=0;
RING=0;

TEND=1;
REND=0;

TCNT=0;
RCNT=0;
}

/********************************************************************
                            结束
*********************************************************************/



GYJ-0242_串口控制四路晶体管PNP输出测试程序.rar

38.89 KB, 下载次数: 25

GYJ-0242_串口控制四路晶体管PNP输出使用手册.pdf

1.47 MB, 下载次数: 27

GYJ-0242_串口控制四路输出DXP资料.pdf

106.1 KB, 下载次数: 28

回复 送花

使用道具 举报

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2024-5-21 04:20 , Processed in 0.056016 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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