一個(gè)通過(guò)java串口通信控制LED顯示數(shù)據(jù)的實(shí)例_第1頁(yè)
一個(gè)通過(guò)java串口通信控制LED顯示數(shù)據(jù)的實(shí)例_第2頁(yè)
一個(gè)通過(guò)java串口通信控制LED顯示數(shù)據(jù)的實(shí)例_第3頁(yè)
一個(gè)通過(guò)java串口通信控制LED顯示數(shù)據(jù)的實(shí)例_第4頁(yè)
一個(gè)通過(guò)java串口通信控制LED顯示數(shù)據(jù)的實(shí)例_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、一個(gè)通過(guò)java串口通信控制led顯示數(shù)據(jù)的實(shí)例在很多應(yīng)用程序中都需要用到pc機(jī)與外部設(shè)備如:嵌入式系統(tǒng)、傳感器、開(kāi)關(guān) 設(shè)備等進(jìn)行數(shù)據(jù)通訊。其中,最常用的接口就是rs-232串口和并口。su7的 commapi分別提供了對(duì)常用的rs232串行端口和ieee1284并行端口通訊的支持。至于java串口通訊的配置以及通訊模式在sun的demo以及網(wǎng)上都有很多具體的 實(shí)例。下面是我在開(kāi)發(fā)一個(gè)叫號(hào)功能模塊時(shí)通過(guò)串口通信來(lái)控制led顯示的實(shí)例,由于 第一次進(jìn)行相關(guān)的開(kāi)發(fā),看似一個(gè)罪常簡(jiǎn)單的功能在實(shí)際開(kāi)發(fā)中卻遇到了一些問(wèn) 題,希望本人的解決方式能夠?qū)Υ蠹矣兴鶐椭蚕M蠹夷軌蛱岢龈玫慕鉀Q 方式。先看一

2、下led顯示屏廠商提供的通訊協(xié)議:-遙控單雙色、單雙行、混合屏一、每一次對(duì)任一特定地址發(fā)送信息由內(nèi)碼幀(7f/7e),數(shù)碼幀 (6f/6e),定時(shí)幀(5f),時(shí)間幀(4f)中的一種或多種構(gòu)成,結(jié)束 時(shí)發(fā)送一結(jié)束幀。二、幀結(jié)構(gòu):每幀由84字節(jié)構(gòu)成。1、內(nèi)碼幀:一幕由一起始幀和零或多個(gè)中間幀組成,一次 發(fā)送可有多幕。1)起始幀:地址(1字節(jié))+幀控制7e (1字節(jié))+幕號(hào)(1字節(jié))+c0mmand (8字節(jié))+內(nèi)碼/ascii (73字節(jié))2)中間幀:地址(1字節(jié))+幀控制7e (1字節(jié))+ 幕號(hào)(1字節(jié))+command (8字節(jié))+內(nèi)碼/ascii(73字節(jié))3)command:前4字節(jié)未定義

3、,后4字節(jié)依次為動(dòng)畫(huà)(04),移入及移出(各16種),速度(0255), 追加(d3連續(xù)、d2停止、d0閃爍、d4時(shí)間、d6暫停、d7動(dòng)畫(huà))4)內(nèi)碼/ascii結(jié)構(gòu):8、內(nèi)碼4字節(jié),依次為控制字節(jié)(d7寬體/正常體、d4綠色、d5紅色、d3粗體、d2細(xì)體 反白、d1粗體反口、1)0細(xì)體),內(nèi)碼高位,內(nèi)碼低位,未用b、ascii 2字節(jié),依次為控制字節(jié)(d7寬體/正常體、d5綠色、d4紅色、d3粗體、d2細(xì)體 反白、d1粗體反白、d0細(xì)體),ascii碼2、數(shù)碼幀:由一起始幀和零或多中間幀組成。1)起始幀:地址(1字節(jié))+幀控制6f (1字節(jié))+ 數(shù)據(jù)(82字節(jié))2)間幀:地址(1字節(jié))+幀控制

4、6e (1字節(jié))+ 數(shù)據(jù)(82字節(jié))3、定時(shí)幀:由一幀組成。起始幀:地址(1字節(jié))+幀控制5f (1字節(jié))+ 數(shù)據(jù)(48字節(jié))+無(wú)效數(shù)據(jù)包括8個(gè)定時(shí)器,每個(gè)6字節(jié),結(jié)構(gòu)如下: 開(kāi)/關(guān)(0為off、1為on),日期(06為 sundrysatday、7 為每一天),小時(shí)(023), 分鐘(059),起始幕,結(jié)束幕。4、時(shí)間幀:由一幀組成。地址(1字節(jié))+幀控制4f (1字節(jié))+年高二位 (1字節(jié))+年低二位(1字節(jié))+月(1字節(jié))+日 (1字節(jié))+時(shí)(1字節(jié))+分(1字節(jié))+星期(1字節(jié))+無(wú)效數(shù)據(jù)日期都用十進(jìn)制表示,星期部分0為星期日。4、結(jié)束幀:由一幀組成。地址(1字節(jié))+幀控制7d (1字

5、節(jié))+無(wú)效數(shù)據(jù)(82字節(jié))3)移入,移出模式:各16種模式,可任意組合。三、移入模式:移出模式:模式0: 模式1: 模式2: 模式3: 模式4: 模式5:移入一移出j 移入f移出一 移入t移出t 移入i移出i 跳入一跳出一模式6:模式7:模式8:模式9:開(kāi)開(kāi)開(kāi)開(kāi)展 展展展展開(kāi)開(kāi)開(kāi)開(kāi)開(kāi)展展展展模式10:展開(kāi)一一展開(kāi)j 模式11:展開(kāi)f !展開(kāi)f ( 模式12:展開(kāi)! t展開(kāi)(f模式13:即入即出模式14:預(yù)備預(yù)備模式15:隨機(jī)(已設(shè)為循環(huán))隨機(jī)(已設(shè)為循環(huán))四、通訊卡接口:1)初始化通訊卡:a、將oxff寫(xiě)入地址211hb、從211h讀入一字節(jié),判斷d3是否為,如為'(t則重復(fù)此步驟c、

6、將0x00寫(xiě)入地址211hd、從211h讀入一字節(jié),判斷d3是為'0',如為 t'則重復(fù)此步驟e、初始化完成2)寫(xiě)入數(shù)據(jù)地址:210h3)讀狀態(tài)地址:211h 狀態(tài)標(biāo)志:do寫(xiě)允許,高電平有效注:未使用字節(jié)必須置為0x00.232 口: 8位數(shù)據(jù)位,1位停止位,無(wú)效驗(yàn)位,波特率為9600.*每幀84字節(jié),每幕發(fā)一個(gè)7f幀,超過(guò)18個(gè)字的條屏,每幕需加發(fā)一個(gè)7e幀, 所有幕發(fā)完后,發(fā)7d幀(結(jié)束幀)串口通訊涉及到的部分主要代碼:java代碼1. import2. import3.3. public5.6.7.&9.10.11.12.13.14.15.16.17.1

7、8.19.20.21.22.23.24.25.26.27.28.java. io. *; javax. comm. *;class serialbean staticstring portname; commporttdenti fi er porttd; scrialport scrialport;outputstream out;inputstream in;serialbean bean;publicpublicprivatepublicstring gctportnamc()return portname;void setportname(string portname) portna

8、me = portname;serialbean (int portid)portname 二"com" + porttd;static serialbean getlnstance() if (bean 二二 nul1)if (!portlnit (i)return null;public boolean try ent i f i er(portname);return bean;public static boolcan portlnit( int port) if (bean != null) bean. closeport ();jbean 二rctuninew

9、seri al bean(port); boan. initializco ;initializco portld = cominportidentifier. getportldtry scrialport 二 (scrialport)portld.open(serialbean,z, 3000); catch (portinuscexccption c) e. printstacktrace (); return false;try m();eam();9600,in = serialport. getlnputstreaout 二 serialport. getoutputstr cat

10、ch (ioexception c) return false;try serialport. setserialportpareuns(serialport. databits_8,bits_1,66.serialport. parity_n0ne);67. catch (unsupportcdcommopcrat i onexcoptione) 6&e. printstacktrace ();69.return false;70.71. catch (nosuchportexception e) 72.e. printstacktrace();73.return false;74.

11、75.76.return true;77.78.79.80.publicvoid writeport(byte bytes) 81.for (byte b:bytes)82.writeport (b);83.84.85.86.87.publicvoid writeport(byte b) 88.try 89.out. write (b);90.out. flush();91. catch (exception e) 92.e. printstacktrace();93.94.95.96.publicvoid closeport ()97.if (out != null) 98.try 99.o

12、ut. close ();100.in. close();101. catch (exception c) 102.e. printstacktrace ();103.104.105.serialport. close();65.serialport. stop106.107.向led發(fā)送數(shù)據(jù)代碼,以下測(cè)試代碼將人部分涉及到通訊協(xié)議中的模式以及指 令都寫(xiě)死在程序中,有必要可以進(jìn)行重構(gòu)java代碼u1.staticintnumber=o;2.staticbytetarget 二 0x00;3.staticbytefont 二(byte) 0;/默認(rèn)字體4.staticintled length

13、= 16;/默認(rèn)led顯示字體數(shù)目(漢字)5.staticbytem0dule=0x00;/默認(rèn)模式6.staticbytebeg = new byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00;7.byteend =new byte 0x7d,&0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,9.0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,10.0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,11.

14、0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,12.0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,13.0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,14.0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,15.0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,16.0x00,0x0017.;18.19. public void dis

15、play (string meg) 20. serialbean sb 二 serialbean.getlnstance ();21. int bytes 二 led_length * 4;22. writenext(sb);24.for(int i 二0; i < meg. length() ;i+)25.strings 二 mcg. substr in g(i,i + 1);26.byteb = s. getbytes ();27.if (b. length =2)28.if (bytes <4)29.for (int n 二 0; n bytes+ 73 -led_lengt

16、h* 4;n+)30.sb.writeport(0x00丿,31.32.bytes = led_lengtii *4;33.writenext (sb);34.35.sb. wri teport(font);36.sb. writeport (s. getbytes ();37.sb. writeport(0x00);38.bytes -=4;39. elseif (b. length 二二 1)40.if (bytes <2)41.for (int n 二 0; n bytes+ 73 -led_length* 4;n+)42.sb.writeport(0x00丿,43.44.byte

17、s = led_lengtii *4;45.writenext (sb);46.47.4&sb. writeport (font);49.sb. writeport(megcharat(i);50.bytes -=2;51.52.)53.54.for(int n =0; n < bytes + 73 - led_length *4;n+)55.sb. writeport(0x00);56.23./漢字在led中顯示所占的寬度是字母或者數(shù)字的2倍,以下進(jìn)行區(qū)分57.sb. writeport(target);58.sb. writeport(end);59.sb. closepor

18、t ();60.61.62.privatevoid writenext(serialbean st63.sb. writeport(target);64.sb. writeport(0x7f);65.sb. wri teport(byte) number+);66.sb. writeport(beg);67.sb. writeport(module);6&以上代碼剛開(kāi)始寫(xiě)完后進(jìn)行測(cè)試認(rèn)為基木上沒(méi)有問(wèn)題,但是一測(cè)試卻發(fā)現(xiàn)led 上沒(méi)有任何反應(yīng),剛開(kāi)始以為沒(méi)有將數(shù)據(jù)發(fā)送過(guò)去,采用一些串口監(jiān)測(cè)工具卻發(fā) 現(xiàn)數(shù)據(jù)已經(jīng)發(fā)送成功;在網(wǎng)上也沒(méi)有查到任何資料,后來(lái)折騰了半天突然想到是 不是電腦數(shù)據(jù)發(fā)送太快導(dǎo)致led中處理數(shù)據(jù)時(shí)導(dǎo)致丟失數(shù)據(jù)幀,于是立馬在發(fā)送 每個(gè)字節(jié)后加了一個(gè)時(shí)間延遲,結(jié)果立馬有反應(yīng),后來(lái)適當(dāng)調(diào)節(jié)延遲時(shí)間

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論