首页串口屏调试模拟器调试基础知识在没有串口屏的情况下进行调试和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或其他多功能的调试工具例如同时支持ttl232,485arm芯片下载调试等功能的工具推荐使用cp2102芯片或者ft232芯片纯粹USB转ttl工具模拟器调试基础知识在没有串口屏的情况下进行调试提示淘晶驰串口屏的模拟器功能非常强大,您可以在没有串口屏实物的情况下通过模拟器进行调试上位机模拟器几乎可以完全模拟真实的设备。在指令输入区可以直接输入指令不需要结束符模拟器调试示例一在指令输入区可输入指令给文本赋值不需要对引号进行转义在指令输入区可以使用page指令来跳转页面在指令输入区设置亮度设置音量仅x3、x5支持模拟器调试示例二切换到main页面,点击工具箱中的文本,在main页面新建一个文本控件可以通过鼠标移动控件的位置和调整控件的大小点击调试,进入调试页面可以在底部的指令输入区输入指令,并点击执行来实现控件赋值,比如我们让文本控件t0显示”淘晶驰电子”指令如下:t0.txt淘晶驰电子注意赋值指令中的引号是英文的而不是中文的“”也可以修改文本控件的背景颜色,可以通过指令修改的是控件的“绿色属性”哪些控件属性可以运行中修改哪些不能运行中修改绿色属性和黑色属性有什么区别指令如下:t0.bcoYELLOW注意t0.txt”淘晶驰电子”和t0.bcoYELLOW的区别是一个加了引号,一个没有加引号,这是因为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接对方的RXRX接对方的TXGND接对方的GND如果双方都有独立的供电可以不接5V线需要使用到串口工具推荐使用cp2102或者ft232不推荐使用ch340或者pl2303推荐使用官方的串口下载套件连接期间常见的问题有屏幕通电后不断的闪烁(供电不足导致不断重启)可能会找不到串口驱动请参考 安装串口驱动模拟器可以和一个串口屏实物连接也可以和单片机连接在同一时间二者只能其中选择一个连接的接线图如下1.必须保证下面选择的是“键盘输入”上面才能选择模拟器和串口与串口屏进行联机2.当模拟器和一个串口屏实物连接成功时底部将会显示联机成功,以及联机获取到的串口屏参数注意联机成功后,串口屏实物会退出主动解析功能,如果联机后需要使用主动解析功能,需要手动下发一次 recmod1,如果不使用主动解析模式,请勿下发 recmod13.此时输入指令指令会被同时发送到模拟器和串口屏实物上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 SYSCLK20MHz#define IAP_ADDRESS 0x0000 //时间 EEPROM首地址typedef unsigned char BYTE; //Catch_Up接上Catch_Dwon接下typedef unsigned int WORD;bit Signauto0; /*退出循环检测*/bit Rst_Bit0; /**/bit MODE_FLAG; /*工作模式*/sbit MotorP1^0; //电机sbit Cutting_dwonP1^1; //切割机下降sbit OUTAP1^4;sbit OUTBP1^5;sbit OUT0P1^6; //sbit OUT1P1^7; //sbit ManualP1^2; //手动指示sbit AutomaticP1^3; //自动指示sbit INTPUT1P3^2; //自动sbit INTPUT2P3^3; //手动sbit INTPUT3P3^4; //启动信号uint Ad_data;uint Run_TIME; //uint DELAY_A,DELAY_B; //切割延时uint MODEMARK;uint aa0; /****RUN FLAG****/uint a[10]; //定义数组auchar 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; //使能IAPIAP_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; //使能IAPIAP_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 valIapReadByte(IAP_ADDRESS1);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(i0;it;i)for(j0;j1000;j);}/*-----------(1)延时子程序12MHz 加千百十个显示--------*/void Delay100ms(uint x) //{uint i,j;for(i0;ix;i)for(j0;j11000;j);}/********************************************/void resrt_io(){FLAG_S1; //1待 机2切 割printf(va0.val%d\xff\xff\xff,FLAG_S); //Motor1; //电机关Cutting_dwon1; //切割机下降OUTA1; //OUTB1; //Manual0; //手动指示Automatic1; //自动指示}/****************按键计数器状态寄存器归零*************/void RstKey(){kcounter0; //按键计数器归零kstatus0; //状态寄存器归零}/*****************按键低电平检测函数*****************/void LowVoltKey(void) //按键计数器状态标志加一{kcounter;kstatus;}/*****************按键高电平检测函数*****************/void HighVoltKey(void) //按键计数器加一 状态标志归零{kcounter; //按键计数器加一kstatus0; //按键状态标志归零}/******************************************/void red_eeprom(void){uint m,n;mIapReadByte(IAP_ADDRESS); //时间前八位nIapReadByte(IAP_ADDRESS1); //时间后八位DELAY_Am*256n; //排气一段延时时间mIapReadByte(IAP_ADDRESS2); //时间前八位nIapReadByte(IAP_ADDRESS3); //时间后八位DELAY_Bm*256n; //排气一段延时时间MODEMARKIapReadByte(IAP_ADDRESS4);//工作模式}/******************************************/void Write_EepromTime(){IapEraseSector(IAP_ADDRESS); //扇区擦除IapProgramByte(IAP_ADDRESS,DELAY_A/256); // 高位IapProgramByte(IAP_ADDRESS1,DELAY_A%256); // 低位IapProgramByte(IAP_ADDRESS2,DELAY_B/256); // 高位IapProgramByte(IAP_ADDRESS3,DELAY_B%256); // 低位IapProgramByte(IAP_ADDRESS4,MODEMARK); // 工作模式}/*****************************************//***产量 工作模式 自动手动 启动Run_TIME***/void start(){//EX00; //关INT0中断Manual1; //手动指示Automatic0; //自动指示Run_TIME0; //初始化if(MODE_FLAG1){/*一:启动无输入为1,永久循环*/do{ //INTPUT3 启动信号RstKey();for(;kcounter5;) //按键循环5次{if(!INTPUT3) //按键低电平{LowVoltKey(); //按键低电平 计数器加一状态标志加一}else if(~!INTPUT3) //按键高电平{HighVoltKey(); //按键计数器加一 状态标志归零}}if(kstatus3) /*按键状态标志大于等于3为有效值*/{FLAG_S2; //1待 机2切 割printf(va0.val%d\xff\xff\xff,FLAG_S); //定时器刷新标志Motor0; //电机开Cutting_dwon0; //切割机下降Delay100ms(DELAY_B);Motor1; //电机关Cutting_dwon1; //切割机上升FLAG_S1; //1待 机2切 割printf(va0.val%d\xff\xff\xff,FLAG_S); //定时器刷新标志counter; //产量加1printf(n0.val%d\xff\xff\xff,counter); //产量计数Delay100ms(100); //延时 启动按键释放}RstKey(); //for(;kcounter5;) //按键循环5次{if(!INTPUT2) //手动按键低电平{LowVoltKey(); //按键低电平 计数器加一状态标志加一}else if(~!INTPUT2) //手动按键高电平{HighVoltKey(); //按键计数器加一 状态标志归零}}if(kstatus3) /*按键状态标志大于等于3为有效值*/{FLAG_S1; //1待 机2切割printf(va0.val%d\xff\xff\xff,FLAG_S); //FLAG_S1; //1手 动2自 动printf(va1.val%d\xff\xff\xff,FLAG_S); //va1触摸屏变量 发送第一次resrt_io();Signauto0; /*行程输入信号连续检测到3次Signauto0退出循环*/Run_Flag0;break;}//手动退出位置循环}while(Run_Flag);}//位置模式else{do{Delay100ms(10);Run_TIME;printf(n3.val%d\xff\xff\xff,Run_TIME); //计时器显示if(Run_TIMEDELAY_A){FLAG_S2; //1待 机2切 割printf(va0.val%d\xff\xff\xff,FLAG_S); //定时器刷新标志Motor0; //电机开Cutting_dwon0; //切割机下降Delay100ms(DELAY_B);Motor1; //电机关Cutting_dwon1; //切割机上升FLAG_S1; //1待 机2切 割printf(va0.val%d\xff\xff\xff,FLAG_S); //定时器刷新标志Run_TIME0; //计时器归零counter; //产量加1printf(n0.val%d\xff\xff\xff,counter);//产量计数}RstKey(); //for(;kcounter5;) //按键循环5次{if(!INTPUT2) //手动按键低电平{LowVoltKey(); //按键低电平 计数器加一状态标志加一}else if(~!INTPUT2) //手动按键高电平{HighVoltKey(); //按键计数器加一 状态标志归零}}if(kstatus3) /*按键状态标志大于等于3为有效值*/{FLAG_S1; //1待 机2切割printf(va0.val%d\xff\xff\xff,FLAG_S); //Delay100ms(2);FLAG_S1; //1手 动2自 动printf(va1.val%d\xff\xff\xff,FLAG_S); //va1触摸屏变量 发送第一次resrt_io();Signauto0; /*行程输入信号连续检测到3次Signauto0退出循环*/Run_Flag0;break;}}while(Run_Flag);}//时间模式}/*------------初始化串口---------------------*/void InitUart(){SCON0X50; //8位数据可变波特率AUXR|0x01; //串口1选择定时器2为波特率发生器AUXR|0X04; //定时器2时钟为Fosc即1TT2L0XE0; //设置定时器处置 110592》9600T2H0XFE; //设置定时器处置 110592》9600AUXR|0X10; //启动定时器2TI1;ES1; //EA1;}/*×--------UART 中断服务程序-------------------**//**×**把接收到的数据存进数组a[i]**i开机初始化****//***×*接收到触摸屏结束码Receive_Flag标志位置1****/void Uart() interrupt 4 using 1{if(RI){if(SBUF0XFA) //触摸屏结束码{Receive_Flag1; //接收数据标志置一RI0; //i0; //数组计数器归零}else{a[i]SBUF; //数组下标位置的数据等于SBUFRI0; //i;}}}/**************定时中断*************************/void timer0() interrupt 1{TH00X53;TL00X32;aa;if(aa300){OUT1~OUT1;aa0;}}/*************************************************///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( ) /*主程序开始*/{AUXR0X80; //STC系列的1T 设置TMOD0X01;TH00X53;TL00X32;ET01;TR01;P_SW10x00; //RXD/P3.0, TXD/P3.1Receive_Flag0;delay(20);InitUart(); //初始化串口resrt_io();Delay100ms(20);red_eeprom(); //if(MODEMARK0X55) //工作模式MODE_FLAG0; //else //MODE_FLAG1; //printf(XFF,XFF,XFF); //i0; //数据接收计数器等于0Run_Flag0; //自动标志等于0counter0; //产量归零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(;kcounter5;) //按键循环5次{if(!INTPUT1) //按键低电平{LowVoltKey();}else if(~!INTPUT1) //按键高电平{HighVoltKey();}}if(kstatus4) /*按键状态标志大于等于3为有效值*/{ /*循环检测 */Run_Flag1; //自动运行标志}//自动if(Receive_Flag1) //串口数据更新标志{Receive_Flag0;if(a[0]0XE0) //EEPROM参数存储{OUT00; //写EEPROM指示if(a[1]0X00){DELAY_Aa[3]*256a[2]; //延时切割时间}if(a[1]0X01){DELAY_Ba[3]*256a[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) //{OUTB0;MODE_FLAG0; /*工作模式*/MODEMARK0X55;}else if(a[1]0X01) //{OUTB1;MODE_FLAG1; /*工作模式*/MODEMARK0XAA;}}//工作模式else if(a[0]0XF0) //B0 00发送主画面 内容{if(a[1]0X00) //电机开启{Motor0;}else if(a[1]0X01) //电机关闭{Motor1;}else if(a[1]0X02) //电机开启{Cutting_dwon0; //切割机下降}else if(a[1]0X03) //电机关闭{Cutting_dwon1; //切割机下降}}}//if(Run_Flag1) //自动运行标志{printf(page 0\XFF\XFF\XFF); //自动界面显示Manual1; //手动指示Automatic0; //自动指示FLAG_S2; //1手 动2自 动printf(va1.val%d\xff\xff\xff,FLAG_S); //va1触摸屏变量 发送第一次Delay100ms(5);start(); //自动运行循环子程序}}} //L463 CODE2595 2026 5 10