找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 334|回复: 10
收起左侧

菜鸟小白还要请教串口屏的问题

[复制链接]
ID:477441 发表于 2024-11-9 17:02 | 显示全部楼层 |阅读模式
CLS(0) 是串口屏的清屏命令,我用下面的程序串口屏啥反应都没有,但我在串口助手可以看到连续发送的数据是正常的 CLS(0),我在示波器上看到数据的驱动电压幅度在5V左右,应该是够用的,(我没有逻辑分析仪)

#include <reg52.h>

#define uchar unsigned char                                                 //定义unsigned char型数据简写
#define uint unsigned int                                                 //定义unsigned int型数据简写
#define ulong unsigned long       

void Uart1_init()        //57600bps@11.0592MHz,串口初始化
{
        PCON |= 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位数据,可变波特率
        TMOD &= 0x0F;                //设置定时器模式
        TMOD |= 0x20;                //设置定时器模式
        TL1 = 0xFF;                        //设置定时初始值
        TH1 = 0xFF;                        //设置定时重载值
        ET1 = 0;                        //禁止定时器中断
        TR1 = 1;                        //定时器1开始计时
}


void delayMS(uint ms)        //毫秒延时                            
{
    uchar i, j;
    while(ms--)
    {
        i = 11;
        j = 190;
        do
        {
            while (--j);
        } while (--i);
}


void SendByte(uchar dat)//向串口发送一个字节
{
    TI=0;
    SBUF=dat;
    while(!TI);
    TI=0;
}


void SendStr(uchar *s)//向串口发送字符串
{
    while(*s)     //通过检测字符串末尾0x00停止发送
    {
        SendByte(*s++);
    }
        delayMS(5);
}


void main()
{
        Uart1_init();
        while (1)
        {
                SendStr("CLS(0);\r\n");
                delayMS(100);
        }
}       










       

回复

使用道具 举报

ID:477441 发表于 2024-11-9 17:08 | 显示全部楼层
串口屏的波特率也是57600,串口屏单独接在电脑USB转串口57600试过,在电脑发送 CLS(0) 时,串口屏是可以清屏的
回复

使用道具 举报

ID:403593 发表于 2024-11-10 11:17 | 显示全部楼层
你打开一个串口屏的官方例程看看,应该是有起始码和结束码的,不会就这一句,这是我用的串口屏的上位机发送接收代码,不一样的产品相应的起始码结束吗也不一样。
/*----------------------------
对接收到的数据进行处理

滑动返回:        71 4B 00 00 00 FF FF FF
page2返回:        65 02 04 01 FF FF FF
page3返回:        65 03 04 01 FF FF FF
----------------------------*/
void UART1_UnpackData()//数据解包
{
        if(comm_len)//收到数据
        {
                switch(comm_dat[0])//查看第一帧数据
                {
                        case 0x61://0x61表示数据是从上位机发来的               
                        Valve = comm_dat[1];//第2个字节为阀门开度
                        T_Set = comm_dat[2];//第3个字节为温度设定
                        UART1ReceiveFlag=1;
                        break;
//                        case 0x65://0x65表示是触摸热区事件               
//                        //触摸热区事件返回
//                        //TouchEventReturn();
//                        break;
//                        case 0x70://0x70
//                        //字符串变量数据返回
//                        //StringValueReturn();
//                        break;
//                        case 0x71://
//                        //16进制类型变量数据返回
//                        NumberValueReturn();
//                        Valve = (u16)getnumval;//取得数值
////                        Signal=2;
//                        break;
                        //请再次处理其他事件返回
                        default: break;
                }
                comm_len = 0;
        }
}

void UART1_PackageData()//数据封包并发送
{
        u8 i;
        Tx_comm[0]=0x66;                //表明这是从STC上位机来的数据
        Tx_comm[1]=0xA5;                //在第二字节装入温度数据
        Tx_comm[2]=Position;           //在第三字节装入阀门数据
        Tx_comm[3]=0x00;
        Tx_comm[4]=0x00;
        Tx_comm[5]=0xFF;                //停止位
        Tx_comm[6]=0xFF;
        Tx_comm[7]=0xFF;
                       
        for(i=0;i<8;i++)
        {
                UART1_SendData(Tx_comm[i]);//发送数据
        }
}

回复

使用道具 举报

ID:403593 发表于 2024-11-10 11:22 | 显示全部楼层
串口屏通讯是要起始码和结束吗的,不是单发一条命令就可以的,可以参考一下官方的例程。

这是我使用的部分串口通讯代码,仅作为参考:

/*----------------------------
对接收到的数据进行处理

滑动返回:        71 4B 00 00 00 FF FF FF
page2返回:        65 02 04 01 FF FF FF
page3返回:        65 03 04 01 FF FF FF
----------------------------*/
void UART1_UnpackData()//数据解封
{
        if(comm_len)//收到数据
        {
                switch(comm_dat[0])//查看第一帧数据
                {
                        case 0x61://0x61表示数据是从上位机发来的               
                        Valve = comm_dat[1];//第2个字节为阀门开度
                        T_Set = comm_dat[2];//第3个字节为温度设定
                        UART1ReceiveFlag=1;
                        break;
//                        case 0x65://0x65表示是触摸热区事件               
//                        //触摸热区事件返回
//                        //TouchEventReturn();
//                        break;
//                        case 0x70://0x70
//                        //字符串变量数据返回
//                        //StringValueReturn();
//                        break;
//                        case 0x71://
//                        //16进制类型变量数据返回
//                        NumberValueReturn();
//                        Valve = (u16)getnumval;//取得数值
////                        Signal=2;
//                        break;
                        //请再次处理其他事件返回
                        default: break;
                }
                comm_len = 0;
        }
}

void UART1_PackageData()//数据封包并发送
{
        u8 i;
        Tx_comm[0]=0x66;        //表明这是从STC上位机来的数据
        Tx_comm[1]=0xA5;        //在第二字节装入温度数据
        Tx_comm[2]=Position;           //在第三字节装入阀门数据
        Tx_comm[3]=0x00;
        Tx_comm[4]=0x00;
        Tx_comm[5]=0xFF;                //停止位
        Tx_comm[6]=0xFF;
        Tx_comm[7]=0xFF;
                       
        for(i=0;i<8;i++)
        {
                UART1_SendData(Tx_comm[i]);//发送数据
        }
}


回复

使用道具 举报

ID:477441 发表于 2024-11-10 16:47 | 显示全部楼层
这一生只为你 发表于 2024-11-10 11:22
串口屏通讯是要起始码和结束吗的,不是单发一条命令就可以的,可以参考一下官方的例程。

这是我使用的部 ...

谢谢老师!!!
我试试看
回复

使用道具 举报

ID:1109793 发表于 2024-11-10 18:55 | 显示全部楼层
直接上MODBUS协议吧,通用
回复

使用道具 举报

ID:401564 发表于 2024-11-11 00:22 | 显示全部楼层
xiaobendan001 发表于 2024-11-10 18:55
直接上MODBUS协议吧,通用

串口并不全是用这个协议的,有的串口并有自己的协议
淘晶弛就是用它自己的协议通讯的
回复

使用道具 举报

ID:744809 发表于 2024-11-11 16:55 | 显示全部楼层
你这个是什么型号的单片机,12T的51单片机在11.0596MHz情况下,串口1好像只能配置成9600吧?
回复

使用道具 举报

ID:466505 发表于 2024-11-11 19:00 | 显示全部楼层
有没有可能是发送完一个字节后延时5毫秒,导致发送字符串不是连续的,串口屏不认??
回复

使用道具 举报

ID:208271 发表于 2024-11-11 20:46 | 显示全部楼层
单片机与串口屏无法通信通常因为以下几点,实际使用总结来的:
1.检查下硬件,tx,rx,gnd是否可靠连接
2.通过波特率是否配对
3.电源电压是否够
4.通信格式是否完全按键串口屏说明来编写
回复

使用道具 举报

ID:477441 发表于 2024-11-14 17:15 | 显示全部楼层
我的串口屏问题已解决
原因是串口屏的波特率默认115200,而我是用STC89C52RC的串口驱动,我用的是11.0592的晶振,其最高的波特率达不到115200,于是我降低波特率到9600使用
串口屏的波特率我也用上位机软件改到9600,我断电后再上电,又用上位机检查了波特率,确实是9600
就一直认为串口屏的波特率已经改成9600了,
今天用STC15W的波特率115200接串口屏试了一下,可以控制串口屏了,证明串口屏的波特率的确是115200
我又用上位机看了一下串口屏的波特率还是显示9600,这说明虽然上位机显示波特率已经改9600成功,但实际上还是115200

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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