找回密码
 立即注册
查看: 399|回复: 3

STC15W4K32S4单片机设计的24路输入输出继电器可编程工控板带232及485通讯及无线遥控功能

[复制链接]

该用户从未签到

42

主题

7

回帖

246

积分

中级会员

积分
246
发表于 2023-6-7 11:25:53 | 显示全部楼层 |阅读模式
GYJ-0271淘宝描述_01.jpg

GYJ-0271淘宝描述_02.jpg

GYJ-0271淘宝描述_03.jpg

GYJ-0271淘宝描述_04.jpg

GYJ-0271淘宝描述_05.jpg

GYJ-0271淘宝描述_06.jpg

GYJ-0271淘宝描述_07.jpg

GYJ-0271淘宝描述_08.jpg

GYJ-0271淘宝描述_09.jpg

GYJ-0271_24路输入输出继电器可编程工控板2代原理图_00.jpg


/********************************************************************
实现功能:应用程序

使用芯片:STCW4KS2S4
晶振:11.0592MHZ
波特率:115200
编译环境:Keil 4
【声明】此程序仅用于学习与参考

*********************************************************************/

/*************        本地常量声明        **************/
#define MAIN_Fosc                11059200L        //定义主时钟
#define        RX1_Lenth                32                        //串口接收缓冲长度
#define        BaudRate1                9600UL        //选择波特率


#define        Timer1_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 1 重装值, 对应300KHZ
#define        Timer2_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 2 重装值, 对应300KHZ

#include        "STC15Fxxxx.H"

#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int  //宏定义无符号整型
/*************        本地变量声明        **************/
u8        idata RX1_Buffer[RX1_Lenth];        //接收缓冲
u8        TX1_Cnt;        //发送计数
u8        RX1_Cnt;        //接收计数
bit        B_TX1_Busy;        //发送忙标志


/*************        本地函数声明 STC15W4K32S4单片机        **************/
sbit IN1=P4^1;
sbit IN2=P4^2;
sbit IN3=P4^3;
sbit IN4=P4^4;
sbit IN5=P2^0;
sbit IN6=P2^1;
sbit IN7=P2^2;
sbit IN8=P2^3;
sbit IN9=P2^4;
sbit IN10=P2^5;
sbit IN11=P2^6;
sbit IN12=P2^7;
sbit IN13=P7^4;
sbit IN14=P7^5;       
sbit IN15=P7^6;
sbit IN16=P7^7;
sbit IN17=P4^5;
sbit IN18=P4^6;
sbit IN19=P0^0;
sbit IN20=P0^1;
sbit IN21=P0^2;
sbit IN22=P0^3;
sbit IN23=P0^4;
sbit IN24=P5^2;


sbit OUT1=P7^3;
sbit OUT2=P7^2;
sbit OUT3=P7^1;
sbit OUT4=P7^0;
sbit OUT5=P3^7;
sbit OUT6=P3^6;
sbit OUT7=P3^5;
sbit OUT8=P5^1;
sbit OUT9=P5^0;
sbit OUT10=P3^4;
sbit OUT11=P3^3;
sbit OUT12=P3^2;
sbit OUT13=P6^7;
sbit OUT14=P6^6;
sbit OUT15=P6^5;
sbit OUT16=P6^4;
sbit OUT17=P4^0;
sbit OUT18=P5^5;
sbit OUT19=P5^4;
sbit OUT20=P1^4;
sbit OUT21=P1^3;
sbit OUT22=P1^2;
sbit OUT23=P4^7;
sbit OUT24=P1^1;

/*遥控使用1^2,P1^1,P5^3,P5^2;   */
sbit YK0=P0^7;                  
sbit YK1=P0^6;
sbit YK2=P0^5;
sbit YK3=P5^3;

bit bz1=0;
bit bz2=0;
bit bz3=0;
bit bz4=0;
bit bz5=0;
bit bz6=0;
bit bz7=0;
bit bz8=0;
bit bz9=0;
bit bz10=0;
bit bz11=0;
bit bz12=0;
bit bz13=0;
bit bz14=0;
bit bz15=0;
bit bz16=0;
bit bz17=0;
bit bz18=0;
bit bz19=0;
bit bz20=0;
bit bz21=0;
bit bz22=0;
bit bz23=0;
bit bz24=0;
uchar k=10;
uchar dat=0;
/********************************************************************
                            延时函数
*********************************************************************/
void delay(uchar t)
{
  uchar i,j;
   for(i=0;i<t;i++)
   {
            for(j=13;j>0;j--);
         { ;
         }
   }
}
/********************************************************************
                           全开函数
*********************************************************************/
void quankai()
{
OUT1=0;delay(k);
OUT2=0;delay(k);
OUT3=0;delay(k);
OUT4=0;delay(k);
OUT5=0;delay(k);
OUT6=0;delay(k);
OUT7=0;delay(k);
OUT8=0;delay(k);
OUT9=0;delay(k);
OUT10=0;delay(k);
OUT11=0;delay(k);
OUT12=0;delay(k);
OUT13=0;delay(k);
OUT14=0;delay(k);
OUT15=0;delay(k);
OUT16=0;delay(k);
OUT17=0;delay(k);
OUT18=0;delay(k);
OUT19=0;delay(k);
OUT20=0;delay(k);
OUT21=0;delay(k);
OUT22=0;delay(k);
OUT23=0;delay(k);
OUT24=0;delay(k);
}

/********************************************************************
                           全关函数
*********************************************************************/
void quanguan()
{
OUT1=1;delay(k);
OUT2=1;delay(k);
OUT3=1;delay(k);
OUT4=1;delay(k);
OUT5=1;delay(k);
OUT6=1;delay(k);
OUT7=1;delay(k);
OUT8=1;delay(k);
OUT9=1;delay(k);
OUT10=1;delay(k);
OUT11=1;delay(k);
OUT12=1;delay(k);
OUT13=1;delay(k);
OUT14=1;delay(k);
OUT15=1;delay(k);
OUT16=1;delay(k);
OUT17=1;delay(k);
OUT18=1;delay(k);
OUT19=1;delay(k);
OUT20=1;delay(k);
OUT21=1;delay(k);
OUT22=1;delay(k);
OUT23=1;delay(k);
OUT24=1;delay(k);
}
/**********************************************/
/********************************************************************
                            遥控函数
*********************************************************************/
void KEY()
{
if((YK0==0)&&(YK1==0)&&(YK2==0)&&(YK3==1)){OUT1=0;}
if((YK0==0)&&(YK1==0)&&(YK2==1)&&(YK3==0)){OUT1=1;}
if((YK0==0)&&(YK1==0)&&(YK2==1)&&(YK3==1)){OUT2=0;}
if((YK0==0)&&(YK1==1)&&(YK2==0)&&(YK3==0)){OUT2=1;}
if((YK0==0)&&(YK1==1)&&(YK2==0)&&(YK3==1)){OUT3=0;}
if((YK0==0)&&(YK1==1)&&(YK2==1)&&(YK3==0)){OUT3=1;}

if((YK0==0)&&(YK1==1)&&(YK2==1)&&(YK3==1)){OUT4=0;}
if((YK0==1)&&(YK1==0)&&(YK2==0)&&(YK3==0)){OUT4=1;}
if((YK0==1)&&(YK1==0)&&(YK2==0)&&(YK3==1)){OUT5=0;}
if((YK0==1)&&(YK1==0)&&(YK2==1)&&(YK3==0)){OUT5=1;}
if((YK0==1)&&(YK1==0)&&(YK2==1)&&(YK3==1)){OUT6=0;}
if((YK0==1)&&(YK1==1)&&(YK2==0)&&(YK3==0)){OUT6=1;}
}

/********************************************************************
                            主函数
*********************************************************************/
void main(void)
{       
        P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
        P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
        P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
        P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
        P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
        P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
        P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
        P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
        B_TX1_Busy = 0;
        RX1_Cnt = 0;
        TX1_Cnt = 0;

        S1_8bit();                                //8位数据
        S1_USE_P30P31();                //UART1 使用P30 P31口        默认
        AUXR &= ~(1<<4);        //Timer stop                波特率使用Timer2产生
        AUXR |= 0x01;                //S1 BRT Use Timer2;
        AUXR |=  (1<<2);        //Timer2 set as 1T mode
        TH2 = (u8)(Timer2_Reload >> 8);
        TL2 = (u8)Timer2_Reload;
        AUXR |=  (1<<4);        //Timer run enable
        REN = 1;        //允许接收
        ES  = 1;        //允许中断
        EA = 1;                //允许全局中断

        while (1)
        {
        KEY();
    if((IN1==0)&&(bz1==0)){delay(k);if(IN1==0){delay(k);OUT1=!OUT1;bz1=1;}}if((bz1==1)&&(IN1==1)){delay(k);bz1=0;}
    if((IN2==0)&&(bz2==0)){delay(k);if(IN2==0){delay(k);OUT2=!OUT2;bz2=1;}}if((bz2==1)&&(IN2==1)){delay(k);bz2=0;}
    if((IN3==0)&&(bz3==0)){delay(k);if(IN3==0){delay(k);OUT3=!OUT3;bz3=1;}}if((bz3==1)&&(IN3==1)){delay(k);bz3=0;}
    if((IN4==0)&&(bz4==0)){delay(k);if(IN4==0){delay(k);OUT4=!OUT4;bz4=1;}}if((bz4==1)&&(IN4==1)){delay(k);bz4=0;}
    if((IN5==0)&&(bz5==0)){delay(k);if(IN5==0){delay(k);OUT5=!OUT5;bz5=1;}}if((bz5==1)&&(IN5==1)){delay(k);bz5=0;}
    if((IN6==0)&&(bz6==0)){delay(k);if(IN6==0){delay(k);OUT6=!OUT6;bz6=1;}}if((bz6==1)&&(IN6==1)){delay(k);bz6=0;}

    if((IN7==0)&&(bz7==0)){delay(k);if(IN7==0){delay(k);OUT7=!OUT7;bz7=1;}}if((bz7==1)&&(IN7==1)){delay(k);bz7=0;}
    if((IN8==0)&&(bz8==0)){delay(k);if(IN8==0){delay(k);OUT8=!OUT8;bz8=1;}}if((bz8==1)&&(IN8==1)){delay(k);bz8=0;}
    if((IN9==0)&&(bz9==0)){delay(k);if(IN9==0){delay(k);OUT9=!OUT9;bz9=1;}}if((bz9==1)&&(IN9==1)){delay(k);bz9=0;}
    if((IN10==0)&&(bz10==0)){delay(k);if(IN10==0){delay(k);OUT10=!OUT10;bz10=1;}}if((bz10==1)&&(IN10==1)){delay(k);bz10=0;}
    if((IN11==0)&&(bz11==0)){delay(k);if(IN11==0){delay(k);OUT11=!OUT11;bz11=1;}}if((bz11==1)&&(IN11==1)){delay(k);bz11=0;}
    if((IN12==0)&&(bz12==0)){delay(k);if(IN12==0){delay(k);OUT12=!OUT12;bz12=1;}}if((bz12==1)&&(IN12==1)){delay(k);bz12=0;}

    if((IN13==0)&&(bz13==0)){delay(k);if(IN13==0){delay(k);OUT13=!OUT13;bz13=1;}}if((bz13==1)&&(IN13==1)){delay(k);bz13=0;}
    if((IN14==0)&&(bz14==0)){delay(k);if(IN14==0){delay(k);OUT14=!OUT14;bz14=1;}}if((bz14==1)&&(IN14==1)){delay(k);bz14=0;}
    if((IN15==0)&&(bz15==0)){delay(k);if(IN15==0){delay(k);OUT15=!OUT15;bz15=1;}}if((bz15==1)&&(IN15==1)){delay(k);bz15=0;}
    if((IN16==0)&&(bz16==0)){delay(k);if(IN16==0){delay(k);OUT16=!OUT16;bz16=1;}}if((bz16==1)&&(IN16==1)){delay(k);bz16=0;}
    if((IN17==0)&&(bz17==0)){delay(k);if(IN17==0){delay(k);OUT17=!OUT17;bz17=1;}}if((bz17==1)&&(IN17==1)){delay(k);bz17=0;}
    if((IN18==0)&&(bz18==0)){delay(k);if(IN18==0){delay(k);OUT18=!OUT18;bz18=1;}}if((bz18==1)&&(IN18==1)){delay(k);bz18=0;}

    if((IN19==0)&&(bz19==0)){delay(k);if(IN19==0){delay(k);OUT19=!OUT19;bz19=1;}}if((bz19==1)&&(IN19==1)){delay(k);bz19=0;}
        if((IN20==0)&&(bz20==0)){delay(k);if(IN20==0){delay(k);OUT20=!OUT20;bz20=1;}}if((bz20==1)&&(IN20==1)){delay(k);bz20=0;}
        if((IN21==0)&&(bz21==0)){delay(k);if(IN21==0){delay(k);OUT21=!OUT21;bz21=1;}}if((bz21==1)&&(IN21==1)){delay(k);bz21=0;}
        if((IN22==0)&&(bz22==0)){delay(k);if(IN22==0){delay(k);OUT22=!OUT22;bz22=1;}}if((bz22==1)&&(IN22==1)){delay(k);bz22=0;}
        if((IN23==0)&&(bz23==0)){delay(k);if(IN23==0){delay(k);OUT23=!OUT23;bz23=1;}}if((bz23==1)&&(IN23==1)){delay(k);bz23=0;}
        if((IN24==0)&&(bz24==0)){delay(k);if(IN24==0){delay(k);OUT24=!OUT24;bz24=1;}}if((bz24==1)&&(IN24==1)){delay(k);bz24=0;}
        switch(dat) //接收数据判断
{

case 'A': OUT1=0;delay(k);SBUF = dat;dat=0xee;break;           //  第一路开
case 'B': OUT2=0;delay(k);SBUF = dat;dat=0xee;break;           //  第二路开
case 'C': OUT3=0;delay(k);SBUF = dat;dat=0xee;break;           //  第三路开
case 'D': OUT4=0;delay(k);SBUF = dat;dat=0xee;break;           //  第四路开
case 'E': OUT5=0;delay(k);SBUF = dat;dat=0xee;break;           //  第五路开
case 'F': OUT6=0;delay(k);SBUF = dat;dat=0xee;break;           //  第六路开
case 'G': OUT7=0;delay(k);SBUF = dat;dat=0xee;break;           //  第七路开
case 'H': OUT8=0;delay(k);SBUF = dat;dat=0xee;break;           //  第八路开
case 'J': OUT9=0;delay(k);SBUF = dat;dat=0xee;break;           //  第九路开
case 'K': OUT10=0;delay(k);SBUF = dat;dat=0xee;break;           //  第十路开
case 'L': OUT11=0;delay(k);SBUF = dat;dat=0xee;break;           //  第十一路开
case 'M': OUT12=0;delay(k);SBUF = dat;dat=0xee;break;           //  第十二路开
case 'N': OUT13=0;delay(k);SBUF = dat;dat=0xee;break;           //  第十三路开
case 'O': OUT14=0;delay(k);SBUF = dat;dat=0xee;break;           //  第十四路开
case 'P': OUT15=0;delay(k);SBUF = dat;dat=0xee;break;           //  第十五路开
case 'Q': OUT16=0;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'R': OUT17=0;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'S': OUT18=0;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'T': OUT19=0;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'U': OUT20=0;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'V': OUT21=0;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'W': OUT22=0;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'X': OUT23=0;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'Y': OUT24=0;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'I': quankai();SBUF = dat;dat=0xee;break;           //  ...

                       
case 'a': OUT1=1;delay(k);SBUF = dat;dat=0xee;break;           //  第一路关
case 'b': OUT2=1;delay(k);SBUF = dat;dat=0xee;break;           //  第二路关
case 'c': OUT3=1;delay(k);SBUF = dat;dat=0xee;break;           //  第三路关
case 'd': OUT4=1;delay(k);SBUF = dat;dat=0xee;break;           //  第四路关
case 'e': OUT5=1;delay(k);SBUF = dat;dat=0xee;break;           //  第五路关
case 'f': OUT6=1;delay(k);SBUF = dat;dat=0xee;break;           //  第六路关
case 'g': OUT7=1;delay(k);SBUF = dat;dat=0xee;break;           //  第七路关
case 'h': OUT8=1;delay(k);SBUF = dat;dat=0xee;break;           //  第八路关
case 'j': OUT9=1;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'k': OUT10=1;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'l': OUT11=1;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'm': OUT12=1;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'n': OUT13=1;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'o': OUT14=1;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'p': OUT15=1;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'q': OUT16=1;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'r': OUT17=1;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 's': OUT15=1;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 't': OUT19=1;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'u': OUT20=1;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'v': OUT21=1;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'w': OUT22=1;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'x': OUT23=1;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'y': OUT24=1;delay(k);SBUF = dat;dat=0xee;break;           //  ...
case 'i': quanguan();SBUF = dat;dat=0xee;break;           //  ...
default:break;                                           //  跳出
}

/*                if(TX1_Cnt != RX1_Cnt)                //收到过数据
                {
                        if(!B_TX1_Busy)                //发送空闲
                        {
                                B_TX1_Busy = 1;                //标志发送忙
                                SBUF = RX1_Buffer[TX1_Cnt];        //发一个字节
                                if(++TX1_Cnt >= RX1_Lenth)        TX1_Cnt = 0;        //避免溢出处理
                        }
                }
*/
        }
}

/********************* UART1中断函数************************/
void UART1_int (void) interrupt UART1_VECTOR
{
        if(RI)
        {
                RI = 0;
                dat = SBUF;
        //        RX1_Buffer[RX1_Cnt] = SBUF;                //保存一个字节
        //        if(++RX1_Cnt >= RX1_Lenth)        RX1_Cnt = 0;        //避免溢出处理
        }

        if(TI)
        {
                TI = 0;
                B_TX1_Busy = 0;                //清除发送忙标志
        }
}

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



GYJ-0271淘宝描述_10.jpg
GYJ-0271淘宝描述_11.jpg
GYJ-0271淘宝描述_12.jpg
GYJ-0271淘宝描述_13.jpg

STC15W4K32S4单片机设计的24路输入输出继电器可编程工控板带232及485通讯及无线遥控功能.rar

2.89 MB, 下载次数: 37

回复 送花

使用道具 举报

该用户从未签到

46

主题

3006

回帖

6777

积分

超级版主

积分
6777
发表于 2023-6-7 12:21:02 | 显示全部楼层
漂亮!
我以前做的都是8个输入(或光耦输入)8继电器输出(或光耦输出)、16个输入(或光耦输入)16继电器输出(或光耦输出)的,没做过24路的。还有8路电压电流采集卡、16路电压电流采集卡,还有脉冲计数卡,8路串口(485)卡,等等,这些都是工控常用的接口卡。
回复 支持 反对 送花

使用道具 举报

该用户从未签到

42

主题

7

回帖

246

积分

中级会员

积分
246
 楼主| 发表于 2023-6-7 12:33:45 | 显示全部楼层
梁工 发表于 2023-6-7 12:21
漂亮!
我以前做的都是8个输入(或光耦输入)8继电器输出(或光耦输出)、16个输入(或光耦输入)16继电器 ...

单片机工作稳定可靠,现在给华为测试治具用的就是这个板子和STC15W4K32S4单片机
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-13 11:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    3

    主题

    337

    回帖

    1653

    积分

    版主

    积分
    1653
    发表于 2023-6-7 13:20:13 | 显示全部楼层
    QQ:2269694595     微信:18106296594
    回复 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-15 02:35 , Processed in 0.062065 second(s), 43 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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