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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1046|回復: 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);
        }
}       










       

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

使用道具 舉報

沙發
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]);//發送數據
        }
}


回復

使用道具 舉報

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

這是我使用的部 ...

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

9#
ID:466505 發表于 2024-11-11 19:00 | 只看該作者
有沒有可能是發送完一個字節后延時5毫秒,導致發送字符串不是連續的,串口屏不認??
回復

使用道具 舉報

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

使用道具 舉報

11#
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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产美女久久 | 欧美 日韩 亚洲91麻豆精品 | 中文字幕日韩欧美 | 日韩欧美大片 | 日本精品免费在线观看 | 国产精品视频一区二区三区四蜜臂 | 亚洲综合视频 | 国产激情自拍视频 | 国产精品一区二区av | 亚洲精品99| 欧美日韩一区二区三区四区 | 亚洲二区精品 | 国产精品自拍av | 国产精品一区二区三区在线播放 | 亚洲三级免费看 | 欧美三级在线 | 亚洲在线免费观看 | 日韩欧美三级 | 日韩二区 | 欧美精品1区2区 | 国内自拍视频在线观看 | 精品日韩一区二区 | 亚洲不卡在线观看 | 国产九九av | 亚洲成人福利在线观看 | 一区二区三区四区在线视频 | 成人在线视频网址 | 国产精品伦理一区二区三区 | 成人影院在线 | 国产精品99久久久久久久vr | 亚洲三级免费看 | 91 中文字幕| 中文字幕高清免费日韩视频在线 | 亚洲免费影院 | 999久久久久久久久6666 | 日韩中文字幕一区 | 国产成人综合av | 国产午夜精品一区二区三区 | 91麻豆精品国产91久久久久久久久 | 国内精品免费久久久久软件老师 | 日韩三 |