基于ARM的可视化无线环境探测机器人毕业论文.docx

上传人:小小飞 文档编号:3919651 上传时间:2019-10-10 格式:DOCX 页数:26 大小:653.94KB
返回 下载 相关 举报
基于ARM的可视化无线环境探测机器人毕业论文.docx_第1页
第1页 / 共26页
基于ARM的可视化无线环境探测机器人毕业论文.docx_第2页
第2页 / 共26页
基于ARM的可视化无线环境探测机器人毕业论文.docx_第3页
第3页 / 共26页
基于ARM的可视化无线环境探测机器人毕业论文.docx_第4页
第4页 / 共26页
基于ARM的可视化无线环境探测机器人毕业论文.docx_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《基于ARM的可视化无线环境探测机器人毕业论文.docx》由会员分享,可在线阅读,更多相关《基于ARM的可视化无线环境探测机器人毕业论文.docx(26页珍藏版)》请在三一文库上搜索。

1、微机原理及接口技术课程项目设计报告基于ARM的可视化无线环境探测机器人学 生:张容琛 林琳 金永范 授课教师: 赵金宪 2015年1月4日基于ARM的可视化无线环境探测机器人学生:张容琛 林琳 金永范老师:赵金宪摘 要:随着制造业与电子工业的发展,机器人代替人来执行某些危险或繁重的工作已经成为技术应用的主流。本次制作研究的对象就是一种可以通过传感器捕获环境信息,利用无线设备发送给远程控制端,同时可以通过遥控进行远程作业的机器人。该机器人由4电机驱动,同时装有4自由度的机械臂与一个可自由转向270度的摄像头云台。控制芯片采用ARM Cortex M3内核的STM32单片机,同时配有路由器,720

2、P高清摄像头,NRF24无线设备,DS18b20温度传感器与SIM900A通讯设备。通过路由器和NRF24将摄像头捕获的图像信息以及温度传感器捕获的温度信息传送至远程控制端,若温度高于设定值,则机器人发出报警,通过SIM900A向使用者发送报警短信,使用者则可以在远程控制端通过上位机软件利用NRF24进行远程操作,利用机械臂完成某些作业。由此,可避免在危险环境下对人产生不必要的伤亡,降低了火情发生时危害人生命安全的可能性。关键词: 机器人 环境监测 ARM 无线 上位机The Wireless Visual Environment Monitoring Robot Based On ARMUn

3、dergraduate:张容琛 林琳 金永范Supervisor:赵金宪Abstract: 目录1 前言2 系统总体设计 2.1 系统设计思路 2.2 系统模块设计及原理 2.21 STM32最小系统模块 2.22 电机驱动模块 2.23舵机驱动模块 2.24 SIM900A模块 2.25 NRF24L01无线模块 2.26 DS18b20温度传感器 2.3 程序实现方法 2.31 电机驱动程序 2.32 舵机驱动程序 2.33 SIM900A驱动程序 2.34 NRF24L01驱动程序 2.35 DS18b20采集程序3上位机程序设计参考文献收获与体会附录1前言信息技术是当前高技术发展中的主

4、流技术,它的发展对其它技术会产生极大的影响。而随着工业的发展,机器人可以代替或者协助人类完成各种工作,凡是枯燥的、危险的、有毒的、有害的工作,都可由机器人大显身手。机器人除了广泛应用于制造业领域外,还应用于资源勘探开发、救灾排险、医疗服务、家庭娱乐、军事和航天等其他领域。机器人是工业和非产业界的重大生产和服务性设备,也是先进制造技术领域不可缺少的自动化设备。如今,机器人技术将借助信息技术而发展,及利用先进无线通讯技术发展。无线机器人就是有说服力的例子,这两者的结合是必然的趋势。基于无线技术的机器人控制就是利用无线设备实现远程的机器人控制。无线设备的传输速率,时间迟延,数据丢失等是无线机器人控制

5、所面临的问题。而无线机器人的出现,将作为一种特殊的自动化设备,具备远程监控技术,在不适于人类从事的工作环境中,代替人类进行某种作业,减少人类在恶劣的工作环境下出现安全事故的概率。对于高危险性的工作来说,无线机器人是最好的执行者。2 系统总体设计2.1系统设计思路整个系统由 4轮车模、4自由度机械臂、270度自由度摄像头云台、电机驱动模块、STM32最小系统板、SIM900A模块、NRF24L01无线模块、路由器、摄像头、温度传感器、集成板 组成。路由器摄像头STM32控制系统NRF24L01主机NRF24L01从机温度传感器摄像头转向摄像头云台机械臂舵机机械臂抓取短信报警SIM900A模块4电

6、机转向转速电机驱动模块STM32控制系统 通过下图整合连接可实现设计要求。PC控制端 图2-12.2系统模块设计及原理2.21 STM32最小系统模块本次制作使用的STM32最小系统板是由德飞莱公司制造的stm32f103zet6核心板。有7组I/O口,共144个引脚,片内资源非常强大,包括Cortex M3 内核,DMA总线,SRAM(512MB),FSMC,APB/AHB桥,FLASH(512MB),RCC总线时钟,ST系统时钟,12位18路A/D转换,8个定时器等等。该最小系统将SPI通信引脚单独引出,方便了使用者外接NRF24L01无线设备,同时带有5V转3.3V的稳压芯片,也方便供电

7、。STM32总线结构如图2-2图2-2最小系统原理图如图2-3图2-32.22 电机驱动模块电机驱动芯片我选择BTN7960,因为这是一个集成的高电流半桥,与大多数驱动芯片使用门电路不同,它的内部驱动结构是由一个P沟道高策MOS管和一个N沟道MOS低边带集成的,由于P沟道高侧开关需要一个电荷泵,因此可以消除电磁干扰。同时它具有工作时处于开关模式限制电流,可以降低功耗,过压锁定,欠压关闭的优点。其内部原理图如图2-4图2-4电机驱动模块原理图如图2-5图2-52.23舵机驱动模块在本次制作中,机械臂的扭力大小和灵活度是衡量机器人性能好坏的一个重要标准,因此我们选择MG996舵机作为机械臂的动力驱

8、动。其扭力为9.4kg/cm(4.8V)反应速度为0.17sec/60degree(4.8v) 工作死区为 5us,性能精度较一般舵机要好。舵机的驱动原理是控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。举个例子,MG996舵机的自由度为270度,接受信号的高电平宽度若为1.5ms,则舵机转轴处于135度位置,若高电平宽度为2.

9、5ms,则舵机转轴处于270度位置。由此可以得出结论,舵机的驱动是依靠占空比不断变化的周期为20ms的PWM波来实现的,而PWM波的占空比则决定了舵机转轴的角度。舵机驱动原理图如图2-6图2-62.24 SIM900A模块SIM900A可以在2种频段下工作,其工作频段为:EGSM 900MHz和DCS 1800MHz,同时内嵌有TCP/IP协议同时扩展了AT命令,使用户可以方便使用TCP/IP协议。同时板载CP2102转换芯片、耳机和麦克风接口,可实现语音通话,短信,GPRS上网,串口通信等功能。模块功能图如图2-7图2-7模块原理图如图2-8图2-82.25 NRF24L01无线模块NRF2

10、4L01模块的核心是由NORDIC公司生产设计的无线传输芯片NRF24L01+,在本制作中,我们使用的无线模块是经过改良后的无线模块(增加了射频开关带通滤波器)令通信距离得到了扩展。NRF24L01的传输速率为2Mbps,通信频率为2.4GHz,可外接天线,同时功耗极低。NRF24L01与单片机之间的通信使用SPI通信协议,这是一种多用途的通信协议,SPI允许芯片与外部设备以半/全双工、同步、串行方式通信。通信特点是有主、从模式操作,SCK时钟信号极性和相位可编程,可选8位或16位传输帧格式,接受或发送完成时可触发中断标志位等。NRF24L01管脚图如图2-9图2-9SPI通信时,主设备通过M

11、OSI把数据发送给从设备,从设备通过MISO引脚回传数据。主设备和从设备使用的是同一个时钟信号,即为由主设备发送给从设备的SCK时钟信号。SPI通信流程如图2-10图2-102.26 DS18b20温度传感器DS18b20是常用的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。其内部结构主要由四部分组成:64位光刻ROM,温度传感器,温度报警触发器TH和TL,配置寄存器。DS18b20在出厂时以配置为12位,读取温度时共读取16位,前5个位为符号位,当前5位为1时,读取的温度为负数;当前5位为0时,读取的温度为正 数。温度为正时读取方法为:将16进制数转换成10进制即可。温度为

12、负时读取方法为:将16进制取反后加1,再转换成10进制即可。DS18b20内部结构如图2-11图2-11温度读取值与寄存器值对照表如图2-12图2-122.3程序实现方法程序总体设计思路为,PC控制端通过串口通信向主机发送控制数据,主机通过NRF24L01向从机发送控制数据,从机接收到主机的控制信号之后向主机发送反馈信号,主机再通过串口通信向PC控制端发送来自从机的反馈信号。由此可以实现PC对从机的远程控制。具体实现方法则通过定时器中断函数实现,令主机每10ms进行一次扫描检查PC端是否发出控制信号,若PC端发出控制信号,则通过中断函数向从机发出相应的控制命令,从机端每100ms进行一次扫描检

13、查主机端是否发出命令,若主机发出命令则通过中断函数执行命令并将接收到的信号反馈给主机端,主机再通过中断函数将反馈信号用串口通信发送给PC端。2.31 电机驱动程序在STM32编程环境下,使用GPIO时,需要先对其进行初始化,配置IO时钟,输出模式,频率,引脚参数等。void MAC_Init(void) GPIO初始化 GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin

14、_10|GPIO_Pin_11|GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); void GO(void) D9_HIGH(); D10_LOW(); D11_HIGH(); D12_LOW(); void TR(void) D9_HIGH(); D10_LOW(); D12_LOW(); D11_LOW(); void TL(void) D1

15、0_LOW(); D9_LOW(); D11_HIGH(); D12_LOW(); void BA(void) D10_HIGH(); D9_LOW(); D12_HIGH(); D11_LOW(); void ST(void) D10_LOW(); D9_LOW(); D12_LOW(); D11_LOW(); 2.32 舵机驱动程序在驱动舵机时,需要先配置定时器,利用定时器产生PWM波来驱动舵机,而若要产生变化的PWM波,则可以调用STM32库中的TIM_SetComparex(TIMx,n)函数。由于程序过于复杂,下面只给出定时器4的初始化及PWM波初始化配置函数及单舵机驱动子函数。st

16、atic void TIM4_GPIO_Config(void) /定时器4初始化函数GPIO_InitTypeDef GPIO_InitStructure; /*设置TIM3时钟为72MHZ */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); /* GPIOA 和 GPIOB 时钟使能 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); /* TIM4通道1和通道2输出引脚定义 */ GPIO_InitStructure.GPI

17、O_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; / 复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); /*TIM4通道3和通道4输出引脚定义 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; GPIO_Init(GPIOB, &GPIO_InitStructure);stati

18、c void TIM4_Mode_Config(void)TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;/* PWM电平信号跳变初值 */ u16 CCR1_Val = 1500; u16 CCR2_Val = 1500; u16 CCR3_Val = 1500; u16 CCR4_Val = 1500;/* -PWM占空比计算公式- TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR+1)* 100% = 50% TIM3 Ch

19、annel2 duty cycle = (TIM3_CCR2/ TIM3_ARR+1)* 100% = 37.5% TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR+1)* 100% = 25% TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR+1)* 100% = 12.5% - */* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 20000; /定时器计数周期 TIM_TimeBaseStructure.TIM_Pres

20、caler = 71; /设置预分频为72分频 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;/设置时钟分频系数 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /设置时钟为向上计数模式 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); /* PWM1 Mode configuration: Channel1 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

21、 /配置为PWM1模式 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR1_Val; /设置通道1的电平跳变值,当计数值到达该值时电平发生跳变 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; /当定时器计数值小于CCR1_Val时为高电平 TIM_OC1Init(TIM4, &TIM_OCInitStructure); /使能通道1 TIM_OC1PreloadConfig(TIM4

22、, TIM_OCPreload_Enable); /* PWM1 Mode configuration: Channel2 */ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR2_Val; /设置通道2的电平跳变值 TIM_OC2Init(TIM4, &TIM_OCInitStructure); /使能通道2 TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); /* PWM1 Mode configu

23、ration: Channel3 */ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR3_Val;/设置通道4的电平跳变值 TIM_OC3Init(TIM4, &TIM_OCInitStructure); /使能通道3 TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable); /* PWM1 Mode configuration: Channel4 */ TIM_OCInitStructure.TIM_Ou

24、tputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR4_Val;/设置通道4的电平跳变值 TIM_OC4Init(TIM4, &TIM_OCInitStructure);/使能通道4 TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM4, ENABLE); / 使能定时器4重装载寄存器TIM_Cmd(TIM4, ENABLE); /使能定时器4void TIM_SetCompare2(TIM_TypeDef*

25、 TIMx, uint16_t Compare2)改变占空比 /* Check the parameters */ assert_param(IS_TIM_LIST6_PERIPH(TIMx); /* Set the Capture Compare2 Register value */ TIMx-CCR2 = Compare2;2.33 SIM900A驱动程序驱动SIM900A的方法是通过单片机的串口通信以AT命令的形式来控制SIM900A。因此需要先配置串口。在本次制作中,我们使用单片机的串口2作为控制端,串口1则用于其他通信。串口2配置初始化函数void USART2_Config(voi

26、d)GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/* config USART2 clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);/* USART2 GPIO config */ /* Configure USART2 Tx (PA.02) as alternate function push-pull */ G

27、PIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure USART2 Rx (PA.03) as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode

28、 = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure);/* USART2 mode config */USART_InitStructure.USART_BaudRate = 115200;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No ;USA

29、RT_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART2, &USART_InitStructure); /*配置中断优先级 */NVIC_Configuration();/*配置串口2接收中断 */USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);USART_Cmd(USART2, ENABLE);

30、发送短信AT命令子函数void sim900a_sms(char *num,char *smstext) char end2 = 0x1A,0x00;SIM900A_CLEAN_RX(); /清除接收缓存sim900a_tx_printf(AT+CSCS=GSMr); /“GSM”字符集SIM900A_DELAY(100);sim900a_tx_printf(AT+CMGF=1r); /文本模式SIM900A_DELAY(100);sim900a_tx_printf(AT+CMGS=%sr,num); /电话号码SIM900A_DELAY(100);sim900a_tx_printf(%s,s

31、mstext); /短信内容sim900a_tx_printf(%s,end);2.34 NRF24L01驱动程序在本次制作中,用到两块NRF24L01模块,其中一个作为主机,一个作为从机使用由于程序过于复杂,这里只提供SPI初始化程序。void SPI_NRF_Init(void) SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; /*开启相应的IO口时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE

32、); /*使能SPI1时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); /*配置SPI1的SCK,MISO,MOSI引脚为GPIOA5,GPIOA6,GPIOA7 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /复用推挽输出 GPIO_Init(GP

33、IOA, &GPIO_InitStructure); /*配置SPI1的CE引脚为GPIOA4*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /*配置SPI1的CSN引脚为GPIOC4*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO

34、_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); /*配置SPI1的IRQ引脚为GPIOC5*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; / G

35、PIO_Init(GPIOC, &GPIO_InitStructure); /* 拉高CSN令NRF进入等待状态*/ NRF_CSN_HIGH(); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; /双线全双工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; /主模式 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; /数据长度8位 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;

36、/时钟极性,空闲时为低 SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; /第一个上升边沿采样 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;/NSS信号由软件产生 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; /8分频 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; /高位在前 SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(

37、SPI1, &SPI_InitStructure); /* Enable SPI1 */ SPI_Cmd(SPI1, ENABLE);2.35 DS18b20采集程序DS18b20采集得到的数据是数字信号不需要进行AD转换,但是采得数据为16位二进制数的补码形式,前5个位为符号位,当前5位为1时,读取的温度为负数;当前5位为0时,读取的温度为正数。第四位为小数位,中间7位是整数位。因此需要对原始数据进行处理才能输出。采集函数如下float DS18B20_Get_Temp(void)uint8_t tpmsb, tplsb;short s_tem;float f_tem;DS18B20_Rst

38、(); DS18B20_Presence(); DS18B20_Write_Byte(0XCC);/* 跳过 ROM */DS18B20_Write_Byte(0X44);/* 开始转换 */DS18B20_Rst(); DS18B20_Presence();DS18B20_Write_Byte(0XCC);/* 跳过ROM */ DS18B20_Write_Byte(0XBE);/* 读取温度 */tplsb = DS18B20_Read_Byte(); tpmsb = DS18B20_Read_Byte(); s_tem = tpmsb8;s_tem = s_tem | tplsb;if(

39、 s_tem 0 )/* 温度小于0*/f_tem = (s_tem+1) * 0.0625;elsef_tem = s_tem * 0.0625;return f_tem; 3 上位机程序设计上位机程序使用VB6.0编写。程序设计图如图2-13图2-13由于代码过于复杂,这里只提供窗体载入代码,串口设置代码,以及接收代码。Private Sub Form_Load() 载入窗体On Error GoTo Err ImgClose.Visible = False 不显示锁定最前面图标 WebBrowser1.Navigate about:blank If MSComm.PortOpen = T

40、rue Then MSComm.PortOpen = False Call Comm_initial(Val(Mid(CboCom.Text, 4, 1), CboBaudrate.Text, Left(CboParitybit.Text, 1), CboDatabit.Text, CboStopbit.Text 数据位载入 CboDatabit.AddItem 8 CboDatabit.AddItem 7 CboDatabit.AddItem 6 停止位载入 CboStopbit.AddItem 1 CboStopbit.AddItem 1.5 CboStopbit.AddItem 2Err

41、:End Sub串口设置Private Sub CboBaudrate_Click() 修改波特率 Call Comm_reSet(Val(Mid(CboCom.Text, 4, 2), CboBaudrate.Text, Left(CboParitybit.Text, 1), CboDatabit.Text, CboStopbit.Text) 串口设置End SubPrivate Sub CboCom_Click() 修改串口 Call Comm_reSet(Val(Mid(CboCom.Text, 4, 2), CboBaudrate.Text, Left(CboParitybit.Tex

42、t, 1), CboDatabit.Text, CboStopbit.Text) 串口设置End SubPrivate Sub CboDatabit_Click() 修改数据位 Call Comm_reSet(Val(Mid(CboCom.Text, 4, 2), CboBaudrate.Text, Left(CboParitybit.Text, 1), CboDatabit.Text, CboStopbit.Text) 串口设置End Sub Private Sub CboParitybit_Click() 修改校验位 Call Comm_reSet(Val(Mid(CboCom.Text, 4, 2), CboBaudrate.Text, Left(CboParitybit.Text, 1), CboDatabit.Te

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1