虛擬串口的調(diào)試和串口屏的使用

剛開始調(diào)試虛擬串口以及編寫USART HMI串口屏的程序,花了很多時(shí)間的同時(shí),也學(xué)到了很多東西,有些心得分享給大家,希望初學(xué)者對串口有了更明確的認(rèn)識(shí)和了解。

想要驅(qū)動(dòng)串口屏,首先得了解串口屏接收的指令格式,就像玩游戲一樣,得熟悉基本的操作流程,才能更好地發(fā)揮其他技能。

一 串口屏的介紹

串口屏,顧名思義就是通過串口進(jìn)行數(shù)據(jù)的傳送,我使用的是串口屏,類型是增強(qiáng)型,型號(hào)是TJC4832K035_011R,尺寸為3.5寸,分辨率是483*320。

USART HMI智能串口屏

簡單的了解了串口屏,那么就以一個(gè)簡單的例子來介紹其使用方法。我們以串口屏發(fā)送文本程序?yàn)槔?/p>

串口屏發(fā)送的是ASCII碼,而且全部都是字符格式。

使用方法分成2個(gè)步驟:
1. 輸入發(fā)送文本指令

t0.text="1"

t0.txt是文本控件t0,1是數(shù)據(jù),在應(yīng)用的過程中可以換成其他字符。

2. 輸入結(jié)束確認(rèn)指令

0xff 0xff 0xff

串口屏指令格式規(guī)定每條指令寫完后,必須加3個(gè)0xff結(jié)尾,以確認(rèn)串口屏收到指令。

我們需要制作一個(gè)工程,下載到串口屏進(jìn)行顯示,以便后續(xù)進(jìn)行板機(jī)驗(yàn)證使用,如圖我們已經(jīng)建立好了一個(gè)工程,通過軟件USART HMI我們使用了文本控件和數(shù)字控件,然后對字體的格式,背景進(jìn)行設(shè)置。

串口屏的工程

二 虛擬串口的使用

下面我們利用proteus仿真模擬串口屏的指令格式發(fā)送數(shù)據(jù),首先我們需要?jiǎng)?chuàng)建2個(gè)虛擬端口。

如圖,打開虛擬串口驅(qū)動(dòng)軟件,然后直接點(diǎn)擊“添加端口”,就可以在左邊Virtual ports看到創(chuàng)建的2個(gè)虛擬端口,分別為COM1COM2。和物理端口不同的是,物理端口直接是一個(gè)端口進(jìn)行串口通信,而虛擬端口是將2個(gè)端口建立了虛擬連接。

虛擬串口驅(qū)動(dòng)

可以先用串口助手測試,確認(rèn)虛擬端口創(chuàng)建成功。打開串口助手SSCOM
然后分別選擇端口COM1和COM2,然后互相發(fā)送數(shù)據(jù),可以看到,虛擬串口創(chuàng)建成功啦。

串口助手測試

三 代碼分析

準(zhǔn)備工作基本準(zhǔn)備好了,下面可以編寫程序啦。

#include <reg52.h> 
#include <intrins.h>
#include <stdio.h> 
#include <string.h> 

#define uchar unsigned char
#define uint unsigned int
uchar i;

void init() //定時(shí)器1,工作方式2,8位自動(dòng)重裝,波特率9600
{
    TMOD=0x20;
    TH1=0xfd;
    TL1=0xfd;
    TR1=1;
    SM0=0;
    SM1=1;  
}

void uart(uchar b) //串行發(fā)送
{
    SBUF=b;
    while(!TI);
    TI=0;
}

void sendText(uchar c[], uchar d[]) //發(fā)送文本
{
  uchar table[]=".txt=\"";
    for(i=0;i<2;i++) //發(fā)送標(biāo)號(hào)t?
        uart(c[i]);

    for(i=0;i<6;i++) //發(fā)送.txt="
        uart(table[i]);
    
    for(i=0;i<strlen(d);i++) //發(fā)送數(shù)據(jù)
    uart(d[i]);
    uart('\"'); //發(fā)送"
}

void sendVal(uchar c[], uchar d[]) //發(fā)送數(shù)字
{
  uchar table[]=".val=";
    for(i=0;i<2;i++) //發(fā)送標(biāo)號(hào)n?
        uart(c[i]);

    for(i=0;i<5;i++) //發(fā)送.val=
        uart(table[i]);
    
    for(i=0;i<strlen(d)-3;i++) //發(fā)送數(shù)據(jù),3是為了去掉小數(shù),才能識(shí)別成整數(shù)
    uart(d[i]);
}

void sendEnd() //發(fā)送結(jié)束字符
{
    for(i=0;i<3;i++) //發(fā)送3個(gè)0xff
    uart(0xff);
}

void delayms(uint xms) //延時(shí)1ms
{
    uint i,j;
    for(i=xms;i>0;i--)
        for(j=110;j>0;j--); 
}

void main()
{
    float a=666.234656;
    uchar text[10];
    sprintf(text,"%.2f",a);
    init();
    _nop_();
    while(1)
    {
        sendText("t0","123"); //發(fā)送文本
        sendEnd(); //發(fā)送結(jié)束字符
        sendVal("n0",text); //發(fā)送數(shù)字
        sendEnd();
      delayms(1000);
    }
}

四 系統(tǒng)調(diào)試

如果手頭沒有串口屏,我們可以先使用proteus進(jìn)行仿真,測試程序輸出結(jié)果是否準(zhǔn)確。

首先我們把仿真圖搭建好,其中虛擬終端(Virtual Terminal)的RTS和CTS官方例子是連在一起的,經(jīng)過測試不連也可以運(yùn)行。RS232端口的TXD是串行發(fā)送數(shù)據(jù),RXD是串行接收數(shù)據(jù)。

proteus仿真圖

連接好電路之后,我們需要雙擊RS232端口,設(shè)置下對應(yīng)的參數(shù)。首先設(shè)置的是端口號(hào),經(jīng)過測試,物理端口和虛擬端口共用這個(gè)端口號(hào),我們先設(shè)置虛擬端口,后續(xù)板機(jī)測試的時(shí)候需要用到,根據(jù)自己的物理端口相應(yīng)修改。然后將波特率都設(shè)置為9600,和程序進(jìn)行匹配。

RS232端口設(shè)置

所有工作準(zhǔn)備完畢后,就可以燒程序進(jìn)行測試?yán)玻遣皇怯悬c(diǎn)小激動(dòng)。如圖是我通過仿真得到的結(jié)果,將發(fā)送給串口屏的數(shù)據(jù),通過虛擬終端以及過串口助手顯示的數(shù)據(jù)進(jìn)行顯示,有兩條指令,分別為發(fā)送文本指令t0.text="123"和數(shù)發(fā)送字指令n0.val=666,其中每條指令后必須有3個(gè)0xff。對于虛擬終端顯示為3個(gè)綠色的小方塊,對于串口助手顯示為3個(gè)空格。

proteus仿真圖與串口顯示

因?yàn)槌绦蛑皇前l(fā)送數(shù)據(jù),所以串口屏的TX端可以懸空,只需將RX端與51單片機(jī)的P3.1(TXD)連接即可。如圖得出的結(jié)果是正確的,符合串口屏的指令要求,下面我們可以進(jìn)行板機(jī)下載驗(yàn)證。

在下載程序的時(shí)候,串口屏的RX和TX和51單片機(jī)的RXD和TXD要反接,否者無法通信。而且在下載程序的時(shí)候,因?yàn)榇谄梁蛦纹瑱C(jī)共用一個(gè)物理串口,最簡單的辦法是斷開串口屏的所有連接線,經(jīng)過測試發(fā)現(xiàn),我們只需要斷開串口屏的TX或者+5V其中一個(gè)引腳即可下載成功。

板機(jī)驗(yàn)證與串口顯示

我們可以看出,串口屏的第一個(gè)文本框顯示“123”,第二個(gè)數(shù)字框顯示“666”,同時(shí)我們通過串口助手顯示的數(shù)據(jù)可以看出,和前面我們通過虛擬串口仿真結(jié)果相同,按照我們的程序架構(gòu)在執(zhí)行。

注意事項(xiàng):

  1. 出現(xiàn)在下載不了程序,看下驅(qū)動(dòng)是否安裝成功或者RX和TX是否接錯(cuò);
  2. 虛擬串口和實(shí)際串口不同,它是強(qiáng)行將2個(gè)不相干的串口虛擬導(dǎo)通,所以記得選串口的時(shí)候連接2個(gè)不同的串口;
  3. 發(fā)現(xiàn)一個(gè)奇怪的現(xiàn)象,有時(shí)候用sscom串口助手下載程序的時(shí)候,最開始會(huì)出現(xiàn)一個(gè)空格,經(jīng)過多次實(shí)驗(yàn)發(fā)現(xiàn),板機(jī)驗(yàn)證先打開sscom串口助手的端口,然后在運(yùn)行程序可以避免這個(gè)問題,但是如果先打開sscom串口助手的端口就有這個(gè)空格,其他的串口助手不會(huì)出現(xiàn)這個(gè)問題,不知道是軟件的問題還是程序的問題,希望知道的告知,一起學(xué)習(xí),哈哈哈。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,800評論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內(nèi)容