不锈钢焊管机切割控制触摸屏编程
2026/5/11 18:00:10 网站建设 项目流程

首页

串口屏调试

模拟器调试基础知识
在没有串口屏的情况下进行调试
和USB转TTL的接线说明
和单片机的接线说明
联机调试基础知识
模拟器(电脑)与串口屏实物连接
模拟器(电脑)与单片机连接
串口屏与单片机连接
串口屏通讯协议
单片机发送数据给串口屏
串口屏发送数据给单片机
串口助手软件(sscom)和屏幕联调
sscom和屏幕联调-样例工程下载
串口助手软件(sscom)和串口屏模拟器联调1
串口助手软件(sscom)和串口屏模拟器联调2
其他串口助手
串口助手软件(uartassist)和屏幕联调
串口助手软件(xcom)和屏幕联调
串口助手软件(llcom)和屏幕联调
与stm32单片机联调
stm32说明
stm32 HAL库开发
与TI(德州仪器)单片机联调
与TI(德州仪器)单片机联调准备工作
与TI(德州仪器)单片机联调2
与TI(德州仪器)单片机联调可能出现的问题
TI(德州仪器)工程下载
与arduino联调
arduino uno与串口屏通讯
arduino mega2560与串口屏通讯
米思齐Mixly arduino mega2560与串口屏通讯
ESP32C3与串口屏通讯
ESP32S3(源地)与串口屏通讯
ESP32S3(合宙)与串口屏通讯
ESP32S3(嘉立创)与串口屏通讯
树莓派pico使用arduino与串口屏通讯
arduino通讯演示工程下载
与MicroPython联调
树莓派pico使用MicroPython与串口屏通讯
MicroPython通讯演示工程下载
与python联调
python发送数据给屏幕
python获取电脑状态
python获取奥运奖牌
python通讯演示工程下载

串口调试软件推荐使用《sscom5.13.1》或者《格西调试精灵》

下载链接:

《sscom5.13.1》

《格西调试精灵》

USB转ttl工具请不要使用ch340或者pl2303或其他多功能的调试工具(例如同时支持ttl,232,485,arm芯片下载调试等功能的工具)

推荐使用cp2102芯片或者ft232芯片纯粹USB转ttl工具

模拟器调试基础知识

在没有串口屏的情况下进行调试

提示

淘晶驰串口屏的模拟器功能非常强大,您可以在没有串口屏实物的情况下通过模拟器进行调试

上位机模拟器几乎可以完全模拟真实的设备。

在指令输入区可以直接输入指令,不需要结束符

模拟器调试示例一

在指令输入区可输入指令给文本赋值,不需要对引号进行转义

在指令输入区可以使用page指令来跳转页面

在指令输入区设置亮度

设置音量(仅x3、x5支持)

模拟器调试示例二

切换到main页面,点击工具箱中的文本,在main页面新建一个文本控件

可以通过鼠标移动控件的位置和调整控件的大小

点击调试,进入调试页面

可以在底部的指令输入区输入指令,并点击执行来实现控件赋值,比如我们让文本控件t0显示”淘晶驰电子”

指令如下:

t0.txt="淘晶驰电子"

注意

赋值指令中的引号是英文的""而不是中文的“”

也可以修改文本控件的背景颜色,可以通过指令修改的是控件的“绿色属性”

哪些控件属性可以运行中修改,哪些不能运行中修改,绿色属性和黑色属性有什么区别?

指令如下:

t0.bco=YELLOW

注意

t0.txt=”淘晶驰电子”和t0.bco=YELLOW的区别是一个加了引号,一个没有加引号,这是因为txt是字符串,bco则是整形,目前只有txt,path,dir,filter是字符串,其他均为整形

txt属性和val属性有什么区别,为什么有些属性赋值要加双引号,有些不用加双引号

和USB转TTL的接线说明

串口屏的TX(发送)接USB转TTL的RX(接收)

串口屏的RX(接收)接USB转TTL的TX(发送)

串口屏的GND要和USB转TTL的GND连接在一起(共地)

如果上电时发现串口屏不断重启(4.3寸以上的屏幕以及带喇叭的屏幕),可能是供电不足,这时候需要并联一个电源来提高电流

需要额外找一个电源引出电源正负极,注意正负极之间的电压应该在屏幕的供电范围内

将电源正极接到屏幕的VCC上(请注意电压范围)

电源负极接到GND(共地)

这样就实现了对屏幕的额外供电

下图为官方的USB转TTL,可以直接接DC直流电源进行供电

注意

UART(以及USART)串口只能一对一,串口不允许接多个设备,一个串口只能接一个设备

联机调试基础知识

单片机/串口屏/电脑模拟器如何连接

注意

任一时间,只允许一对一连接,有以下3种情况:

  • 模拟器(电脑)与串口屏实物连接
  • 模拟器(电脑)与单片机连接
  • 串口屏与单片机连接

任意两个设备之间连接,均是TX接对方的RX,RX接对方的TX,GND接对方的GND,如果双方都有独立的供电,可以不接5V线

需要使用到串口工具,推荐使用cp2102或者ft232,不推荐使用ch340或者pl2303

推荐使用官方的串口下载套件

连接期间常见的问题有:

屏幕通电后不断的闪烁(供电不足导致不断重启)

可能会找不到串口驱动,请参考 安装串口驱动

模拟器可以和一个串口屏实物连接,也可以和单片机连接,在同一时间二者只能其中选择一个

连接的接线图如下

1.必须保证下面选择的是“键盘输入”,上面才能选择模拟器和串口,与串口屏进行联机


2.当模拟器和一个串口屏实物连接成功时,底部将会显示联机成功,以及联机获取到的串口屏参数

注意

联机成功后,串口屏实物会退出主动解析功能,如果联机后需要使用主动解析功能,需要手动下发一次 recmod=1,如果不使用主动解析模式,请勿下发 recmod=1


3.此时输入指令,指令会被同时发送到模拟器和串口屏实物上


5.除此之外,如果屏幕是带RTC的(例如X5/K0系列),可以校准RTC(必须是在联机成功的状态下),校准前请安装串口屏实物背部的RTC电池,型号是CR1220


串口屏连接stm32

串口屏连接arduino mega 2560

串口屏连接arduino mega uno

串口屏与单片机连接说明1

这是淘晶驰官方的USB转TTL转接板,其作用有以下两种:

1、电脑通过USB转TTL连接串口屏进行下载或者调试

2、电脑通过USB转TTL连接单片机进行通讯

如果不使用电脑时,请勿通过USB转TTL工具连接单片机和串口屏,怎么接都不行!

部分客户使用的是正点原子、野火等公司的开发板,看到板子上有USB口,就直接把USB转TTL工具插上去。

或者是开发板有microUSB接口或者typec接口,把自己的手机充电线插进去,这是万万不行的。

因为这时候你的单片机开发板是接入了一个USB设备而不是USART设备,除非你去驱动这个USB外设先与这个USB转TTL进行通讯,否则是不能跟屏幕进行通讯的。

正确接法如下:

请查看你的开发板的原理图,找到一个没有连接任何外设的USART串口来连接串口屏,一般上面都是标注(USARTn_TXD,USARTn_RXD),大部分开发板的第一个串口USART0_TXD,USART0_RXD大概率已经连接了一个USB转TTL芯片用于连接电脑,请避开这个串口。

所有控件详解


页面控件
文本控件
滚动文本控件
数字控件
虚拟浮点数控件
按钮控件
进度条控件
图片控件
切图控件
触摸热区控件
触摸捕捉控件
指针控件
曲线波形控件
滑块控件
定时器控件
变量控件
双态按钮控件
复选框控件
单选框控件
二维码控件
状态开关控件
下拉框控件
选择文本控件
滑动文本控件
数据记录控件
文件浏览器控件
文件流控件
动画控件
视频控件
音频控件
外部图片控件

提示

导入字库请参考: 如何导入字库

导入图片请参考: 如何导入图片

导入动画请参考: 如何导入动画

导入视频请参考: 如何导入视频

导入音频请参考: 如何导入音频
关于控件属性的说明

endx:控件右侧横坐标,等于控件起始横坐标x加上控件宽度w

显示隐藏控件

本文介绍了一种焊管机切割控制程序的设计与实现。该程序基于STC单片机开发,通过IAP/EEPROM存储关键参数,实现了自动和手动两种工作模式切换。系统包含电机控制、切割机升降、延时控制等功能模块,采用串口通信与触摸屏进行数据交互。程序通过状态标志位管理运行流程,具备参数存储、产量计数、故障检测等功能。设计中采用了按键消抖、数据校验等可靠性措施,并通过定时器中断实现精确时序控制。该控制系统结构清晰,功能完善,可有效满足焊管生产线的自动化切割需求。/*********焊管机切割控制程序************/

/*********焊管机切割控制程序************/
/****L463 CODE2595 2026 5 10******/
/*********位置 启动 自动 手动***********/
/*********电机 气缸 手动 自动***********/
#include <REG52.H> // cutting 切割
#include <intrins.h> //
#include <string.h> //
#include "stdio.h" //
#define uint unsigned int //
#define uchar unsigned char //
#define CMD_IDLE 0 //空闲模式
#define CMD_READ 1 //IAP字节读命令
#define CMD_PROGRAM 2 //IAP字节编程命令
#define CMD_ERASE 3 //IAP扇区擦除命令
#define ENABLE_IAP 0x82 //if SYSCLK<20MHz
#define IAP_ADDRESS 0x0000 //时间 EEPROM首地址
typedef unsigned char BYTE; //Catch_Up接上Catch_Dwon接下
typedef unsigned int WORD;
bit Signauto=0; /*退出循环检测*/
bit Rst_Bit=0; /**/
bit MODE_FLAG; /*工作模式*/
sbit Motor=P1^0; //电机
sbit Cutting_dwon=P1^1; //切割机下降
sbit OUTA=P1^4;
sbit OUTB=P1^5;
sbit OUT0=P1^6; //
sbit OUT1=P1^7; //
sbit Manual=P1^2; //手动指示
sbit Automatic=P1^3; //自动指示
sbit INTPUT1=P3^2; //自动
sbit INTPUT2=P3^3; //手动
sbit INTPUT3=P3^4; //启动信号
uint Ad_data;
uint Run_TIME; //
uint DELAY_A,DELAY_B; //切割延时
uint MODEMARK;
uint aa=0; /****RUN FLAG****/
uint a[10]; //定义数组a
uchar i; //串口接收计数器
uchar k; //信号输入高电平计数器
uint counter; //产量计数器
bit Receive_Flag; //串口接收标志
bit Run_Flag; //自动运行标志
uint FLAG_S; //触摸屏显示标志
uchar kcounter,kstatus; //按键计数标志 按键状态标志
/*----关闭IAP----------------------------*/
void IapIdle()
{
IAP_CONTR = 0; //关闭IAP功能
IAP_CMD = 0; //清除命令寄存器
IAP_TRIG = 0; //清除触发寄存器
IAP_ADDRH = 0x80; //将地址设置到非IAP区域
IAP_ADDRL = 0;
}
/*-从ISP/IAP/EEPROM区域读取一字节-*/
BYTE IapReadByte(WORD addr)
{
BYTE dat; //数据缓冲区
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_CMD = CMD_READ; //设置IAP命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
dat = IAP_DATA; //读ISP/IAP/EEPROM数据
IapIdle(); //关闭IAP功能
return dat; //返回
}
/*-写一字节数据到ISP/IAP/EEPROM区域-*/
void IapProgramByte(WORD addr, BYTE dat)
{
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_CMD = CMD_PROGRAM; //设置IAP命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_DATA = dat; //写ISP/IAP/EEPROM数据
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
IapIdle();
}
/*---扇区擦除---------------*/
void IapEraseSector(WORD addr)
{
IAP_CONTR = ENABLE_IAP; //使能IAP val=IapReadByte(IAP_ADDRESS+1);
IAP_CMD = CMD_ERASE; //设置IAP命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
IapIdle();
}
/*------------------------------------------*/
void delay(uint t)
{
uint i,j;
for(i=0;i<t;i++)
for(j=0;j<1000;j++);
}
/*-----------(1)延时子程序12MHz 加千百十个显示--------*/
void Delay100ms(uint x) //
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<11000;j++);
}
/********************************************/
void resrt_io()
{
FLAG_S=1; //1待 机2切 割
printf("va0.val=%d\xff\xff\xff",FLAG_S); //
Motor=1; //电机关
Cutting_dwon=1; //切割机下降
OUTA=1; //
OUTB=1; //
Manual=0; //手动指示
Automatic=1; //自动指示
}
/****************按键计数器状态寄存器归零*************/
void RstKey()
{
kcounter=0; //按键计数器归零
kstatus=0; //状态寄存器归零
}
/*****************按键低电平检测函数*****************/
void LowVoltKey(void) //按键计数器状态标志加一
{
kcounter++;
kstatus++;
}
/*****************按键高电平检测函数*****************/
void HighVoltKey(void) //按键计数器加一 状态标志归零
{
kcounter++; //按键计数器加一
kstatus=0; //按键状态标志归零
}
/******************************************/
void red_eeprom(void)
{
uint m,n;
m=IapReadByte(IAP_ADDRESS); //时间前八位
n=IapReadByte(IAP_ADDRESS+1); //时间后八位
DELAY_A=m*256+n; //排气一段延时时间
m=IapReadByte(IAP_ADDRESS+2); //时间前八位
n=IapReadByte(IAP_ADDRESS+3); //时间后八位
DELAY_B=m*256+n; //排气一段延时时间
MODEMARK=IapReadByte(IAP_ADDRESS+4);//工作模式
}
/******************************************/
void Write_EepromTime()
{
IapEraseSector(IAP_ADDRESS); //扇区擦除
IapProgramByte(IAP_ADDRESS,DELAY_A/256); // 高位
IapProgramByte(IAP_ADDRESS+1,DELAY_A%256); // 低位
IapProgramByte(IAP_ADDRESS+2,DELAY_B/256); // 高位
IapProgramByte(IAP_ADDRESS+3,DELAY_B%256); // 低位
IapProgramByte(IAP_ADDRESS+4,MODEMARK); // 工作模式
}
/*****************************************/
/***产量 工作模式 自动手动 启动Run_TIME***/
void start()
{
//EX0=0; //关INT0中断
Manual=1; //手动指示
Automatic=0; //自动指示
Run_TIME=0; //初始化
if(MODE_FLAG==1)
{
/*一:启动无输入为1,永久循环*/
do
{ //INTPUT3 启动信号
RstKey();
for(;kcounter<5;) //按键循环5次
{
if(!INTPUT3) //按键低电平
{
LowVoltKey(); //按键低电平 计数器加一状态标志加一
}
else if(~!INTPUT3) //按键高电平
{
HighVoltKey(); //按键计数器加一 状态标志归零
}
}
if(kstatus>=3) /*按键状态标志大于等于3为有效值*/
{
FLAG_S=2; //1待 机2切 割
printf("va0.val=%d\xff\xff\xff",FLAG_S); //定时器刷新标志
Motor=0; //电机开
Cutting_dwon=0; //切割机下降
Delay100ms(DELAY_B);
Motor=1; //电机关
Cutting_dwon=1; //切割机上升
FLAG_S=1; //1待 机2切 割
printf("va0.val=%d\xff\xff\xff",FLAG_S); //定时器刷新标志
counter++; //产量加1
printf("n0.val=%d\xff\xff\xff",counter); //产量计数
Delay100ms(100); //延时 启动按键释放
}
RstKey(); //
for(;kcounter<5;) //按键循环5次
{
if(!INTPUT2) //手动按键低电平
{
LowVoltKey(); //按键低电平 计数器加一状态标志加一
}
else if(~!INTPUT2) //手动按键高电平
{
HighVoltKey(); //按键计数器加一 状态标志归零
}
}
if(kstatus>=3) /*按键状态标志大于等于3为有效值*/
{
FLAG_S=1; //1待 机2切割
printf("va0.val=%d\xff\xff\xff",FLAG_S); //
FLAG_S=1; //1手 动2自 动
printf("va1.val=%d\xff\xff\xff",FLAG_S); //va1触摸屏变量 发送第一次
resrt_io();
Signauto=0; /*行程输入信号连续检测到3次Signauto=0退出循环*/
Run_Flag=0;
break;
}
//手动退出位置循环
}
while(Run_Flag);
}
//位置模式
else
{
do
{
Delay100ms(10);
Run_TIME++;
printf("n3.val=%d\xff\xff\xff",Run_TIME); //计时器显示
if(Run_TIME>=DELAY_A)
{
FLAG_S=2; //1待 机2切 割
printf("va0.val=%d\xff\xff\xff",FLAG_S); //定时器刷新标志
Motor=0; //电机开
Cutting_dwon=0; //切割机下降
Delay100ms(DELAY_B);
Motor=1; //电机关
Cutting_dwon=1; //切割机上升
FLAG_S=1; //1待 机2切 割
printf("va0.val=%d\xff\xff\xff",FLAG_S); //定时器刷新标志
Run_TIME=0; //计时器归零
counter++; //产量加1
printf("n0.val=%d\xff\xff\xff",counter);//产量计数
}
RstKey(); //
for(;kcounter<5;) //按键循环5次
{
if(!INTPUT2) //手动按键低电平
{
LowVoltKey(); //按键低电平 计数器加一状态标志加一
}
else if(~!INTPUT2) //手动按键高电平
{
HighVoltKey(); //按键计数器加一 状态标志归零
}
}
if(kstatus>=3) /*按键状态标志大于等于3为有效值*/
{
FLAG_S=1; //1待 机2切割
printf("va0.val=%d\xff\xff\xff",FLAG_S); //
Delay100ms(2);
FLAG_S=1; //1手 动2自 动
printf("va1.val=%d\xff\xff\xff",FLAG_S); //va1触摸屏变量 发送第一次
resrt_io();
Signauto=0; /*行程输入信号连续检测到3次Signauto=0退出循环*/
Run_Flag=0;
break;
}
}
while(Run_Flag);
}
//时间模式
}
/*------------初始化串口---------------------*/
void InitUart()
{
SCON=0X50; //8位数据,可变波特率
AUXR|=0x01; //串口1选择定时器2为波特率发生器
AUXR|=0X04; //定时器2时钟为Fosc,即1T
T2L=0XE0; //设置定时器处置 110592》9600
T2H=0XFE; //设置定时器处置 110592》9600
AUXR|=0X10; //启动定时器2
TI=1;
ES=1; //
EA=1;
}
/*×--------UART 中断服务程序-------------------**/
/**×**把接收到的数据存进数组a[i]**i开机初始化****/
/***×*接收到触摸屏结束码Receive_Flag标志位置1****/
void Uart() interrupt 4 using 1
{
if(RI)
{
if(SBUF==0XFA) //触摸屏结束码
{
Receive_Flag=1; //接收数据标志置一
RI=0; //
i=0; //数组计数器归零
}
else
{
a[i]=SBUF; //数组下标位置的数据等于SBUF
RI=0; //
i++;
}
}
}
/**************定时中断*************************/
void timer0() interrupt 1
{
TH0=0X53;
TL0=0X32;
aa++;
if(aa>=300)
{
OUT1=~OUT1;
aa=0;
}
}
/*************************************************/
//E0 00 循环时间
//E0 01 切割时间
//B0 00 显示参数
//printh F0 00 00 00 00 00 FA 电机开启
//printh F0 01 00 00 00 00 FA 电机关闭
//printh F0 02 00 00 00 00 FA 切割开启
//printh F0 03 00 00 00 00 FA 切割关闭
void main( ) /*主程序开始*/
{
AUXR=0X80; //STC系列的1T 设置
TMOD=0X01;
TH0=0X53;
TL0=0X32;
ET0=1;
TR0=1;
P_SW1=0x00; //RXD/P3.0, TXD/P3.1
Receive_Flag=0;
delay(20);
InitUart(); //初始化串口
resrt_io();
Delay100ms(20);
red_eeprom(); //
if(MODEMARK==0X55) //工作模式
MODE_FLAG=0; //
else //
MODE_FLAG=1; //
printf("XFF,XFF,XFF"); //
i=0; //数据接收计数器等于0
Run_Flag=0; //自动标志等于0
counter=0; //产量归零
printf("n0.val=%d\xff\xff\xff",counter); // 产量计数
printf("n0.val=%d\xff\xff\xff",counter); // 产量计数
printf("n1.val=%d\xff\xff\xff",DELAY_A); // 延时切割时间
printf("n2.val=%d\xff\xff\xff",DELAY_B); // 切割时间
while(1)
{
OUT0=~OUT0; //手动循环信号指示
Delay100ms(20);
////////////////////////////////
RstKey(); //按键复位
for(;kcounter<5;) //按键循环5次
{
if(!INTPUT1) //按键低电平
{
LowVoltKey();
}
else if(~!INTPUT1) //按键高电平
{
HighVoltKey();
}
}
if(kstatus>=4) /*按键状态标志大于等于3为有效值*/
{ /*循环检测 */
Run_Flag=1; //自动运行标志
}
//自动
if(Receive_Flag==1) //串口数据更新标志
{
Receive_Flag=0;
if(a[0]==0XE0) //EEPROM参数存储
{
OUT0=0; //写EEPROM指示
if(a[1]==0X00)
{
DELAY_A=a[3]*256+a[2]; //延时切割时间
}
if(a[1]==0X01)
{
DELAY_B=a[3]*256+a[2]; //延时切割时间
}
Write_EepromTime();
red_eeprom();
printf("n1.val=%d\xff\xff\xff",DELAY_A);//切割循环时间 校对
printf("n1.val=%d\xff\xff\xff",DELAY_A);//切割循环时间 校对
printf("n2.val=%d\xff\xff\xff",DELAY_B);//切割时间 校对
}
//
else if(a[0]==0XB0) //B0 00发送主画面 内容
{
if(a[1]==0X00) //
{
red_eeprom();
printf("n1.val=%d\xff\xff\xff",DELAY_A);//切割循环时间 校对
printf("n1.val=%d\xff\xff\xff",DELAY_A);//切割循环时间 校对
printf("n2.val=%d\xff\xff\xff",DELAY_B);//切割时间 校对
}
}
//发送参数到触摸屏
else if(a[0]==0XC0) //控制模式
{
if(a[1]==0X00) //
{
OUTB=0;
MODE_FLAG=0; /*工作模式*/
MODEMARK=0X55;
}
else if(a[1]==0X01) //
{
OUTB=1;
MODE_FLAG=1; /*工作模式*/
MODEMARK=0XAA;
}
}
//工作模式
else if(a[0]==0XF0) //B0 00发送主画面 内容
{
if(a[1]==0X00) //电机开启
{
Motor=0;
}
else if(a[1]==0X01) //电机关闭
{
Motor=1;
}
else if(a[1]==0X02) //电机开启
{
Cutting_dwon=0; //切割机下降
}
else if(a[1]==0X03) //电机关闭
{
Cutting_dwon=1; //切割机下降
}
}
}
//
if(Run_Flag==1) //自动运行标志
{
printf("page 0\XFF\XFF\XFF"); //自动界面显示
Manual=1; //手动指示
Automatic=0; //自动指示
FLAG_S=2; //1手 动2自 动
printf("va1.val=%d\xff\xff\xff",FLAG_S); //va1触摸屏变量 发送第一次
Delay100ms(5);
start(); //自动运行循环子程序
}
}
} //L463 CODE2595 2026 5 10

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询