0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

E4A5 易安卓和单片机keil串口通讯mini理疗仪项目代码

徐工 来源:愿随风 作者:愿随风 2024-03-25 17:02 次阅读

一、软件E4A5 APP部署方法

E4A5的部署文件有两个,

wKgaomX-58qAFQR-AAAIWDfnJNI498.pngwKgaomX-7_KAGua2AAAbTwDhMOo990.png

​编辑后缀为e4a为编程文件,技术人员代码编辑文件,部署文件为apk。使用E4A5时候在设置处可以设置png格式的图标以及apk文件名,在调试程序前,需要下载

wKgZomX-7_KAbe9rAAAvWvGDxUw684.pngwKgZomX-59eARTagAAApNbX4zrs635.png

​编辑雷电模拟器作为手机模拟发生器(官网可以下载),E4A5为中文编程,其APK文件通过QQ附件形式可以直接下载安装在手机上,有些手机为了安全会在QQ下载时候后缀名改了,这个时候在手机默认的文档里找到该APK,将后缀名修改为APK后可以下载安装,下载前由于签字唯一性,需要将之前的程序先卸载,切记。

​​

二、软件飞讯语音功能技术部署方法

讯飞语音组件在E4A5的example例子文件里中级历程有例子,在编程的媒体类软件处可以找到

wKgaomX-7_OAPxw8AAAO9cdxoAM597.pngwKgaomX-6CWAU8pGAAAFLbUkYyw353.png

​编辑,同时也需要在扩展库找到权限操作

wKgZomX-7_OAejuWAAAT1lyZjbM602.pngwKgaomX-6DOAbbiBAAAIhAp3Riw835.png

​编辑,将例程里将里面的libsarm64-v8alibmsc.so 和 libsarmeabi-v7alibmsc.so 文件导入到E4A左侧的工程里的SO库中,并将Msc.jar文件导入到工程里的JAR包中

wKgZomX-6EiAWIscAABIydy-rI0800.png

然后讯飞语音可以用,如果手机有拦截警告,可以予以信任,讯飞语音的准确度一直在平台更新,准确率达90%。但是有一点需要注意,就是识别结束时候以逗号结束,所以一定在代码要加上“。”比如:时间设置为10分钟。

核心代码:
 事件 窗口1.创建完毕()
	如果 权限操作1.取系统版本号()>=23 则
		权限操作1.申请全部权限()
	结束 如果
	讯飞语音1.初始化("5cf517a5") '!!!请替换成你自己的APPID,并到左侧的工程选项卡中的  引入SO库  那里替换你自己申请到的SDK开发包中的libmsc.so库文件和Msc.jar文件
	讯飞语音1.初始化语音识别()
	讯飞语音1.设置语音识别参数(1,真)
	讯飞语音1.初始化语音合成()
	讯飞语音1.设置语音合成参数(1,50,50,50)
结束 事件
事件 讯飞语音1.语音识别初始化完毕(初始化结果 为 逻辑型)
	如果 初始化结果 = 真 则
		语音识别.可用=真
		弹出提示("语音识别初始化成功")
	否则	
	语音识别.可用=假
		弹出提示("语音识别初始化失败")
	结束 如果
结束 事件

事件 讯飞语音1.语音合成初始化完毕(初始化结果 为 逻辑型)
	如果 初始化结果 = 真 则
		
		弹出提示("语音合成初始化成功")
	否则	
		弹出提示("语音合成初始化失败")
	结束 如果
结束 事件

事件 语音识别.被单击()
讯飞语音1.开始语音识别()
结束 事件
事件 讯飞语音1.语音识别完毕(识别结果 为 逻辑型,识别内容 为 文本型)
	变量 分割 为 文本型()
	如果 识别结果 = 真 则
		分割 = 分割文本(识别内容,"n")
		如果 取数组下标(分割,1) > 0 则
		
			如果 分割(0)="时间设置为10分钟。" 则			
			分=10
		   结束 如果
		   如果 分割(0)="时间设置为20分钟。" 则
			分=20
		    结束 如果
		    如果 分割(0)="时间设置为30分钟。" 则
			分=30
		    结束 如果
	        如果 分割(0)="强度增大。" 则
			    强度=强度+1
			    如果 到数值(强度) > 9 或 到数值(强度) < 0 则
			    弹出提示("请输入0-9数字" )
				强度=强度-1
			    结束 如果	
			结束 如果
			如果 分割(0)="强度减小。" 则
				 强度=强度-1
				如果 到数值(强度) > 9 或 到数值(强度) < 0 则
			    弹出提示("请输入0-9数字" )
				强度=强度+1
			    结束 如果	 
			结束 如果
			如果 分割(0)="模式选择为针灸模式。" 则
			模式="针灸模式"
		    结束 如果
			如果 分割(0)="模式选择为腰部模式。" 则
			模式="腰部模式"
		    结束 如果
			如果 分割(0)="模式选择为腿部模式。" 则
			模式="腿部模式"
		    结束 如果
			如果 分割(0)="模式选择为脑部模式。" 则
			模式="脑部模式"
		    结束 如果
			如果 分割(0)="启动。" 则			
			  启动状态=1
	           如果 分 > 0 则
		       秒=59
		       毫秒=100
		       分=分-1
		       时间设置.可用=假
		       强度设置.可用=假
		       模式选择.可用=假
		       蓝牙1.发送数据(文本到字节(启动状态,"GBK"))
		       如果 分<  10 则
			
			   蓝牙1.发送数据(文本到字节(",0"&分,"GBK"))
			   否则
			   蓝牙1.发送数据(文本到字节(","&分,"GBK"))
		       结束 如果
		       如果 秒<  10 则
			
			   蓝牙1.发送数据(文本到字节(",0"&秒,"GBK"))
			   否则
			   蓝牙1.发送数据(文本到字节(","&秒,"GBK"))
		       结束 如果
	 
	           蓝牙1.发送数据(文本到字节(","&强度,"GBK"))
	           蓝牙1.发送数据(文本到字节(","&模式序号,"GBK"))
		       启动.可用=假
		      按钮暂停.可用=真
              时钟1.时钟周期 = 1
	          结束 如果
	          如果 分 = 0 则
		     弹出提示("请先设置时间")
	         结束 如果
		结束 如果
		如果 分割(0)="暂停。" 则			
			如果 按钮暂停.标题="暂停" 则
		   按钮暂停.标题="继续"
		   时间设置.可用=真
		   强度设置.可用=真
		   模式选择.可用=真
		
		   时钟1.时钟周期 = 0
		   启动状态=2 
	     否则
	       时钟1.时钟周期 = 1
		   按钮暂停.标题="暂停"
		   时间设置.可用=假
		   强度设置.可用=假
		   模式选择.可用=假
		   启动状态=1
	     结束 如果
	
	       蓝牙1.发送数据(文本到字节(启动状态,"GBK"))
		 如果 分<  10 则
			
			蓝牙1.发送数据(文本到字节(",0"&分,"GBK"))
			否则
			蓝牙1.发送数据(文本到字节(","&分,"GBK"))
		  结束 如果
		  如果 秒<  10 则
			
			蓝牙1.发送数据(文本到字节(",0"&秒,"GBK"))
			否则
			蓝牙1.发送数据(文本到字节(","&秒,"GBK"))
		   结束 如果
	       蓝牙1.发送数据(文本到字节(","&强度,"GBK"))
	       蓝牙1.发送数据(文本到字节(","&模式序号,"GBK"))
	    结束 如果  
		如果 分割(0)="停止。" 则			
			秒 = 0
            分 = 0
            时 = 0
	        强度=0
	        启动状态=0
	        时间设置.可用=真
		   强度设置.可用=真
		   模式选择.可用=真
	       蓝牙1.发送数据(文本到字节(启动状态,"GBK"))

		   蓝牙1.发送数据(文本到字节(",0"&分,"GBK"))
		
	        蓝牙1.发送数据(文本到字节(",0"&秒,"GBK"))
	        蓝牙1.发送数据(文本到字节(","&强度,"GBK"))
	        蓝牙1.发送数据(文本到字节(","&模式序号,"GBK"))
	        
	       启动.可用=真
	       按钮暂停.可用=假
		结束 如果   
	        标签1.标题 = "时间:"&到文本(时) & ":" & 到文本(分) & ":" & 到文本(秒)&"n"&"强度:"&到文本( 强度 )&"  "&"模式:"&模式
		结束 如果
		弹出提示(分割(0))	
	否则	
		弹出提示("识别失败")
	结束 如果
结束 事件

三、软件E4A5蓝牙技术说明

(一)使用串口助手或者HID转串口小助手

wKgZomX-6c-AILExAADl7JIGfoU624.png

可以对HC-4或者更高级版本进行AT指令编辑。当HC-4蓝牙连接电脑时候,需要HC-USB-T 参数架配合使用,但当跟单片机具体硬件时候则可以HC-4蓝牙直接与单片机TXD和RXD通讯。具体执行图如图1 图2 图3

wKgaomX-6pGAETSwAAHwe9GbEFQ429.png

图1

wKgZomX-6r-Acf_4AAJKlNs1E_M431.png

图3

(二)在ESA5里需要三个控件,分别是蓝牙、位置传感器、权限操作,蓝牙初始化程序:

事件 主窗口.创建完毕()	
	如果 权限操作1.检查权限("android.permission.BLUETOOTH") = 真 且 权限操作1.检查权限("android.permission.BLUETOOTH_ADMIN") = 真  且 权限操作1.检查权限("android.permission.READ_PHONE_STATE") = 真 则
		弹出提示("已获得权限,直接初始化蓝牙")
		初始化蓝牙()
	否则
		弹出提示("未获得权限,开始申请权限")
		权限操作1.申请全部权限()
	结束 如果
结束 事件

事件 权限操作1.申请完毕(权限数组 为 文本型(),申请结果 为 整数型())
	如果 权限操作1.检查权限("android.permission.BLUETOOTH") = 真 且 权限操作1.检查权限("android.permission.BLUETOOTH_ADMIN") = 真  且 权限操作1.检查权限("android.permission.READ_PHONE_STATE") = 真 则
		初始化蓝牙()
	否则
		信息框("信息","蓝牙权限没有开启,请在应用的权限设置页面开启蓝牙权限!","确定")
		权限操作1.打开权限设置()
	结束 如果
结束 事件

过程 初始化蓝牙()
	如果 蓝牙1.是否存在() = 假 则
		信息框("信息","本机找不到蓝牙设备,程序将退出!","确定")
		结束程序()
	结束 如果
	如果 蓝牙1.是否已开启() = 假 则
		蓝牙1.开启蓝牙()
	否则	
		蓝牙1.置工作模式(2)
	结束 如果		
结束 过程

事件 蓝牙1.蓝牙设置完毕(设置结果 为 整数型)
	如果 设置结果 = 2则
		蓝牙1.置工作模式(2)
	结束 如果	
结束 事件
蓝牙搜索:
事件 按钮1.被单击()
	位置传感器1.开始监测() '在新版的安卓系统中,必须开启GPS定位才能搜索到蓝牙设备
	列表框1.清空项目()
	蓝牙1.搜索设备() '搜索设备
	弹出提示("正在搜索")
结束 事件
发现蓝牙
发现蓝牙陈列:
事件 蓝牙1.发现设备(设备名称 为 文本型,设备地址 为 文本型,是否已配对 为 逻辑型)	
	列表框1.添加项目("理疗" & 列表框1.取项目数() & "-" & 设备地址 & "-" & 是否已配对)
	列表框1.置项目标记(列表框1.取项目数()-1,设备地址)
结束 事件
选择列表框里蓝牙:
事件 列表框1.表项被单击(项目索引 为 整数型)	
	变量 设备地址 为 文本型	
	蓝牙索引=项目索引
	设备地址 = 列表框1.取项目标记(项目索引)
	标签1.标题=设备地址
	保存对象("标签1",标签1)
	'蓝牙1.连接设备(设备地址)'连接设备
	'弹出提示("正在连接:" & 设备地址)	
	保存窗口("窗口1",创建 窗口1)'这句话很重要,要刷新作用,也是声明创新窗口
	切换窗口(读取窗口("窗口1"))
结束 事件
关闭蓝牙:
事件 关闭蓝牙.被单击()
	蓝牙1.断开连接() '退出处理,释放资源,结束内部处理线程
	结束程序()
结束 事件
事件 蓝牙1.连接完毕(连接结果 为 逻辑型,设备名称 为 文本型,设备地址 为 文本型,连接模式 为 整数型)
	变量 设备信息 为 文本型
	变量 文本数组 为 文本型()
	变量 启动窗口 为 主窗口
	如果 连接结果 = 真 则	
		窗口1.标题 = "已连接:"
	标签2.标题 =  "已连接" 
		弹出提示("连接成功")
	否则	
	标签2.标题 =  "未连接" 
		弹出提示("连接失败")
	结束 如果
结束 事件

值得注意是这两句全局定义控件,只有保持对象了,在其他窗口才可以引用,蓝牙功能就可以跨窗口操作:

保存对象("蓝牙1",蓝牙1)'这句话很重要,否则权限无法保存

保存窗口("主窗口",本对象) '本对象是当前窗口

四、软件E4A5串口发送和接收

发收具体命令:

蓝牙1.发送数据(文本到字节(启动状态,"GBK")),

其中启动状态是整数型或者文本型,字符可以直接接收,但是数字需要转换,单片机接收是ASCII值,所以接收不能直接接收,需要ASCII码转换,我是全部将命令以数字形式发送给单片机,单片机有ASCII码1-9转换表:uchar shijian[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};单片机接收只能是一个字符一个字符接收,ascii码减去字符0刚好等于对应的数字,一定要记得。

Recive_table[i]=SBUF;

摘取字符接收:if(Recive_table[i]=='x')//接到需要汇报

摘取数字接收:minute=(Recive_table[1]-'0')*10+(Recive_table[2]-'0');

接收具体命令:

E4A5接收字符串后需要用寻找文本(分割数据,"rp",0) >=0来分割字符,其中rp是寻找标记的起始位置,它的起始开始数字位为0,所以找一个字符其实就是到0那个位置就是准确位置。我们的字符串格式为zifu="rpm10Ms58Sq4Qa2Ab0B",分别代表分钟、秒、强度、模式、启动状态,例:如果 寻找文本(分割数据,"q",0) >0 则 强度= 取指定文本2(分割数据,"q","Q") 结束 如果

事件 蓝牙1.收到数据(数据 为 字节型(),设备名称 为 文本型,设备地址 为 文本型)
	变量 收到数据 为 文本型	
	分割数据=字节到文本(数据,"GBK") ’串口通讯接收字符串
	如果 寻找文本(分割数据,"y",0) >=0 则 
		弹出提示("程序已启动")
	结束 如果
	如果 寻找文本(分割数据,"n",0) >=0 则 
		弹出提示("程序已停止")
	结束 如果
	如果 寻找文本(分割数据,"z",0) >=0 则 
		弹出提示("程序已暂停")
	结束 如果
	'rpm10Ms58Sq4Qa2Ab0B
 如果 寻找文本(分割数据,"rp",0) >=0 则 
	  	如果 寻找文本(分割数据,"m",0) >0 则
		分=取指定文本2(分割数据,"m","M")		
	  	结束 如果
	  如果 寻找文本(分割数据,"s",0) >0 则
	秒=  取指定文本2(分割数据,"s","S")	  	
	  	结束 如果
		如果 寻找文本(分割数据,"q",0) >0 则
	强度=  取指定文本2(分割数据,"q","Q")
	  	结束 如果
		如果 寻找文本(分割数据,"a",0) >0 则
	模式数额=  取指定文本2(分割数据,"a","A")
	如果 模式数额=0 则
		模式="针灸模式"
		结束 如果
		如果 模式数额=1 则
		模式="腰部模式"
		结束 如果
		如果 模式数额=2 则
		模式="腿部按摩"
		结束 如果
		如果 模式数额=3 则
		模式="脑部按摩"
		结束 如果		
	  	结束 如果
		如果 寻找文本(分割数据,"b",0) >0 则
	启动状态=  取指定文本2(分割数据,"b","B")
		 如果 启动状态=0 则
		按钮暂停.可用=假
		启动.可用=真
		  时钟1.时钟周期 = 0 
		  秒 = 0
          分 = 0
          时 = 0
	      强度=0
		   结束 如果
			  如果 启动状态=1 则
		       时钟1.时钟周期 = 1
			按钮暂停.可用=真
			启动.可用=假
		      结束 如果
		     如果 启动状态=2 则
		     时钟1.时钟周期 = 0		
		     如果 按钮暂停.标题="暂停" 则
		    按钮暂停.标题="继续"
		    时钟1.时钟周期 = 0
	        否则
	        时钟1.时钟周期 = 1
		   按钮暂停.标题="暂停"
	        结束 如果  
		结束 如果
	  结束 如果        
	结束 如果 
	标签1.标题 = "时间:"&到文本(时) & ":" & 到文本(分) & ":" & 到文本(秒)&"n"&"强度:"&到文本( 强度 )&"  "&"模式:"&模式
	
结束 事件
     单片机发送字符串:
   				fasong_table[1]='r';				
				fasong_table[2]='p';
				fasong_table[3]='m';
				fasong_table[4]=shijian[minute/10];
				fasong_table[5]=shijian[minute%10];
				fasong_table[6]='M';
				fasong_table[7]='s';
				fasong_table[8]=shijian[second/10];
				fasong_table[9]=shijian[second%10];
				fasong_table[10]='S';
				fasong_table[11]='q';
				fasong_table[12]=shijian[stre];
				fasong_table[13]='Q';
				fasong_table[14]='a';
				fasong_table[15]=shijian[mod];
				fasong_table[16]='A';
				fasong_table[17]='b';
				fasong_table[18]=shijian[star_bol];
				fasong_table[19]='B';
				
				//zifu="rpm10Ms58Sq4Qa2Ab0B";
				for(j=0;j<=19;j++)
				{
					 TI=0;     //请求发送标志位			
				   SBUF=fasong_table[j];
					while(!TI);
				}

五、单片机几个定时器和中断器使用说明

定时器在该项目中非常重要,STC12C5A60S2只有两个定时器T0和T1,项目里T0当倒计时,对应中断3,T1当串口,对应中断4。但是2路模块PCA模块有独立2个16位定时器,可以很好释放T0和T1的工作压力。PCA模块里启用PWM模块时候需要启用寄存器TMR2和AUXR1特殊功能寄存器。这样才能启动独立的定时器。定时器有12T和1T的晶振频率,本项目使用是AUXR |= 0x04; 1T的晶振频率,使用12T启动不了PCA的PWM模块,具体如何我也没研究透。

串口初始化:

#define		Timer0_Reload	18432	//T0 interrupt at 10ms @22.1184MHZ
sfr AUXR1 = 0xA2;
sfr	AUXR = 0x8E;
sfr S2CON = 0x9A;	//12C5A60S2双串口系列
sfr S2BUF = 0x9B;	//12C5A60S2双串口系列
sfr IE2   = 0xAF;	//STC12C5A60S2系列
sfr BRT   = 0x9C;
/////////////
//sfr	AUXR = 0x8E;
sfr CCON = 0xD8;
sfr CMOD = 0xD9;
sfr CCAPM0 = 0xDA;	//PCA module 0 work mode
sfr CCAPM1 = 0xDB;	//PCA module 1 work mode
sfr CL     = 0xE9;	//PCA counter
sfr CCAP0L = 0xEA;	//PCA模块0的捕捉/比较寄存器低8位。
sfr CCAP1L = 0xEB;	//PCA模块1的捕捉/比较寄存器低8位。
sfr PCA_PWM0 = 0xF2;	//PCA模块0 PWM寄存器。
sfr PCA_PWM1 = 0xF3;	//PCA模块1 PWM寄存器。
sfr CH     = 0xF9;
sfr CCAP0H = 0xFA;		//PCA模块0的捕捉/比较寄存器高8位。
sfr CCAP1H = 0xFB;		//PCA模块1的捕捉/比较寄存器高8位。

sbit CCF0  = CCON^0;	//PCA 模块0中断标志,由硬件置位,必须由软件清0。
sbit CCF1  = CCON^1;	//PCA 模块1中断标志,由硬件置位,必须由软件清0。
sbit CR    = CCON^6;	//1: 允许PCA计数器计数,必须由软件清0。
sbit CF    = CCON^7;	//PCA计数器溢出(CH,CL由FFFFH变为0000H)标志。PCA计数器溢出后由硬件置位,必须由软件清0。

#define		PWM0_NORMAL()	PCA_PWM0 = 0	//PWM0正常输出(默认)
#define		PWM0_OUT_0()	PCA_PWM0 = 3	//PWM0一直输出0
#define		PWM1_NORMAL()	PCA_PWM1 = 0	//PWM1正常输出(默认)
#define		PWM1_OUT_0()	PCA_PWM1 = 3	//PWM1一直输出0
/*************	本地函数声明	**************/

void	en_PCA(void);
void	en_PWM(uchar channel,uchar start_value);

bit		B_T0_interrupt;
void Uart_Init()			
{  
 
		PCON &= 0x7F;		//波特率不倍速https://blog.csdn.net/lzxiaotu/article/details/117666450
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x04;		//独立波特率发生器时钟为Fosc,即1T
	BRT = 0xDC;		//设定独立波特率发生器重装值
	AUXR |= 0x01;		//串口1选择独立波特率发生器为波特率发生器
	AUXR |= 0x10;		//启动独立波特率发生器	
	EA = 1;//开总中断
	ES = 1;//开串口中断
} 
PWM初始化:
void pwm_init()
{
	uint	i;

	en_PWM(0,pwmH_num);	//load PWM value
	en_PWM(1,pwmL_num);	//load PWM value
	en_PCA();		//enable PCA
	EA  = 1;		//enable all interrupt
    TMOD = 0x02;	//T0 as 8 bit reload
		TH0  = 0 - 10;	//Reload time
		AUXR |=  0x80;	//T0 as 1T
		ET0 = 0;		//disable T0 interrupt
		TR0 = 1;		//enable T0
		PWM0_NORMAL();	//PWM0 normal output
		PWM1_NORMAL();	//PWM1 normal output
		for(i=0; i<  10000; i++)	;	//delay for output PWM
		TR0 = 0;		//disable T0
		PWM0_OUT_0();	//PWM0 stop and putput 0
		PWM1_OUT_0();	//PWM1 stop and putput 0		
		TMOD = 0x01;	//T0 as 16bit timer
		TL0  = (0 - Timer0_Reload) % 256;	//load the 16bit time
		TH0  = (0 - Timer0_Reload) / 256;	
		AUXR &=  ~0x80;	//T0 as 12T
		ET0 = 1;		//enable T0 interrupt
		TR0 = 1;		//enable T0
		B_T0_interrupt = 0;	//clear the T0 interrupt flag
		while(!B_T0_interrupt);	//wait the T0 interrupt
   TR0 = 0;		//disable T0
}
定时器初始化:
void TIM2Inital(void)
{
	TMOD=0x10;//T1设置为定时器
	TH1=(65536-50000)/256;//设定初值
	TL1=(65536-50000)%256;
	ET1=1;
	EA=1;
	TR1=0;//启动TR
}

六、单片机STC12C5A60S2芯片的pwm模块介绍与使用

单片机只有s2结尾才代表有独立的两个PCB模块,那么pwm是怎么发出呢?根据手册,本项目的串口大概是默认 RXD2为P1.2,可以切换到P4.2 ,TXD2默认为-P1.3,可以切换到P4.3。

本研究采用STC12C5A60S2单片机实现CCP脉冲波的精确控制。与传统51单片机相比,该单片机具有专用的AUXR辅助寄存器,使CCP脉冲波计时更为独立和准确[16]。本研究通过以下公式计算PWM频率初始值:

wKgaomX-7C2AXNwKAAAG00rZqsI482.png

理疗仪的各种调制波形根据所需治疗效果进行定制,包括脉宽、脉冲间隔、持续时间和关断时间。实验中,共80名测试者分为A、B两组进行治疗效果对比。A组仅采用传统医疗手法,而B组则结合了本设备的辅助治疗。两周的治疗后,本研究对比了两组的效果,如表1所示。

表1 常规手法与设备辅助治疗效果的对比

组别 治疗部位 理疗手法 效果(%) 汇总(%)
A组 腰部 锤击、揉捏 60 55
A组 腿部 针刺、揉捏 50 -
A组 手部 针刺、叩击、揉捏 70 -
A组 头部 针刺、揉捏 40 -
B组 腰部 锤击、揉捏 + 设备 80 82.5
B组 腿部 针刺、揉捏 + 设备 90 -
B组 手部 针刺、叩击、揉捏 + 设备 90 -
B组 头部 针刺、揉捏 + 设备 70 -

研究利用示波器捕获了设备输出的治疗波形,以此验证设备的性能和治疗波形的一致性,如图4所示。

wKgZomX-7FOAXkUvAAZds7yZhKk126.png

图4 PWM调制成治疗波形展示

具体代码:

void mol_methor()
{
  switch(mod)
	{
		case 0:
			pwmH_num=120;
		  pwmL_num=50;
			if(jishi>15)
			{
			   pwmH_num=50;
				 pwmL_num=120;
				if(jishi==30)
				{
				jishi=0;
				}
			}
			break;
		case 1:	
			pwmH_num=130;
		  pwmL_num=100;
			if(jishi>15)
			{
			   pwmH_num=199;
				 pwmL_num=130;
				if(jishi==30)
				{
				jishi=0;
				}
			}
			break;
			case 2:	
			pwmH_num=80;
		  pwmL_num=110;
			if(jishi>15)
			{
			   pwmH_num=110;
				 pwmL_num=80;
				if(jishi==30)
				{
				jishi=0;
				}
			}
			break;
			default:
				pwmH_num=160;
		    pwmL_num=110;
			if(jishi>15)
			{
			   pwmH_num=110;
				 pwmL_num=160;
				if(jishi==30)
				{
				jishi=0;
				}
			}
			break;
		}
			
}


审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    447

    文章

    47788

    浏览量

    409118
  • 蓝牙
    +关注

    关注

    112

    文章

    5428

    浏览量

    165650
  • 通讯
    +关注

    关注

    9

    文章

    840

    浏览量

    34365
  • 串口
    +关注

    关注

    14

    文章

    1483

    浏览量

    74511
  • keil
    +关注

    关注

    68

    文章

    1196

    浏览量

    165311
收藏 人收藏

    评论

    相关推荐

    家用理疗仪自制原理图

    本电路原理简单,制作方便,各位电子发烧友们可尝试自制。家用 理疗仪 自制原理图如下:
    发表于 10-09 12:04 1.5w次阅读
    家用<b class='flag-5'>理疗仪</b>自制原理图

    求基于单片机控制的红外理疗仪温控系统设计方面的意见

    有没有大神有 基于单片机控制的红外理疗仪温控系统 实物设计方面的资料或者大神们给点意见,谢谢.要求:可以控制加热时间与加热温度设定。
    发表于 05-06 21:04

    有没有人做过单片机控制的红外理疗仪温控方面的项目

    有没有人做过单片机控制的红外理疗仪 温控方面的项目? 主要是控制温度 与检测温度
    发表于 05-07 09:08

    二自由度WIFI 履带车 PS2 无线控制 手机控制项目计划(连载)

    简单控制小车动起来)3.模块化编程相关知识及实例演示4.单片机串口通信相关介绍5.舵机控制原理介绍6.单片机实现对单个舵机的控制7.
    发表于 08-04 23:05

    【Ti SimpleLink SensorTag申请】基于蓝牙的智能三叉神经疼痛理疗仪

    申请理由:智能三叉神经疼痛理疗仪是一款专业应用于缓解慢性疼痛的智能设备。现目前使用BLE4.0做蓝牙从,使设备与手机进行数据交互使用,并通过手机和服务器进行数据收集及分析。之前有用过蓝牙2.0进行
    发表于 03-29 15:30

    我想找人开发一个中频理疗仪案子谁可以接???

    `我们公司想找人开发一个中频理疗仪的全套案子有谁可以接!类似京东网上的https://item.jd.com/1727315570.html `
    发表于 12-21 14:07

    重金。。。求一个中频理疗仪方案,及工业设计

    `需求一个中频理疗仪的方案:如果能够提供整套解决方案,以及有介绍朋友做工业计设高手的,重谢!!联系QQ:356214827中频理疗仪的功能与下图相似`
    发表于 01-06 10:46

    【MAX17270申请试用】中低频康复理疗仪

    项目名称:中低频康复理疗仪试用计划:产品内部涉及多种低压直流电压,由开关电源通过AC转化为DC,再通过多组降压,分别降到相应值,再逐一提供给各各弱电系统。
    发表于 03-04 10:25

    什么是中频理疗仪

    什么是中频理疗仪?基于STM8S103K3T6C 8位单片机的中频理疗仪解决方案
    发表于 06-16 07:50

    手机与蓝牙模块联合调试—— 单片机蓝牙控制LED灯亮灭(上)

    系列博文:(1)手机与蓝牙模块联合调试(一)——蓝牙模块的串口通讯 (2)手机与蓝牙模块
    发表于 07-01 07:36

    串口单片机交互协议的相关资料分享

    上电后板主动发送一包数据,单片机控制板也主动发送一包数据。设备号卡号设备状态使能按键出水量继电器组单片机端:电子水卡刷卡后,根据设备状态 填充卡号;
    发表于 01-20 06:20

    蓝牙小项目的相关资料分享

    title: 蓝牙小项目总结tags: androiddate: 2019-03-10 23:43:00这次的项目比较特殊。。。居然是。。。既然是!!它!!—51
    发表于 03-02 06:30

    单片机串口通讯程序

    基于51单片机单片机串口通讯程序源代码
    发表于 11-16 19:15 32次下载

    基于单片机串口通讯变长协议编写代码

    本文档内容介绍了基于单片机串口通讯变长协议编写代码,包括流程图。
    发表于 09-15 15:22 8次下载
    基于<b class='flag-5'>单片机</b>的<b class='flag-5'>串口</b><b class='flag-5'>通讯</b>变长协议编写<b class='flag-5'>代码</b>

    基于AT89C51单片机与PC机串口通讯仿真及代码

    基于AT89C51单片机单片机与PC机串口通讯仿真仿真及代码
    发表于 05-05 10:30 2次下载