找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 1247|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

菜鳥小白還要請教串口屏的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:477441 發(fā)表于 2024-11-9 17:02 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
CLS(0) 是串口屏的清屏命令,我用下面的程序串口屏啥反應(yīng)都沒有,但我在串口助手可以看到連續(xù)發(fā)送的數(shù)據(jù)是正常的 CLS(0),我在示波器上看到數(shù)據(jù)的驅(qū)動(dòng)電壓幅度在5V左右,應(yīng)該是夠用的,(我沒有邏輯分析儀)

#include <reg52.h>

#define uchar unsigned char                                                 //定義unsigned char型數(shù)據(jù)簡寫
#define uint unsigned int                                                 //定義unsigned int型數(shù)據(jù)簡寫
#define ulong unsigned long       

void Uart1_init()        //57600bps@11.0592MHz,串口初始化
{
        PCON |= 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        TMOD &= 0x0F;                //設(shè)置定時(shí)器模式
        TMOD |= 0x20;                //設(shè)置定時(shí)器模式
        TL1 = 0xFF;                        //設(shè)置定時(shí)初始值
        TH1 = 0xFF;                        //設(shè)置定時(shí)重載值
        ET1 = 0;                        //禁止定時(shí)器中斷
        TR1 = 1;                        //定時(shí)器1開始計(jì)時(shí)
}


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


void SendByte(uchar dat)//向串口發(fā)送一個(gè)字節(jié)
{
    TI=0;
    SBUF=dat;
    while(!TI);
    TI=0;
}


void SendStr(uchar *s)//向串口發(fā)送字符串
{
    while(*s)     //通過檢測字符串末尾0x00停止發(fā)送
    {
        SendByte(*s++);
    }
        delayMS(5);
}


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










       

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:477441 發(fā)表于 2024-11-9 17:08 | 只看該作者
串口屏的波特率也是57600,串口屏單獨(dú)接在電腦USB轉(zhuǎn)串口57600試過,在電腦發(fā)送 CLS(0) 時(shí),串口屏是可以清屏的
回復(fù)

使用道具 舉報(bào)

板凳
ID:403593 發(fā)表于 2024-11-10 11:17 | 只看該作者
你打開一個(gè)串口屏的官方例程看看,應(yīng)該是有起始碼和結(jié)束碼的,不會(huì)就這一句,這是我用的串口屏的上位機(jī)發(fā)送接收代碼,不一樣的產(chǎn)品相應(yīng)的起始碼結(jié)束嗎也不一樣。
/*----------------------------
對接收到的數(shù)據(jù)進(jìn)行處理

滑動(dòng)返回:        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()//數(shù)據(jù)解包
{
        if(comm_len)//收到數(shù)據(jù)
        {
                switch(comm_dat[0])//查看第一幀數(shù)據(jù)
                {
                        case 0x61://0x61表示數(shù)據(jù)是從上位機(jī)發(fā)來的               
                        Valve = comm_dat[1];//第2個(gè)字節(jié)為閥門開度
                        T_Set = comm_dat[2];//第3個(gè)字節(jié)為溫度設(shè)定
                        UART1ReceiveFlag=1;
                        break;
//                        case 0x65://0x65表示是觸摸熱區(qū)事件               
//                        //觸摸熱區(qū)事件返回
//                        //TouchEventReturn();
//                        break;
//                        case 0x70://0x70
//                        //字符串變量數(shù)據(jù)返回
//                        //StringValueReturn();
//                        break;
//                        case 0x71://
//                        //16進(jìn)制類型變量數(shù)據(jù)返回
//                        NumberValueReturn();
//                        Valve = (u16)getnumval;//取得數(shù)值
////                        Signal=2;
//                        break;
                        //請?jiān)俅翁幚砥渌录祷?br />                         default: break;
                }
                comm_len = 0;
        }
}

void UART1_PackageData()//數(shù)據(jù)封包并發(fā)送
{
        u8 i;
        Tx_comm[0]=0x66;                //表明這是從STC上位機(jī)來的數(shù)據(jù)
        Tx_comm[1]=0xA5;                //在第二字節(jié)裝入溫度數(shù)據(jù)
        Tx_comm[2]=Position;           //在第三字節(jié)裝入閥門數(shù)據(jù)
        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]);//發(fā)送數(shù)據(jù)
        }
}

回復(fù)

使用道具 舉報(bào)

地板
ID:403593 發(fā)表于 2024-11-10 11:22 | 只看該作者
串口屏通訊是要起始碼和結(jié)束嗎的,不是單發(fā)一條命令就可以的,可以參考一下官方的例程。

這是我使用的部分串口通訊代碼,僅作為參考:

/*----------------------------
對接收到的數(shù)據(jù)進(jìn)行處理

滑動(dòng)返回:        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()//數(shù)據(jù)解封
{
        if(comm_len)//收到數(shù)據(jù)
        {
                switch(comm_dat[0])//查看第一幀數(shù)據(jù)
                {
                        case 0x61://0x61表示數(shù)據(jù)是從上位機(jī)發(fā)來的               
                        Valve = comm_dat[1];//第2個(gè)字節(jié)為閥門開度
                        T_Set = comm_dat[2];//第3個(gè)字節(jié)為溫度設(shè)定
                        UART1ReceiveFlag=1;
                        break;
//                        case 0x65://0x65表示是觸摸熱區(qū)事件               
//                        //觸摸熱區(qū)事件返回
//                        //TouchEventReturn();
//                        break;
//                        case 0x70://0x70
//                        //字符串變量數(shù)據(jù)返回
//                        //StringValueReturn();
//                        break;
//                        case 0x71://
//                        //16進(jìn)制類型變量數(shù)據(jù)返回
//                        NumberValueReturn();
//                        Valve = (u16)getnumval;//取得數(shù)值
////                        Signal=2;
//                        break;
                        //請?jiān)俅翁幚砥渌录祷?br />                         default: break;
                }
                comm_len = 0;
        }
}

void UART1_PackageData()//數(shù)據(jù)封包并發(fā)送
{
        u8 i;
        Tx_comm[0]=0x66;        //表明這是從STC上位機(jī)來的數(shù)據(jù)
        Tx_comm[1]=0xA5;        //在第二字節(jié)裝入溫度數(shù)據(jù)
        Tx_comm[2]=Position;           //在第三字節(jié)裝入閥門數(shù)據(jù)
        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]);//發(fā)送數(shù)據(jù)
        }
}


回復(fù)

使用道具 舉報(bào)

5#
ID:477441 發(fā)表于 2024-11-10 16:47 | 只看該作者
這一生只為你 發(fā)表于 2024-11-10 11:22
串口屏通訊是要起始碼和結(jié)束嗎的,不是單發(fā)一條命令就可以的,可以參考一下官方的例程。

這是我使用的部 ...

謝謝老師�。�!
我試試看
回復(fù)

使用道具 舉報(bào)

6#
ID:1109793 發(fā)表于 2024-11-10 18:55 | 只看該作者
直接上MODBUS協(xié)議吧,通用
回復(fù)

使用道具 舉報(bào)

7#
ID:401564 發(fā)表于 2024-11-11 00:22 | 只看該作者
xiaobendan001 發(fā)表于 2024-11-10 18:55
直接上MODBUS協(xié)議吧,通用

串口并不全是用這個(gè)協(xié)議的,有的串口并有自己的協(xié)議
淘晶弛就是用它自己的協(xié)議通訊的
回復(fù)

使用道具 舉報(bào)

8#
ID:744809 發(fā)表于 2024-11-11 16:55 | 只看該作者
你這個(gè)是什么型號(hào)的單片機(jī),12T的51單片機(jī)在11.0596MHz情況下,串口1好像只能配置成9600吧?
回復(fù)

使用道具 舉報(bào)

9#
ID:466505 發(fā)表于 2024-11-11 19:00 | 只看該作者
有沒有可能是發(fā)送完一個(gè)字節(jié)后延時(shí)5毫秒,導(dǎo)致發(fā)送字符串不是連續(xù)的,串口屏不認(rèn)??
回復(fù)

使用道具 舉報(bào)

10#
ID:208271 發(fā)表于 2024-11-11 20:46 | 只看該作者
單片機(jī)與串口屏無法通信通常因?yàn)橐韵聨c(diǎn),實(shí)際使用總結(jié)來的:
1.檢查下硬件,tx,rx,gnd是否可靠連接
2.通過波特率是否配對
3.電源電壓是否夠
4.通信格式是否完全按鍵串口屏說明來編寫
回復(fù)

使用道具 舉報(bào)

11#
ID:477441 發(fā)表于 2024-11-14 17:15 | 只看該作者
我的串口屏問題已解決
原因是串口屏的波特率默認(rèn)115200,而我是用STC89C52RC的串口驅(qū)動(dòng),我用的是11.0592的晶振,其最高的波特率達(dá)不到115200,于是我降低波特率到9600使用
串口屏的波特率我也用上位機(jī)軟件改到9600,我斷電后再上電,又用上位機(jī)檢查了波特率,確實(shí)是9600
就一直認(rèn)為串口屏的波特率已經(jīng)改成9600了,
今天用STC15W的波特率115200接串口屏試了一下,可以控制串口屏了,證明串口屏的波特率的確是115200
我又用上位機(jī)看了一下串口屏的波特率還是顯示9600,這說明雖然上位機(jī)顯示波特率已經(jīng)改9600成功,但實(shí)際上還是115200

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表