最近有个项目需要使用屏幕实时显示系统的电压电流,使用串口屏能减少很多额外的工作量,在此做一个开发记录。
选择了淘晶驰家的串口屏,这里选用的是3.5寸的触屏显示。
附上官方文档:
start [USART HMI 资料中心] (tjc1688.com)
官方的上位机软件:
2.上位软件下载:1.最新版本下载 [USART HMI 资料中心] (tjc1688.com)
查看官方手册,找到需要参考的地方:
一、串口数据解析模式之被动解析模式
在默认情况下屏接收设备发送数据完整格式为字符串指令加上3个16进制ff,如果屏接收到不完整或者错误指令将会返回数据。例如①1a ff ff ff
②1c ff ff ff等;可通过bkcmd进行开启关闭返回数据。(在正常情况下建议先将屏幕报错原因找到解决了,再指令关闭返回数据)
1.1 以文本控件显示为例
单片机如何控制屏幕(文本控件)
1、在上位机工程新建一个文本控件,假设为t0,将程序下载到串口屏上,
2、串口屏串口与单片机串口连接,两者波特率应一致,单片机RX接串口屏TX,单片机TX接串口屏RX。
3、发送指令:单片机串口通过字符串模式发送t0.txt="六六六"
4、发送结束符:单片机通过HEX模式发送0xff 0xff 0xff
5、此时屏幕上的t0控件内的文字变为“六六六”
1.2 以数字控件显示为例
单片机如何控制屏幕(数字控件)
1、在上位机工程新建一个数字控件,假设为n0,将程序下载到串口屏上,
2、串口屏串口与单片机串口连接,两者波特率应一致,单片机RX接串口屏TX,单片机TX接串口屏RX。
3、发送指令:单片机串口通过字符串模式发送n0.val=666
4、发送结束符:单片机通过HEX模式发送0xff 0xff 0xff
5、此时屏幕上的n0控件内的文字变为“666”
1.3.1 C语言为例
在通常情况下单片机是很少发送一个常量给屏赋值的,大多数情况都是单片机赋值一个变量到屏幕上的。下面代码以C语言为例
printf("n0.val=666"); 发送命令
printf("\xff\xff\xff"); 发送结束符
printf("n0.val=666\xff\xff\xff");
printf("n0.val=%d\xff\xff\xff",MyData); 一次性发完命令和结束符
printf("t0.txt=\"%d\"\xff\xff\xff",MyTxt); 一次性发完命令和结束符
注:这里发送16进制是用\xff,若不明白"\"使用法,自行百度"c语言转义字符"。
接下来就可以来实际建立工程了
1.第一步建立工程:
2、选择路径,并设置名称
3、根据自己购买的型号选择对应的型号,型号可以在屏幕的背后看到,如果看不懂型号可以查看这里
4、选择显示方向和字符编码,字符编码如果没有特殊需求,建议使用GB2312编码,目前中文输入法只支持GB2312,请确保单片机端与串口屏的编码一致,避免使用时乱码,
5、点击ok键,工程建立完成
6、新建的工程如下所示
7、切换到Program.s,并在page指令之前添加如下配置
8、添加字库(可以只添加本工程使用的部分字库)根据需要设置字高,编码(请务必与工程编码保持一致)
9、保存字库 ,添加好后在左下角窗口显示
接下来可以添加显示页面以及控件了,首先添加Program.s文件,此文件是系统初始化代码,全局变量定义。sys0、sys1、sys2为全局变量只支持int型变量。bauds为定义波特率9600;bkcmd设置在执行错误时会返回数据。
在更新电流显示的时候只需给串口屏发送以下字符串
x0.val=250
x1.val=250
x2.val=250
x3.val=250
x4.val=250
x5.val=250
显示效果如下;
二、配置DSP28335的SCI模式配置
管脚配置:
void InitSciaGpio()
{
EALLOW;
GpioCtrlRegs.GPBPUD.bit.GPIO36 = 0; // Enable pull-up for GPIO36 (SCIRXDA)
GpioCtrlRegs.GPBPUD.bit.GPIO35 = 0; // Enable pull-up for GPIO35 (SCITXDA)
GpioCtrlRegs.GPBQSEL1.bit.GPIO35 = 3; // Asynch input GPIO35 (SCITXDA)
GpioCtrlRegs.GPBQSEL1.bit.GPIO36 = 3; // Asynch input GPIO36 (SCIRXDA)
GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 1; // Configure GPIO36 for SCIRXDA operation
GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 1; // Configure GPIO35 for SCITXDA operation
EDIS;
}
SCI工作方式和参数设置
void scic_echoback_init()
{
ScibRegs.SCICCR.all = 0x0007;//1位停止位,无奇偶校验位,8个数据位
ScibRegs.SCICTL1.all=0x003;
ScibRegs.SCICTL2.all=0x003;
ScibRegs.SCICTL2.bit.TXINTENA= 1;
ScibRegs.SCICTL2.bit.RXBKINTENA= 1;
#if(CPU_FRQ_150MHZ)
ScicRegs.SCIHBAUD = 0x0001;// 9600 baud
ScibRegs.SCILBAUD = 0x00E7;
#endif
ScibRegs.SCICTL1.all=0x023;
}
发送函数
void scic_msg(char * msg)
{
int i;
i=0;
while(msg[i]!='\0')
{
scic-xmit(msg[i]);
i++;
}
}
main函数:
void main(void)
{
char *msg;
msg="x0.val=250\0";
scic_msg(msg);
}
这样就可以实现显示了。功能比较简单,其他功能可以详细参考使用手册进行二次开发。