久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1316|回復: 10
收起左側

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

[復制鏈接]
ID:477441 發(fā)表于 2024-11-9 17:02 | 顯示全部樓層 |閱讀模式
CLS(0) 是串口屏的清屏命令,我用下面的程序串口屏啥反應都沒有,但我在串口助手可以看到連續(xù)發(fā)送的數據是正常的 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)//向串口發(fā)送一個字節(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);
        }
}       










       

回復

使用道具 舉報

ID:477441 發(fā)表于 2024-11-9 17:08 | 顯示全部樓層
串口屏的波特率也是57600,串口屏單獨接在電腦USB轉串口57600試過,在電腦發(fā)送 CLS(0) 時,串口屏是可以清屏的
回復

使用道具 舉報

ID:403593 發(fā)表于 2024-11-10 11:17 | 顯示全部樓層
你打開一個串口屏的官方例程看看,應該是有起始碼和結束碼的,不會就這一句,這是我用的串口屏的上位機發(fā)送接收代碼,不一樣的產品相應的起始碼結束嗎也不一樣。
/*----------------------------
對接收到的數據進行處理

滑動返回:        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表示數據是從上位機發(fā)來的               
                        Valve = comm_dat[1];//第2個字節(jié)為閥門開度
                        T_Set = comm_dat[2];//第3個字節(jié)為溫度設定
                        UART1ReceiveFlag=1;
                        break;
//                        case 0x65://0x65表示是觸摸熱區(qū)事件               
//                        //觸摸熱區(qū)事件返回
//                        //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()//數據封包并發(fā)送
{
        u8 i;
        Tx_comm[0]=0x66;                //表明這是從STC上位機來的數據
        Tx_comm[1]=0xA5;                //在第二字節(jié)裝入溫度數據
        Tx_comm[2]=Position;           //在第三字節(jié)裝入閥門數據
        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ā)送數據
        }
}

回復

使用道具 舉報

ID:403593 發(fā)表于 2024-11-10 11:22 | 顯示全部樓層
串口屏通訊是要起始碼和結束嗎的,不是單發(fā)一條命令就可以的,可以參考一下官方的例程。

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

/*----------------------------
對接收到的數據進行處理

滑動返回:        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表示數據是從上位機發(fā)來的               
                        Valve = comm_dat[1];//第2個字節(jié)為閥門開度
                        T_Set = comm_dat[2];//第3個字節(jié)為溫度設定
                        UART1ReceiveFlag=1;
                        break;
//                        case 0x65://0x65表示是觸摸熱區(qū)事件               
//                        //觸摸熱區(qū)事件返回
//                        //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()//數據封包并發(fā)送
{
        u8 i;
        Tx_comm[0]=0x66;        //表明這是從STC上位機來的數據
        Tx_comm[1]=0xA5;        //在第二字節(jié)裝入溫度數據
        Tx_comm[2]=Position;           //在第三字節(jié)裝入閥門數據
        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ā)送數據
        }
}


回復

使用道具 舉報

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

這是我使用的部 ...

謝謝老師!!!
我試試看
回復

使用道具 舉報

ID:1109793 發(fā)表于 2024-11-10 18:55 | 顯示全部樓層
直接上MODBUS協(xié)議吧,通用
回復

使用道具 舉報

ID:401564 發(fā)表于 2024-11-11 00:22 | 顯示全部樓層
xiaobendan001 發(fā)表于 2024-11-10 18:55
直接上MODBUS協(xié)議吧,通用

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

使用道具 舉報

ID:744809 發(fā)表于 2024-11-11 16:55 | 顯示全部樓層
你這個是什么型號的單片機,12T的51單片機在11.0596MHz情況下,串口1好像只能配置成9600吧?
回復

使用道具 舉報

ID:466505 發(fā)表于 2024-11-11 19:00 | 顯示全部樓層
有沒有可能是發(fā)送完一個字節(jié)后延時5毫秒,導致發(fā)送字符串不是連續(xù)的,串口屏不認??
回復

使用道具 舉報

ID:208271 發(fā)表于 2024-11-11 20:46 | 顯示全部樓層
單片機與串口屏無法通信通常因為以下幾點,實際使用總結來的:
1.檢查下硬件,tx,rx,gnd是否可靠連接
2.通過波特率是否配對
3.電源電壓是否夠
4.通信格式是否完全按鍵串口屏說明來編寫
回復

使用道具 舉報

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

回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩手机在线视频 | 欧美日韩国产在线 | 免费看黄色片 | 欧美在线观看一区二区三区 | 男男成人高潮片免费网站 | 伊人久久影院 | 久久精品毛片 | 国产无精乱码一区二区三区 | 91麻豆精品一区二区三区 | 国产一级片免费观看 | 亚洲一区二区在线免费观看 | 欧美天堂 | 91九色国产 | 亚洲精品少妇 | 欧美精品一二区 | 精品久久影院 | a在线观看 | 中文字幕丰满人伦在线 | 天堂a在线 | 国产精品久久网 | 色哟哟精品观看 | 天天操天天干天天爽 | 日韩在线网址 | 久久艳片www.17c.com | 伊人网视频 | 在线免费黄色网址 | 欧美日韩中文字幕在线 | 国产一区二区三区精品视频 | 欧美一区二区免费 | 日韩一区二区在线视频 | 日韩网站免费观看 | 四虎在线免费观看视频 | 国产日产精品一区二区三区的介绍 | 成人深夜 | 黄色片网站视频 | 激情小说图片视频 | 天天操操操操 | 日本在线不卡视频 | av免费网 | 黄色网址视频 | 欧美日韩毛片 |