| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> PCM开发板模块实验指导--工业触摸屏通讯实验 -> 正文阅读 |
|
[嵌入式]PCM开发板模块实验指导--工业触摸屏通讯实验 |
????????22---工业触摸屏通讯实验: ????????????????硬件需求:PC机,PCM模块一个,24V电源一个,工业触摸屏(威纶MT506S)一个, ???????????????? TTL转RS232模块一个(或者使用MAX232芯片),microUSB线; ????????????????软件需求:PCM编译软件,电脑端串口调试助手,触摸屏编辑软件(EB500); ????????????????供电方式:USB线接PC机供电, 24V电源给触摸屏供电; ????????????????连接电路:图17 ????????图17 ????????工业触摸屏通讯实验电路图 ? ????????图18 ????????触摸屏编辑软件界面 ????????????????????????PCM开发板模块带有MODBUS RTU从指令,可以与具有MODBUS RTU通讯功能 ????????????????的工业触摸屏通讯。本实验使用威纶公司的一款工业触摸屏MT506S与本开发板通讯, ????????????????触摸屏工作在主模式,开发板工作在从模式,图19--触摸屏编辑软件系统参数设置画 ????????????????面,显示了触摸屏编辑软件的系统参数设置。 ? ????????图19 ????????触摸屏编辑软件系统参数设置画面 ????????????????????????本实验开发板与触摸屏采用RS232通讯,通讯地址设置为0,连接电路参见图17--工 ????????????????业触摸屏通讯实验电路图。开发板使用串口2与触摸屏通讯,USB接口接电脑,通过USB ????????????????串口输出调试信息。 ????????????????????????开发板模块的输入寄存器Xn为只读寄存器,编号为0-10,共11个,这11个输入口的 ????????????????显示,在触摸屏的最左边的输入列(参见图18),一个输入口对应一个指示灯,触摸屏 ????????????????使用位状态显示元件,X0-X10依次对应的触摸屏的位状态显示元件的读取地址为0x1- ????????????????0x11,图20为输入点X0设置画面。 ????????????????????????当输入口为低电平时,指示灯灭,为高电平时,指示灯亮,用户可以使用一根导 ????????????????线,把输入口连接地端,来看看触摸屏上的指示灯变化。注意X9因为已经接串口通讯, ????????????????所以X9不要使用了;X10被系统保留,也不要使用。 ? ????????图20 ????????输入点X0设置画面 ????????????????????????开发板模块的输出寄存器Yn为可读写寄存器,编号为0-12,共13个,这13个输出口 ????????????????的显示,在触摸屏的最右边的输出列(参见图18),一个输出口对应一个切换开关元 ????????????????件,Y0-X12依次对应的触摸屏的切换开关元件的读取地址为0x17-0x29,读取地址与输出 ????????????????地址相同,图21为输出Y0设置画面。 ????????????????????????因为输出口是可读写寄存器,所以在触摸屏的输出列触摸相应的按键,可以改变输 ????????????????出口的电平,高电平为1,低电平为0。或者用户可以接一个LED指示灯来观察电平变 ????????????????化,或者使用万用表来测量电平值。 ? ????????图21 ????????输出Y0设置画面 ????????????????????????开发板模块的中间寄存器Mn为可读写寄存器,编号为0-199,共200个,实验只演 ????????????????示了M0,M1,M2这3个,M0-M2依次对应的触摸屏的切换开关元件的读取地址为0x33- ????????????????0x35,读取地址与输出地址相同。点击触摸屏上的开关,可以改变M0-M2的电平值,图21 ????????????????为中间寄存器M0设置画面。 ? ????????图22 ????????中间寄存器M0设置画面 ????????????????????????开发板模块的数据寄存器Dn为可读写寄存器,编号为0-999,共1000个,触摸屏可 ????????????????以读写任何一个寄存器的值,但本实验使用D0-D6作为可读写寄存器,D7-D13作为只读 ????????????????寄存器。 ????????????????????????触摸屏可读写元件使用数值输入元件,在屏幕的读写列有D0-D6,共7个元件,设置 ????????????????元件的读取地址如下表所示: ????????????????????????数据寄存器 ????????读取地址 ????????字数 ????????????????????????D0 ????????????????????????4x1 ????????????????2 ????????????????????????D1 ????????????????????????4x3 ????????????????2 ????????????????????????D2 ????????????????????????4x5 ????????????????2 ????????????????????????D3 ????????????????????????4x7 ????????????????2 ????????????????????????D4 ????????????????????????4x9 ????????????????2 ????????????????????????D5 ????????????????????????4x11 ??????????????2 ????????????????????????D6 ????????????????????????4x13 ??????????????2 ????????????????????????因为开发板模块的数据寄存器Dn是4字节数据(或者2个字),所以在触摸屏的元件 ????????????????设置字数那里要选择2个字,同时下一个元件的读取地址也要相应的偏移2个字。图23-可 ????????????????读写D0寄存器设置画面显示了D0寄存器的设置画面。 ????????????????????????触摸D0-D6的任意一个按键,可以输入数值,输入后就改变了Dn寄存器的值。 ????????????????????????D7-D13寄存器也是可读写寄存器,本实验为了演示只读功能,所以这几个寄存器我 ????????????????们使用数值显示元件来显示值。设置元件的读取地址如下表所示: ????????????????????????数据寄存器 ????????读取地址 ????????字数 ????????????????????????D7 ????????????????????????3x15 ????????????????2 ????????????????????????D8 ????????????????????????3x17 ????????????????2 ????????????????????????D9 ????????????????????????3x19 ????????????????2 ????????????????????????D10 ??????????????????????3x21 ????????????????2 ????????????????????????D11 ??????????????????????3x23 ????????????????2 ????????????????????????D12 ??????????????????????3x25 ????????????????2 ????????????????????????D13 ??????????????????????3x27 ????????????????2 ????????????????????????触摸屏中地址前缀4x表示可读写,3x表示只读,所以D7-D13的读取地址使用3x前 ????????????????缀,但地址编号还是按顺序依次排列,图24-只读D7寄存器设置画面显示了D7寄存器的 ????????????????设置画面。 ? ????????图23 ????????可读写D0寄存器设置画面 ? ????????图24 ????????只读D7寄存器设置画面 ????????????????????????实验中我们在程序中把D7-D13寄存器每2秒加1,可以看到触摸屏上的值也会每2秒 ????????????????加1,在图-串口输出数据中也会显示这几个寄存器的值。 ????????????????????????开发板模块暂不支持浮点寄存器Fn的读写,不过用户可以使用指令mul Fn K Fn和 ????????????????mov Fn Dn,先把浮点数扩大K倍(根据精度选择K值为10-一个小数位,100-2个小数位, ????????????????1000-3个小数位),然后把浮点数转换成整数,然后让触摸屏读取寄存器Dn,并设置好小 ????????????????数位数。这样做会损失一点点精度。 ????????????????????????实验程序如下: ????????????????1 main?//主程序入口 ????????????????2 ????????modbusrtuc 0 2 115200 s0 //初始化为从模式,本机站号0,使用串口2,波特 ????????????????????????????????????????????????????????????????????????//率115200 ????????????????3 ????????mov 1 d0 //D0存入1 ????????????????4 ????????mov 2 d1 //D1存入2 ????????????????5 ????????mov 3 d2 //D2存入3 ????????????????6 ????????mov 4 d3 //D3存入4 ????????????????7 ????????mov 5 d4 //D4存入5 ????????????????8 ????????mov 6 d5 //D5存入6 ????????????????9 ????????mov 7 d6 //D6存入7 ????????????????10 ????????mov 8 d7 //D7存入8 ????????????????11 ????????mov 9 d8 //D8存入9 ????????????????12 ????????mov 10 d9 //D9存入10 ????????????????13 ????????mov 11 d10 //D10存入11 ????????????????14 ????????mov 12 d11 //D11存入12 ????????????????15 ????????mov 13 d12?//D12存入13 ????????????????16 ????????mov 14 d13 //D13存入14 ????????????????17 ????????while 1?//无限循环 ????????????????18 ????????????????delay 2000 //延时2S ????????????????19 ???????????????????????in y0 d20 //读取输出口YO的值到D20 ????????????????20 ???????????????????????in y1 d21 //读取输出口Y1的值到D21 ????????????????21 ???????????????????????in y2 d22?//读取输出口Y2的值到D22 ????????????????22 ???????????????????????in y3 d23 //读取输出口Y3的值到D23 ????????????????23 ???????????????????????in y4 d24 //读取输出口Y4的值到D24 ????????????????24 ???????????????????????in y5 d25?//读取输出口Y5的值到D25 ????????????????25 ???????????????????????in y6 d26?//读取输出口Y6的值到D26 ????????????????26 ???????????????????????in y7 d27?//读取输出口Y7的值到D27 ????????????????27 ???????????????????????in y8 d28?//读取输出口Y8的值到D28 ????????????????28 ???????????????????????in y9 d29 //读取输出口Y9的值到D29 ????????????????29 ???????????????????????in y10 d30 //读取输出口Y1O的值到D30 ????????????????30 ???????????????????????in y11 d31?//读取输出口Y11的值到D31 ????????????????31 ???????????????????????in y12 d32 //读取输出口Y12的值到D32 ????????????????32 ???????????????????????prints "d0=%d,d1=%d,d2=%d," d0 d1 d2?//输出D0,D1,D2值 ????????????????33 ???????????????????????prints "d3=%d,d4=%d,d5=%d," d3 d4 d5?//输出D3,D4,D5值 ????????????????34 ???????????????????????prints "d6=%d\r\n" d6 //输出D6值 ????????????????35 ???????????????????????prints "d7=%d,d8=%d,d9=%d," d7 d8 d9 //输出D7,D8,D9值 ????????????????36 ???????????????????????prints "d10=%d,d11=%d,d12=%d," d10 d11 d12?//输出D10,D11,D12值 ????????????????37 ???????????????????????prints "d13=%d\r\n" d13 //输出D13值 ????????????????38 ???????????????????????prints "y0=%d,y1=%d,y2=%d," d20 d21 d22?//输出Y0,Y1,Y2值 ????????????????39 ???????????????????????prints "y3=%d,y4=%d,y5=%d," d23 d24 d25 //输出Y3,Y2,Y5值 ????????????????40 ???????????????????????prints "y6=%d,y7=%d,y8=%d," d26 d27 d28?//输出Y6,Y7,Y8值 ????????????????41 ???????????????????????prints "y9=%d,y10=%d,y11=%d," d29 d30 d31?//输出Y9,Y10,Y11值 ????????????????42 ???????????????????????prints "y12=%d\r\n" d32 d33 d34?//输出Y12值 ????????????????43 ???????????????????????if m0 //判断m0 ????????????????44 ??????????????????????????????????????prints "m0=1," //M0=1,输出1 ????????????????45 ???????????????????????else ????????????????46 ??????????????????????????????????????prints "m0=0,"?//M0=0,输出0 ????????????????47 ???????????????????????endif ????????????????48 ???????????????????????if m1 //判断m1 ????????????????49 ??????????????????????????????????????prints "m1=1," //M1=1,输出1 ????????????????50 ???????????????????????else ????????????????51 ??????????????????????????????????????prints "m1=0,"?//M1=0,输出0 ????????????????52 ???????????????????????endif ????????????????53 ???????????????????????if m2 //判断m2 ????????????????54 ??????????????????????????????????????prints "m2=1\r\n" //M2=1,输出1 ????????????????55 ???????????????????????else ????????????????56 ??????????????????????????????????????prints "m2=0\r\n" //M2=0,输出0 ????????????????57 ???????????????????????endif ????????????????58 ???????????????????????inc d7 //D7加1 ????????????????59 ???????????????????????inc d8 //D8加1 ????????????????60 ???????????????????????inc d9 //D9加1 ????????????????61 ???????????????????????inc d10 //D10加1 ????????????????62??????????????????????? inc d11?//D11加1 ????????????????63 ???????????????????????inc d12 //D12加1 ????????????????64??????????????????????? inc d13 //D13加1 ????????????????65 ????????endwhile ????????????????66 endmain ????????????????????????程序中第2行初始化MODBUS RTU为从模式,本机站号为0,使用串口2,波特率为 ????????????????115200,当有数据接收时,S0会置位; ????????????????????????第3-16行,把寄存器D0-D13分别存入1到14的值; ????????????????????????第17-65行是无限循环体; ????????????????????????第18行,每次循环延时2S; ????????????????????????第19-31行,读取输出端口Y0-Y12到D20-D32寄存器中; ????????????????????????第32-42行,打印输出D0-D13,Y0-Y12的值; ????????????????????????第43-57行,判断M0,M1,M2的值,如果为1,则输出等于1的信息,否则输出等于0 ????????????????的信息; ????????????????????????第58-64行,把寄存器D7-D13依次加1; ????????????????????????图26为触摸屏真实界面图,我们可以把X0到X8(X9因为已经接串口通讯,所以X9 ????????????????不要使用了;X10系统保留,不要使用)对地接上导线,并且观察触摸屏输入栏的相应 ????????????????的指示灯的状态; ????????????????????????在触摸屏读写栏,可以改变D0-D6寄存器的值,然后观察图25中,串口助手输出的 ????????????????数据是否一致; ????????????????????????因为实验程序中每2S会把D7-D13寄存器的值加1,所以在触摸屏的只读栏会看到 ????????????????D7-D13会不停的往上计数; ????????????????????????在触摸屏输出栏,可以改变Y0-Y12,M0-M2的状态,然后观察图25中串口助手输出 ????????????????的数据是否一致; ????????图25 ????????串口输出数据 ? ????????图26 ????????触摸屏真实界面 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:55:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |