一个通过java串口通信控制LED显示数据的实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一个通过java串口通信控制LED显示数据的实例
在很多应用程序中都需要用到pc机与外部设备如:嵌入式系统、传感器、开关
设备等进行数据通讯。其中,最常用的接口就是RS-232串口和并口。SUN的
CommAPI分别提供了对常用的RS232串行端口和IEEE1284并行端口通讯的支持。
至于java串口通讯的配置以及通讯模式在sun的demo以及网上都有很多具体的
实例。
下面是我在开发一个叫号功能模块时通过串口通信来控制LED显示的实例,由于
第一次进行相关的开发,看似一个非常简单的功能在实际开发中却遇到了一些问
题,希望本人的解决方式能够对大家有所帮助,也希望大家能够提出更好的解决
方式。
先看一下LED显示屏厂商提供的通讯协议:
---遥控单双色、单双行、混合屏
一、每一次对任一特定地址发送信息由内码帧(7f/7e),数码帧
(6f/6e),定时帧(5f),时间帧(4f)中的一种或多种构成,结束
时发送一结束帧。
二、帧结构:每帧由84字节构成。
1、内码帧:一幕由一起始帧和零或多个中间帧组成,一次
发送可有多幕。
1)起始帧:地址(1字节)+帧控制7F(1字节)
+幕号(1字节)+COMMAND(8字节)
+内码/ASCII(73字节)
2)中间帧:地址(1字节)+帧控制7E(1字节)+
幕号(1字节)+COMMAND(8字节)+内码/ASCII
(73字节)
3)COMMAND:
前4字节未定义,后4字节依次为动画(0~4),移入及移出(各16种),速度(0~255),追加
(D3连续、D2停止、D0闪烁、D4时间、D6暂停、
D7动画)
4)内码/ASCII结构:
a、内码4字节,依次为控制字节(D7宽体/正常体、 D4绿色、D5红色、D3粗体、D2细体反白、D1
粗体反白、D0细体),内码高位,内码低位,未用
b、ASCII 2字节,依次为控制字节(D7宽体/正常体、 D5绿色、D4红色、D3粗体、D2细体反白、D1粗体
反白、D0细体),ASCII码
2、数码帧:由一起始帧和零或多中间帧组成。
1)起始帧:地址(1字节)+帧控制6F(1字节)+
数据(82字节)
2)间帧:地址(1字节)+帧控制6E(1字节)+
数据(82字节)
3、定时帧:由一帧组成。
起始帧:地址(1字节)+帧控制5F(1字节)+
数据(48字节)+无效数据
包括8个定时器,每个6字节,结构如下:
开/关(0为OFF、1为ON),日期(0~6为
sunday~satday、7为每一天),小时(0~23),
分钟(0~59),起始幕,结束幕。
4、时间帧:由一帧组成。
地址(1字节)+帧控制4F(1字节)+年高二位
(1字节)+年低二位(1字节)+月(1字节)+日
(1字节) +时(1字节)+分(1字节)+星期(1字节)
+无效数据
日期都用十进制表示,星期部分0为星期日。
4、结束帧:由一帧组成。
地址(1字节)+帧控制7D(1字节)+无效数据(82 字节)
3)移入,移出模式:各16种模式,可任意组合。
三、移入模式:移出模式:
模式0:移入← 移出←
模式1:移入→ 移出→
模式2:移入↑ 移出↑
模式3:移入↓ 移出↓
模式4:跳入← 跳出←
模式5:展开→ 展开→
模式6:展开← 展开←
模式7:展开↑ 展开↑
模式8:展开↓ 展开↓
模式9:展开←→ 展开←→
模式10:展开→← 展开→←
模式11:展开↑↓ 展开↑↓
模式12:展开↓↑ 展开↓↑
模式13:即入即出
模式14:预备预备
模式15:随机(已设为循环)随机(已设为循环)
四、通讯卡接口:
1)初始化通讯卡:
a、将0xFF写入地址211H
b、从211H读入一字节,判断D3是否为‘1’,如为‘0’则重复此步骤
c、将0x00写入地址211H
d、从211H读入一字节,判断D3是为‘0’,如为‘1’则重复此步骤
e、初始化完成
2)写入数据地址:210H
串口通讯涉及到的部分主要代码:
Java代码
1.import java.io.*;
2.import m.*;
3.
4.public class SerialBean {
5. static SerialBean bean;
6. String PortName;
7. CommPortIdentifier portId;
8. SerialPort serialPort;
9. OutputStream out;
10. InputStream in;
11.
12.
13. public String getPortName() {
14. return PortName;
15. }
16.
17. public void setPortName(String portName) {
18. PortName = portName;
19. }
20.
21. private SerialBean(int PortID) {
22. PortName = "COM" + PortID;
23.
24. }
25.
26. public static SerialBean getInstance() {
27. if (bean == null) {
28. if (!portInit(1))
29. return null;