易语言 串口通讯
.版本 2 .程序集 窗口程序集1 .程序集变量 计数器, 整数型 .程序集变量 文本发送计次, 整数型 .子程序 __启动窗口_创建完毕 .子程序 _手动发送数据_被单击 端口_发送数据.停止 () 发送预处理 () .如果真 (端口_发送数据.启动 () = 假) 信息框 (“发送启动失败,请查看本电脑是否有此端口!或者此端口已经打开!”, 0, ) 返回 () .如果真结束 .判断开始 (组合框_发送进制.现行选中项 = 0) .如果真 (端口_发送数据.发送数据 (字符 (到数值 (进制转换 (编辑框_手动发送内容.内容, 10, 2)))) = 假) 信息框 (“发送数据失败!”, 0, ) 返回 () .如果真结束 .判断 (组合框_发送进制.现行选中项 = 1) .如果真 (端口_发送数据.发送数据 (字符 (到数值 (进制转换 (编辑框_手动发送内容.内容, 10, 8)))) = 假) 信息框 (“发送数据失败!”, 0, ) 返回 () .如果真结束 .判断 (组合框_发送进制.现行选中项 = 2) .如果真 (端口_发送数据.发送数据 (字符 (到数值 (编辑框_手动发送内容.内容))) = 假) 信息框 (“发送数据失败!”, 0, ) 返回 () .如果真结束 .判断 (组合框_发送进制.现行选中项 = 3) .如果真 (端口_发送数据.发送数据 (字符 (到数值 (进制转换 (编辑框_手动发送内容.内容, 10, 16)))) = 假) 信息框 (“发送数据失败!”, 0, ) 返回 () .如果真结束 .判断 (组合框_发送进制.现行选中项 = 4) .如果真 (端口_发送数据.发送数据 (编辑框_手动发送内容.内容) = 假) 信息框 (“发送数据失败!”, 0, ) 返回 () .如果真结束 .默认 .判断结束 端口_发送数据.停止 () .子程序 进制转换, 文本型, 公开 .参数 被转换文本, 文本型 .参数 被转换进制, 整数型 .参数 转换的进制, 整数型 .局部变量 临时文本, 文本型 .局部变量 临时数值, 长整数型 .局部变量 计次变量, 整数型 .局部变量 欲转换文本, 文本型 .如果真 (被转换进制 < 2 或 转换的进制 < 2 或 被转换进制 > 36 或 转换的进制 > 36) ' 判断两个“进制系数”是否正确 返回 (“参数错误-进制只能在2-36之间”) .如果真结束 被转换文本 = 到大写 (到半角 (被转换文本)) ' 规范参数 .计次循环首 (取文本长度 (被转换文本), 计次变量) 临时文本 = 取文本中间 (被转换文本, 计次变量, 1) .如果真 (寻找文本 (取文本左边 (“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”, 被转换进制), 临时文本, , 假) = -1) 临时文本 = “参数错误-” + 被转换文本 + “不是一个有效的” + 取文本左边 (数值到金额 (被转换进制, 真), 取文本长度 (数值到金额 (被转换进制, 真)) - 4) + “进制数!” 跳出循环 () .如果真结束 .如果真 (计次变量 = 取文本长度 (被转换文本)) 临时文本 = “” .如果真结束 .计次循环尾 () .如果真 (临时文本 ≠ “”) 返回 (临时文本) .如果真结束 ' 以上为数据处理代码 .如果真 (被转换进制 = 转换的进制) 返回 (被转换文本) .如果真结束 .计次循环首 (取文本长度 (被转换文本), 计次变量) ' 整数转换开始 临时数值 = (寻找文本 (“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”, 取文本中间 (被转换文本, 计次变量, 1), , 真) - 1) × 求次方 (被转换进制, 取文本长度 (被转换文本) - 计次变量) + 临时数值 .计次循环尾 () .判断循环首 (临时数值 > 转换的进制 - 1) 欲转换文本 = 取文本中间 (“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”, 到数值 (到文本 (临时数值 % 转换的进制)) + 1, 1) + 欲转换文本 临时数值 = 取整 (临时数值 ÷ 转换的进制) .判断循环尾 () 欲转换文本 = 取文本中间 (“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”, 临时数值 + 1, 1) + 欲转换文本 ' 整数转换结束 返回 (欲转换文本) .子程序 _退出_被单击 销毁 () .子程序 _组合框_端口号_列表项被选择 端口_发送数据.停止 () 端口_发送数据.端口号 = 多项选择 (组合框_端口号.现行选中项 + 1, 1, 2, 3, 4, 5, 6) .子程序 _组合框_波特率_列表项被选择 端口_发送数据.停止 () 端口_发送数据.波特率 = 到数值 (组合框_波特率.取项目文本 (组合框_波特率.现行选中项)) .子程序 _组合框_数据位_列表项被选择 端口_发送数据.停止 () 端口_发送数据.数据位数 = 多项选择 (组合框_数据位.现行选中项 + 1, 6, 7, 8) .子程序 _组合框_校验_列表项被选择 端口_发送数据.停止 () 端口_发送数据.奇偶校验方案 = 多项选择 (组合框_校验.现行选中项 + 1, 0, 1, 2) .子程序 _组合框_停止位_列表项被选择 端口_发送数据.停止 () 端口_发送数据.停止位数 = 多项选择 (组合框_停止位.现行选中项 + 1, 0, 1, 2) .子程序 发送预处理 端口_发送数据.停止 () 端口_发送数据.波特率 = 到数值 (组合框_波特率.取项目文本 (组合框_波特率.现行选中项)) 端口_发送数据.端口号 = 多项选择 (组合框_端口号.现行选中项 + 1, 1, 2, 3, 4, 5, 6) 端口_发送数据.数据位数 = 多项选择 (组合框_数据位.现行选中项 + 1, 6, 7, 8) 端口_发送数据.奇偶校验方案 = 多项选择 (组合框_校验.现行选中项 + 1, 0, 1, 2) 端口_发送数据.停止位数 = 多项选择 (组合框_停止位.现行选中项 + 1, 0, 1, 2) .如果 (端口_发送数据.奇偶校验方案 = 0) 端口_发送数据.奇偶校验 = 假 .否则 端口_发送数据.奇偶校验 = 真 .如果结束 .子程序 _选择框_DTR_被单击 .如果 (选择框_DTR.选中 = 真) 端口_发送数据.信号操作 (2, 1) .否则 端口_发送数据.信号操作 (1, 1) .如果结束 .子程序 _选择框_RTS_被单击 .如果 (选择框_RTS.选中 = 真) 端口_发送数据.信号操作 (2, 2) .否则 端口_发送数据.信号操作 (1, 2) .如果结束 .子程序 _选择框_Break_被单击 .如果 (选择框_Break.选中 = 真) 端口_发送数据.信号操作 (2, 3) .否则 端口_发送数据.信号操作 (1, 3) .如果结束 .子程序 _编辑框_发送周期_内容被改变 .如果真 (选择框_时钟标志.选中 = 真) 时钟1.时钟周期 = 到数值 (编辑框_发送周期.内容) .如果真结束 .子程序 _选择框_时钟标志_被单击 .如果 (选择框_时钟标志.选中 = 真) 组合框_发送方式.现行选中项 = 1 选择框_时钟标志.标题 = “时钟已开启” 端口_发送数据.停止 () 发送预处理 () .如果真 (端口_发送数据.启动 () = 假) 信息框 (“发送启动失败,请查看本电脑是否有此端口!或者此端口已经打开!”, 0, ) 返回 () .如果真结束 时钟1.时钟周期 = 到数值 (编辑框_发送周期.内容) .否则 组合框_发送方式.现行选中项 = 0 时钟1.时钟周期 = 0 端口_发送数据.停止 () 选择框_时钟标志.标题 = “时钟已停止” .如果结束 .子程序 _组合框_发送方式_列表项被选择 .如果 (组合框_发送方式.现行选中项 = 1) 选择框_时钟标志.选中 = 真 选择框_时钟标志.标题 = “时钟已开启” 端口_发送数据.停止 () 发送预处理 () .如果真 (端口_发送数据.启动 () = 假) 信息框 (“发送启动失败,请查看本电脑是否有此端口!或者此端口已经打开!”, 0, ) 返回 () .如果真结束 时钟1.时钟周期 = 到数值 (编辑框_发送周期.内容) .否则 选择框_时钟标志.选中 = 假 端口_发送数据.停止 () 选择框_时钟标志.标题 = “时钟已停止” 时钟1.时钟周期 = 0 .如果结束 .子程序 _端口_发送数据_收到信号 .参数 信号类型, 整数型 .子程序 _端口_接收数据_收到信号 .参数 信号类型, 整数型 .子程序 _端口_接收数据_数据到达 .参数 数据字节值, 整数型 .如果真 (单选框_单列.选中 = 真) ' 如果是显示一列直下的形式,就需要计数及加回车 计数器 = 计数器 + 1 ' 程序集变量增加一位 .如果真结束 .判断开始 (选择框_二进制接收数据.选中 = 真) ' 如果需显示2进制时 编辑框_接收数据显示处.加入文本 (选择 (单选框_单列.选中 = 真, 到文本 (计数器) + “RX: ”, “”) + 进制转换 (到文本 (数据字节值), 10, 2) + 选择 (单选框_串列.选中 = 真, #换行符, 选择 (选择框_间隔符.选中 = 真, 选择 (删全部空 (编辑框_间隔符.内容) = “”, “ ”, 编辑框_间隔符.内容), “”))) .判断 (选择框_八进制接收数据.选中 = 真) ' 如果需显示8进制时 编辑框_接收数据显示处.加入文本 (选择 (单选框_单列.选中 = 真, 到文本 (计数器) + “RX: ”, “”) + 进制转换 (到文本 (数据字节值), 10, 8) + 选择 (单选框_单列.选中 = 真, #换行符, 选择 (选择框_间隔符.选中 = 真, 选择 (删全部空 (编辑框_间隔符.内容) = “”, “ ”, 编辑框_间隔符.内容), “”))) .判断 (选择框_十进制接收数据.选中 = 真) ' 如果需显示10进制时 编辑框_接收数据显示处.加入文本 (选择 (单选框_单列.选中 = 真, 到文本 (计数器) + “RX: ”, “”) + 到文本 (数据字节值) + 选择 (单选框_单列.选中 = 真, #换行符, 选择 (选择框_间隔符.选中 = 真, 选择 (删全部空 (编辑框_间隔符.内容) = “”, “ ”, 编辑框_间隔符.内容), “”))) .判断 (选择框_十六进制接收数据.选中 = 真) ' 如果需显示16进制时 编辑框_接收数据显示处.加入文本 (选择 (单选框_单列.选中 = 真, 到文本 (计数器) + “RX: ”, “”) + 进制转换 (到文本 (数据字节值), 10, 16) + 选择 (单选框_单列.选中 = 真, #换行符, 选择 (选择框_间隔符.选中 = 真, 选择 (删全部空 (编辑框_间隔符.内容) = “”, “ ”, 编辑框_间隔符.内容), “”))) .判断 (选择框_ASCII码接收数据.选中 = 真) ' 如果需显示ASCII码时 编辑框_接收数据显示处.加入文本 (选择 (单选框_单列.选中 = 真, 到文本 (计数器) + “RX: ”, “”) + 字符 (数据字节值) + 选择 (单选框_单列.选中 = 真, #换行符, 选择 (选择框_间隔符.选中 = 真, 选择 (删全部空 (编辑框_间隔符.内容) = “”, “ ”, 编辑框_间隔符.内容), “”))) .默认 .判断结束 处理事件 () .子程序 _时钟1_周期事件 .如果真 (删全部空 (编辑框_手动发送内容.内容) = “0” 或 删全部空 (编辑框_手动发送内容.内容) = “00”) .如果真 (端口_发送数据.发送数据 ({ 0 }) = 假) 信息框 (“发送数据失败!”, 0, ) 时钟1.时钟周期 = 0 返回 () .如果真结束 .如果真结束 .判断开始 (组合框_发送方式.现行选中项 = 0) ' 发送2进制时进行以下操作 .如果真 (端口_发送数据.发送数据 (字符 (到数值 (进制转换 (编辑框_手动发送内容.内容, 2, 10)))) = 假) 信息框 (“发送数据失败!”, 0, ) 时钟1.时钟周期 = 0 返回 () .如果真结束 .判断 (组合框_发送进制.现行选中项 = 1) ' 发送8进制时进行以下操作 .如果真 (端口_发送数据.发送数据 (字符 (到数值 (进制转换 (编辑框_手动发送内容.内容, 8, 10)))) = 假) 信息框 (“发送数据失败!”, 0, ) 时钟1.时钟周期 = 0 返回 () .如果真结束 .判断 (组合框_发送进制.现行选中项 = 2) ' 发送10进制时进行以下操作 .如果真 (端口_发送数据.发送数据 (字符 (到数值 (编辑框_手动发送内容.内容))) = 假) 信息框 (“发送数据失败!”, 0, ) 时钟1.时钟周期 = 0 返回 () .如果真结束 .判断 (组合框_发送进制.现行选中项 = 3) ' 发送16进制时进行以下操作 .如果真 (端口_发送数据.发送数据 (字符 (到数值 (进制转换 (编辑框_手动发送内容.内容, 16, 10)))) = 假) 信息框 (“发送数据失败!”, 0, ) 时钟1.时钟周期 = 0 返回 () .如果真结束 .判断 (组合框_发送进制.现行选中项 = 4) .如果真 (端口_发送数据.发送数据 (编辑框_手动发送内容.内容) = 假) 信息框 (“发送数据失败!”, 0, ) 返回 () .如果真结束 .默认 .判断结束 .子程序 打开并读入文件, , , 读入16进制文本到编辑框中 .局部变量 文件号, 整数型 通用对话框_打开文件.标题 = “请选择要打开的文本文件:” 通用对话框_打开文件.类型 = 0 通用对话框_打开文件.过滤器 = “文本文件(*.TXT,*.INI)|*.TXT;*.INI|所有文件(*.*)|*.*” 通用对话框_打开文件.初始目录 = 取运行目录 () .如果真 (通用对话框_打开文件.打开 () = 真) 文件号 = 打开文件 (通用对话框_打开文件.文件名, #读入, ) .如果 (文件号 ≠ 0) 编辑框_发送文本显示处.内容 = 读入文本 (文件号, ) 关闭文件 (文件号) .否则 信息框 (“打开文件失败!”, #错误图标, “错误”) .如果结束 .如果真结束 .子程序 _打开文本_被单击 打开并读入文件 () .子程序 _发送文本_被单击 .如果真 (删全部空 (编辑框_发送文本显示处.内容) = “”) 打开并读入文件 () 返回 () .如果真结束 发送预处理 () .如果真 (端口_发送数据.启动 () = 假) 信息框 (“发送启动失败!!!”, 0, ) 返回 () .如果真结束 处理事件 () 文本发送计次 = 1 时钟3.时钟周期 = 1 置等待鼠标 () ' 端口_发送数据.停止 () .子程序 _时钟3_周期事件 .如果真 (取文本长度 (编辑框_发送文本显示处.内容) ÷ 2 < 文本发送计次) 时钟3.时钟周期 = 0 端口_发送数据.停止 () 恢复鼠标 () 输出调试文本 (到文本 (文本发送计次)) .如果真结束 输出调试文本 (到文本 (取文本中间 (编辑框_发送文本显示处.内容, 文本发送计次 × 2 - 1, 2))) .如果 (删全部空 (取文本中间 (编辑框_发送文本显示处.内容, 文本发送计次 × 2 - 1, 2)) = “00” 或 到数值 (取文本中间 (编辑框_发送文本显示处.内容, 文本发送计次 × 2 - 1, 2)) = 0) ' 如果为零的时候要特殊处理! 端口_发送数据.发送数据 ({ 0 }) ' 发送0时必须使用这样的转换为字节集的方式 .否则 端口_发送数据.发送数据 (字符 (到数值 (进制转换 (取文本中间 (编辑框_发送文本显示处.内容, 文本发送计次 × 2 - 1, 2), 16, 10)))) .如果结束 输出调试文本 (字符 (到数值 (进制转换 (取文本中间 (编辑框_发送文本显示处.内容, 文本发送计次 × 2 - 1, 2), 16, 10)))) 文本发送计次 = 文本发送计次 + 1 .子程序 _停止发送_被单击 时钟3.时钟周期 = 0 端口_发送数据.停止 () 恢复鼠标 () .子程序 _时钟2_周期事件 .子程序 _选择框_二进制接收数据_被单击 .如果 (选择框_二进制接收数据.选中 = 真) 选择框_八进制接收数据.禁止 = 真 选择框_十进制接收数据.禁止 = 真 选择框_十六进制接收数据.禁止 = 真 选择框_ASCII码接收数据.禁止 = 真 .否则 选择框_八进制接收数据.禁止 = 假 选择框_十进制接收数据.禁止 = 假 选择框_十六进制接收数据.禁止 = 假 选择框_ASCII码接收数据.禁止 = 假 .如果结束 .子程序 _选择框_八进制接收数据_被单击 .如果 (选择框_八进制接收数据.选中 = 真) 选择框_二进制接收数据.禁止 = 真 选择框_十进制接收数据.禁止 = 真 选择框_十六进制接收数据.禁止 = 真 选择框_ASCII码接收数据.禁止 = 真 .否则 选择框_二进制接收数据.禁止 = 假 选择框_十进制接收数据.禁止 = 假 选择框_十六进制接收数据.禁止 = 假 选择框_ASCII码接收数据.禁止 = 假 .如果结束 .子程序 _选择框_十进制接收数据_被单击 .如果 (选择框_十进制接收数据.选中 = 真) 选择框_八进制接收数据.禁止 = 真 选择框_二进制接收数据.禁止 = 真 选择框_十六进制接收数据.禁止 = 真 选择框_ASCII码接收数据.禁止 = 真 .否则 选择框_八进制接收数据.禁止 = 假 选择框_二进制接收数据.禁止 = 假 选择框_十六进制接收数据.禁止 = 假 选择框_ASCII码接收数据.禁止 = 假 .如果结束 .子程序 _选择框_十六进制接收数据_被单击 .如果 (选择框_十六进制接收数据.选中 = 真) 选择框_八进制接收数据.禁止 = 真 选择框_十进制接收数据.禁止 = 真 选择框_二进制接收数据.禁止 = 真 选择框_ASCII码接收数据.禁止 = 真 .否则 选择框_八进制接收数据.禁止 = 假 选择框_十进制接收数据.禁止 = 假 选择框_二进制接收数据.禁止 = 假 选择框_ASCII码接收数据.禁止 = 假 .如果结束 .子程序 _选择框_ASCII码接收数据_被单击 .如果 (选择框_ASCII码接收数据.选中 = 真) 选择框_八进制接收数据.禁止 = 真 选择框_十进制接收数据.禁止 = 真 选择框_二进制接收数据.禁止 = 真 选择框_十六进制接收数据.禁止 = 真 .否则 选择框_八进制接收数据.禁止 = 假 选择框_十进制接收数据.禁止 = 假 选择框_二进制接收数据.禁止 = 假 选择框_十六进制接收数据.禁止 = 假 .如果结束
用户评论
shannoncindy 2018-12-07 21:40:46
下载来学习一下
unfold20146 2018-12-07 21:40:46
很有用的资料
baidu_73467 2018-12-07 21:40:46
很好的东西,源码不错 看着这个代码,又在这个网站边学习边分析很快就学会了这个程序 http://www.51zxw.net/study.asp?vip=11156177