51单片机-红外点滴测速程序
- 格式:docx
- 大小:13.07 KB
- 文档页数:4
#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longsbit RS=P2^0; //LCD命令/数据端sbit RW=P2^1; //LCD读/写端sbit LCDE=P2^2; //LCD使能端sbit MCP_CS=P2^3; //MCP3001与AT89S52的管脚接线定义sbit MCP_DO=P2^4;sbit MCP_CLK=P2^5;uint measure;uchar flag; //Busy标志uchar code dis[]={"Measure Start"}; //显示uchar code dis1[] = {"Distance:"}; //显示表头uchar code dis2[] = {"0123456789.cm"}; //显示代码uchar code dis3[]={"Out Measure!"}; //显示uchar dis_buf[6]; //显示缓冲区void L_delay(void); //短延时void delay_ms(uint n); //延时函数uint read_MCP(void); //读MCP3001void init_1602(void); //1602初始化函数void busy(void); //LCD忙标志判断函数void dat_wrt(uchar dat); //写数据子函数void cmd_wrt(uchar cmd); //写命令子函数uint distance(void); //距离计算函数void lcd_start(uchar start); //设定显示位置函数void LCD_Clear(void); //LCD清屏函数uchar dat_adj(uint dat1); //显示数据调整函数void print(uchar *str); //字符串显示函数void disp(uint dat); //显示子函数uint average(void); //算术平均滤波程序/****************************主函数*******************************/main(){init_1602();print(dis); //显示测量开始delay_ms(1000);while(1){measure=distance();disp(measure); //显示高度delay_ms(100);}}/**************************延时函数**************************/void delay_ms(uint n){uint j;while(n--){for(j=0;j<125;j++);}}/***************************短延时****************************/void L_delay(void){uchar i;for(i=0;i<5;i++)_nop_();}/************************读MCP3001函数*************************/uint read_MCP(void){uchar i;uint temp=0;MCP_CS=1;L_delay();MCP_CS=0; //CS置低,开始采样数据for(i=0;i<13;i++) //读转换的10位数据{MCP_CLK=0;L_delay();MCP_CLK=1;temp<<=1;if(MCP_DO==1)temp|=0x01;}MCP_CS=1;temp&=0x03ff; //获取有效转换值return(temp);}/************************LCD忙标志判断函数*******************/void busy(void){flag=0x80; //赋初值高位为1 禁止while (flag&0x80) //读写操作使能位禁止时等待继续检测{P0=0xff;RS=0; //指向地址计数器RW=1; //读LCDE=1; //信号下降沿有效flag=P0; //读状态位高位为状态LCDE=0;}}/************************写数据子函数************************/void dat_wrt(uchar dat){busy(); //检测读写操作使能吗LCDE=0;RS=1; //指向数据寄存器RW=0; //写P0=dat; //写数据LCDE=1; //高电平有效LCDE=0;}/*************************写命令子函数************************/ void cmd_wrt(uchar cmd){LCDE=0;busy(); //检测读写操作使能吗P0=cmd; //命令RS=0; //指向命令计数器RW=0; //写LCDE=1; //高电平有效LCDE=0;}/***********************距离计算函数***************************/ uint distance(void){uint temp1;temp1=average();if((temp1>160)&(temp1<960)) //在正常测量范围?{temp1=13569/(temp1+7)-4; //转换测量数据}else{temp1=0x00ff; //超出测量范围,返回错误标志}return(temp1);}/************************算术平均滤波程序**********************/uint average(void){uchar i;uint av_dat;ulong ave=0;for(i=0;i<10;i++) //连续读取10个数据值{ave+=read_MCP(); //读转换数据L_delay();}av_dat=(uint)(ave/10); //求平均值return(av_dat);}/*************************1602初始化函数************************/void init_1602(void){cmd_wrt(0x01); //清屏cmd_wrt(0x0c); //开显示,不显示光标,不闪烁cmd_wrt(0x06); //完成一个字符码传送后,光标左移,显示不发生移位cmd_wrt(0x38); //16×2显示,5×7点阵,8位数据接口}/************************设定显示位置函数************************/void lcd_start(uchar start){cmd_wrt(start|0x80);}/************************LCD清屏函数****************************/void LCD_Clear(void){cmd_wrt(0x01); //写入清屏指令delay_ms(1);}/************************显示数据调整函数************************/uchar dat_adj(uint dat1){uchar i;dis_buf[0]=(uchar)(dat1/10); //十位dis_buf[1]=(uchar)(dat1%10); //个位dis_buf[2]=11;dis_buf[3]=12;if(dis_buf[0]==0)i=1;return(i);}/**************************字符串显示函数**************************/ void print(uchar *str){while(*str!='\0') //直到字符串结束{dat_wrt(*str);str++; //指向下一个字符}}/***************************显示子函数****************************/ void disp(uint dat){uchar temp,j;if(dat!=0x00ff){temp=dat_adj(dat);LCD_Clear();lcd_start(0x00);print(dis1); //显示文字lcd_start(0x45+temp); //确定显示起始位置for(j=temp;j<4;j++) //写显示数据dat_wrt(dis2[dis_buf[j]]);}else{LCD_Clear();lcd_start(0x42+temp); //确定显示起始位置print(dis3);}}。
基于单片机的液体点滴红外测速内蒙古大学本科学年论文(设计) 第 - 1 - 页2011-5-13基于单片机的液体点滴红外测速第一章绪论1.1 本论文研究的背景静脉输液是临床医学中的一个重要的治疗手段和医学监护的一项重要内容,在各个医院的医疗工作中被广泛应用,据统计住院输液率为70% ~ 80%。
它不仅是一种重要的给药途径,而且还是给患者补充体液、营养的重要方法。
在输液过程中,输液速度是一个很重要的参数, 一般要根据患者年龄、病情和药物种类等因素来分别确定。
同时,在静脉输液过程中,必须有人陪护,以防鼓包等事故发生,尤其对术后几乎需要24小时不间断输液的患者的监护,更是让护理者身心憔悴。
当护理者发生困倦时,极易发生事故。
通过调查得知,目前几乎所有医院因种种原因仍没有采用输液监控系统,而是采用传统的输液方法, 即将液体容器挂在一定高度,利用液体静压原理与大气压的作用使液体下滴,将大量灭菌药液直接滴入静脉内,从而达到治疗目的。
用软管夹对软管夹紧和放松控制滴速,医护人员按药剂特性对滴速进行控制。
由于这种滴速控制是通过肉眼观察进行估计的,需要根据经验来调节, 使得点滴流速不够准确,影响了治疗效果,以至危害病人健康。
当液体输完时,如床旁无陪护或医护人员未内蒙古大学本科学年论文(设计) 第 - 2 - 页2011-5-13 及时换药或拔针头,将会出现回血等情况。
为此患者家属需要陪同病人并且不断地观察输液情况,这样容易导致交叉感染,患者也得不到良好的休息,影响治疗质量和患者康复。
同时,护士也需要不停地巡视病房,增加工作负荷,有时还会产生医疗纠纷。
基于以上情况,针对上述现象,我们需要一种能够动态显示滴速、精确控制点滴滴速,并且能在液体走空前发出声像警报的低价、实用、智能的输液控制报警系统,对治疗过程采用自动化监控和管理是发展的必然趋势。
1.2 国内外研究现状及发展趋势陷国外对智能型输液装置的研究较早,如日本、美国和德国等国家上世纪八十年代末就进行了智能型输液装置的研制。
//51单片机做的红外遥控实验(C语言)#include<reg51.h>#define u8 unsigned char#define u16 unsigned int#define ID 0x00 //本遥控器的ID号sbit ir=P3^3;code u8 seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9的段码code u8 s[]={1,0x40,0x48,0x04,0x02,0x05,0x54,0x0A,0x1E,0x0E}; u8 buf[4];bit ir_f=0;u8 nu;void delay(u16 x){while(x--);}void show(u16 x){u8 i=0,k=0;u8 s[4];kk:s[i]=x%10;if((x/10)>=1){x=x/10;i++;goto kk;}k=i+1;for(i=0;i<k;i++){P0=seg[s[i]];P2=~(8>>i);delay(300);P0=0XFF;P2=0XFF;}}void timer0_init(){TH0=0;TL0=0;TMOD|=0x01;TR0=0;}u16 low_test(){u16 t;TR0=1;while((ir==0)&&((TH0&0X80)!=0X80));TR0=0;t=TH0;t<<=8;t|=TL0;TH0=0;TL0=0; //t=(TH*256+TL0);//机器周期数return t;}u16 high_test(){u16 t;TR0=1;while((ir==1)&&((TH0&0X80)!=0X80));TR0=0;t=TH0;t<<=8;t|=TL0;TH0=0;TL0=0;return t;}/*u16 time_test(bit x){}*/u8 receive_8bit(){u8 d,i;u16 t;for(i=0;i<8;i++){t=low_test();t=high_test();d>>=1;if((t>=2750)&&(t<=3100)){d|=0x80;}}return d;}void ir_decode(){u16 t;u8 i;if(ir==0)//有遥控信号{t=low_test();//8295-9000us,倍频的是16590-18000if((t>=14500)&&(t<=18000))//检查引导码低电平时间{t=high_test();if((t>=8000)&&(t<=9000))//检查高电平{for(i=0;i<4;i++){buf[i]=receive_8bit();}if(buf[0]==(~buf[1]))//检查系统码是否正确{if(buf[0]==ID){if(buf[2]==(~buf[3])){//具体按键处理ir_f=1; //遥控有效}}}}}}}/*void key(){if(buf[2]==0x40){P1^=(1<<0);}if(buf[2]==0x48){P1^=(1<<1);}}*/void ir_execuse(){if(ir_f==1){switch(buf[2]){case 0x40:P1^=(1<<0);break;case 0x48:P1^=(1<<1);break;case 0x04:P1^=(1<<2);break;case 0x02:P1^=(1<<3);break;case 0x05:P1^=(1<<4);break;case 0x54:P1^=(1<<5);break;case 0x0A:P1^=(1<<6);break;case 0x1E:P1^=(1<<7);break;}ir_f=0;}}void show_d(){u8 j;for(j=0;j<10;j++){if(s[j]==buf[2]){nu=j;break;}}show(nu);}void isr_init(){EA=1;EX1=1;//外部中断,一直看3.3有没有下降沿。
摘要本文在分析研究国内外关于液体点滴测速器的基础上,结合工业控制中的光电传感器和单片机原理,应用到本文中液体点滴测速器的系统设计中。
提出了系统的理论设计模型,完成系统的硬件构建和软件设计,并进行测试。
液体点滴测速器实现了点滴速度的自动调节,使点滴输液速度的控制变得更加方便和安全。
该系统由点滴速度测试系统、显示装置、单片机系统、键盘和报警等系统组成。
点滴速度测试系统选择红外光电传感器和单片机进行速度的计算,其中红外光电传感器作为近距离传感器是最理想的,单片机选择80C51,外加接口扩展电路8155。
应用水的压强随着高度差的变化而变化的原理,控制调节步进电机高度实现液体点滴速度的控制。
根据一定滴数N滴下所经过的时间t计算点滴的速度,采用矩阵式键盘,设定范围20~150(滴/分),控制误差范围在10%±1滴左右,从改变设定值起到点滴速度基本稳定整个过程的调整时间小于2分钟。
同时,在药瓶中的液体到达警戒线2~3cm以下时能发出报警信号。
以LCD液晶显示器、RS232串行通信为输出的部件。
增加时钟和温度显示功能,这样就可以在不用点滴测试时当作时钟和温度显示装置,增加了系统的多功能性。
关键词点滴速度;红外传感;步进电动机;单片机AbstractIn this thesis, the intelligence speed control system for transfusion are taken as research objects. On the basis of analysis of internal and overseas systerm, combining the method and theory of infrared transducer and MCU in the domain of the system, it constitute the intelligence speed control system for transfusion, and expound the theory design and the model of this system.The paper established the overall research plan for the system. The system could detect the drops and the location of liquid through the transfer line with optic-electric detects technique. Control the high of bottle with an electromotor, realization transfusion speed automatic adjust, made transfusion become more conveniency and safety.The apparatus consists of liquid drop speed testing system, liquid drop speed controlling system, LED display system, MCU system, the key board and alarming system.It uses the infrared transducer, which is the best choice for checking and controlling liquid dropping speed. The MCU is C81, combing with 8155 interface extented. A nd it uses the principle of the water’s press transforms when the height of the water transforms, and then to control the working status of the stepping engine. The liquid dropping speed can be set by the matrix keyboard. The speed is accounted by the drops per minute. When the height of water level is decreased to the alarming value (2-3cm) , it gives the alarm signal at the same time.The output components inculde LCD and RS232.Meanwhile, the system carries on temperature and time display. By this way, the versatility of this systerm is raised. This method is proved by experiments.Keywords: Liquid dropping speed, infrared transducer, stepping engine, MCU目录液体点滴测速装置 (V)第1章绪论........................................................................................................ V I 液体点滴测速器的发展 (VI)1.1.1 课题背景 (VI)1.1.2 研究的目的及意义 (VII)国内外研究现状及发展 (VII)1.2.1 测控系统的现状 (VII)1.2.2 工控机在测控系统中的应用 (VII)本文的主要工作 (IX)第2章系统设计原理 (X)设计思路 (X)系统框图及工作原理分析 (X)点滴速度的测量 (XII)2.3.1 点滴速度 (XII)2.3.2 数据采集方案的选择 (XII)液面高度的检测 (XV)控制调节滴速 (XV)电源、显示模块 ..................................................................................................... X VI 异常报警 (XVII)2.7.1 液位过低报警 (XVII)2.7.2 电机进、退夹锁死报警 (XVIII)2.7.3 键盘操作不规范报警 (XVIII)第3章系统的硬件组成 (XIX)单片机..................................................................................................................... X IX 步进电机................................................................................................................. X XI 传感器. (XXII)键盘和显示器 (XXII)通讯 (XXIII)第4章系统软件编程................................................................................. X XIV 简述. (XXIV)4.1.1 上位机软件 (XXV)4.1.2 下位机软件 (XXVI)电机控制算法的选择 (XXVI)信号处理程序 (XXVIII)附加功能 (XXIX)第5章系统测试 (XXX)软硬件调试 (XXX)5.1.1 硬件调试 (XXX)5.1.2 软件调试 (XXX)5.1.3软硬件联合调试 (XXX)功能测试及结果分析 (XXX)结论................................................................................................................. X XXII致谢 (XXXIII)参考文献 (XXXIV)液体点滴测速装置液体点滴测速装置 (V)第1章绪论........................................................................................................ V I 液体点滴测速器的发展 (VI)1.1.1 课题背景 (VI)1.1.2 研究的目的及意义 (VII)国内外研究现状及发展 (VII)1.2.1 测控系统的现状 (VII)1.2.2 工控机在测控系统中的应用 (VII)本文的主要工作 (IX)第2章系统设计原理 (X)设计思路 (X)系统框图及工作原理分析 (X)点滴速度的测量 (XII)2.3.1 点滴速度 (XII)2.3.2 数据采集方案的选择 (XII)液面高度的检测 (XV)控制调节滴速 (XV)电源、显示模块 ..................................................................................................... X VI 异常报警 (XVII)2.7.1 液位过低报警 (XVII)2.7.2 电机进、退夹锁死报警 (XVIII)2.7.3 键盘操作不规范报警 (XVIII)第3章系统的硬件组成 (XIX)单片机..................................................................................................................... X IX 步进电机................................................................................................................. X XI传感器 (XXII)键盘和显示器 (XXII)通讯 (XXIII)第4章系统软件编程................................................................................. X XIV 简述. (XXIV)4.1.1 上位机软件 (XXV)4.1.2 下位机软件 (XXVI)电机控制算法的选择 (XXVI)信号处理程序 (XXVIII)附加功能 (XXIX)第5章系统测试 (XXX)软硬件调试 (XXX)5.1.1 硬件调试 (XXX)5.1.2 软件调试 (XXX)5.1.3软硬件联合调试 (XXX)功能测试及结果分析 (XXX)结论................................................................................................................. X XXII致谢 (XXXIII)参考文献 (XXXIV)第1章绪论液体点滴测速器的发展1.1.1 课题背景点滴输液是医疗常用手段。
// c51红外解码、超声波测距程序#include <reg52.h>#define uchar unsigned char#define uint unsigned int#define count 4uchar data IRcode[4]; //定义一个4字节的数组用来存储代码uchar table[4];uchar enled[4]={0x1f,0x2f,0x4f,0x8f};uchar CodeTemp,temp,tt; //编码字节缓存变量uchari,j,k,temp,timeH,timeL,succeed_flag,flag,h,h1,h2,a,key,key1,key2; //延时用的循环变量uint distance,distance1,time; //距离,timesbit IRsignal=P3^2; //HS0038接收头OUT端直接连P3.2(INT0)sbit come=P3^3;sbit d=P1^1;//发送码sbit BZ=P1^0;sbit s=P3^7;//38ksbit ss=P3^6;//38kuchar m;// 开关控制//sbit n=P2;//电机反转code unsigned charseg7code[10]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28}; //显示段码/**************************** 定时器0中断************************/void timer0() interrupt 1{TH0=(65536-count)/256;TL0=(65536-count)%256;s=~s;//产生38K信号ss=~ss;//tt++;//发送超声波个数}/**************************** 延时0.9ms子程序************************/void Delay0_9ms(void){uchar j,k;for(j=18;j>0;j--)for(k=20;k>0;k--);}/***************************延时1ms子程序**********************/void Delay1ms(void){uchar i,j;for(i=2;i>0;i--)for(j=230;j>0;j--);}/***************************延时4.5ms子程序**********************/ void Delay4_5ms(void){uchar i,j;for(i=10;i>0;i--)for(j=225;j>0;j--);}/**************************** 解码延时子程序************************/ void Delay(void){uchar i,j,k;for(i=100;i>0;i--)for(j=100;j>0;j--)for(k=3;k>0;k--);}/**************************** 显示延时子程序************************/ void ledDelay(unsigned int tc) //延时程序{unsigned int i,j;for(i=0;i<10;i++)for(j=0;j<tc;j++);}/************************************************ ****************///定时器1中断,用做超声波测距无回波void timer1() interrupt 3{TR1=0;ET1=0;EX1=0;TH1=0;TL1=0;}/***********************显示程序*********************/ void Led(int date) //显示函数{ int i;table[0]=date/1000;table[1]=date/100%10;table[2]=date/10%10;table[3]=date%10;date=0;for(i=0;i<120;i++){P2=enled[i%4]&m;//P2口高四位控制数码管,低位陪分控制继电器P0=seg7code[table[i%4]]; //取出千位数,查表,输出。
//实例 100:电机转速表设计#include<reg51.h> // 包含单片机寄存器的头文件#include<intrins.h> //包含 _nop_() 函数定义的头文件sbit RS=P2A0; sbit RW=P2A1; sbit E=P2A2; II寄存器选择位,将 RS位定义为P2.0引脚〃读写选择位,将 RW位定义为P2.1引脚II使能信号位,将E位定义为P2.2引脚sbit BF=P0A7; II忙碌标志位,,将BF位定义为P0.7引脚unsigned char code digit[ ]={"0123456789"}; // 定义字符数组显示数字 un sig ned in t v;II储存电机转速unsigned char count; 〃储存定时器TO中断次数bit flag; //计满1秒钟标志位***************************************************函数功能:延时 1ms (3j+2)*i=(3 X 33+2) X 10=1010(微秒),可以认为是 1 毫秒***************************************************/ void delay1ms(){unsigned char i,j; for(i=0;i<10;i++) for(j=0;j<33;j++)}I*****************************************************函数功能:延时若干毫秒入口参数: n***************************************************Ivoid delay(unsigned char n){unsigned char i;for(i=0;i<n;i++)delay1ms();}I*****************************************************函数功能:判断液晶模块的忙碌状态返回值:result。
51单片机-红外点滴测速程序#include#define uint unsigned int#define uchar unsigned charsbit beep = P1^0;sbit dula = P3^6;sbit wela = P3^7;uchar qian,bai,shi,ge;uint speed = 0,speed_tmp = 0;uint num0,num1;uchar time_out = 0;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7};void init();void delayms(uint);void display(uchar qian,uchar bai,uchar shi,uchar ge); void main(){init();while(1){display(qian,bai,shi,ge);if(time_out == 1){speed_tmp = speed * 12; //每分钟的点滴数目等于每5秒的数目乘以12speed = 0;qian = 0;bai = speed_tmp/100;shi = (speed_tmp%100)/10;ge = speed_tmp%10;// speed = 0; //点滴数目清?time_out = 0;}}}void init(){TMOD = 0x11; //设置定时器0和1为工作方式1(0001 0001)TH0 = (65536-45872)/256; //装初值TL0 = (65536-45872)%256;TH1 = (65536-45872)/256;TL1 = (65536-45872)%256;EA = 1; //开总中断ET0 = 1; //开定时器0中断ET1 = 1; //开定时器1中断EX0 = 1; //开外部中断0EX1 = 1; //开外部中断1TR0 = 1; //启动定时器0TR1 = 1; //启动定时器1IT0 = 1; //外部中断0低电平触发IT1 = 0; //外部中断1低电平触发beep = 1; //关闭蜂鸣器}/******************************外部中断0 P3^2 **********************************************/void Int0() interrupt 0 //点滴检测部分,能触发中断,说明有点滴滴下{EX0 = 0; //开外部中断0num1 = 0; //计数器1清零speed ++; //点滴数目加1EX0 = 1; //开外部中断0delayms(1);}/******************************外部中断 1 P3^3 **********************************************/void Int1() interrupt 2 //液面检测部分{EX1 = 0; //开外部中断0beep = 0; //如果触发外部中断,即检测脚为低电平,低于检测液面,蜂鸣器报警EX1 = 1; //开外部中断0}/******************************定时器中断0**********************************************/void T0_time() interrupt 1{TH0 = (65536-45872)/256; //装初值TL0 = (65536-45872)%256;num0 ++;if(num0 == 40) //每隔2s测一次点滴数{num0 = 0; //计数器0清零time_out = 1;}}/******************************定时器中断1**********************************************/void T1_time() interrupt 3{TH1 = (65536-45872)/256; //装初值TL1 = (65536-45872)%256;num1 ++;if(num1 == 60) //若3s时间到,还未检测到点滴滴下{beep = 0; //蜂鸣器报警}}void delayms(uint xms){uint i,j;for(i = xms;i > 0;i--)for(j = 110;j > 0;j--);}/******************************数码管显示函数**********************************************/void display(uchar qian,uchar bai,uchar shi,uchar ge){dula = 1;P0 = table[qian];dula = 0;wela = 1;P2 = tablewe[3];wela = 0;delayms(5); dula = 1;P0 = table[bai]; dula = 0;wela = 1;P2 = tablewe[2]; wela = 0; delayms(5); dula = 1;P0 = table[shi]; dula = 0;wela = 1;P2 = tablewe[1]; wela = 0; delayms(5); dula = 1;P0 = table[ge]; dula = 0;wela = 1;P2 = tablewe[0]; wela = 0; delayms(5);}。
基于单片机的液体点滴速度监测与控制设计作者:李刚来源:《科技风》2016年第05期摘要:利用单片机设计并制作一个智能化的医用液体点滴速度监测与控制装置。
该装置由水滴速度测试系统、水速控制系统、数妈显示装置、单片机控制系统等系统组成。
其基本原理是利用水的压强随着高度差的变化而变化,使用控制步进电动机的升降来控制点滴速度。
点滴速度可用键盘来设定,设定范围为20~150(滴/分),控制误差范围在10%±1滴左右。
从改变设定值起到设定点滴速度,基本稳定整个过程的调整时间小于3分钟。
关键词:点滴速度;红外传感;步进电动机;51单片机1.引言1.1课题随着科学技术的发展,越来越多的领域需要对液体的流量进行精确控制,如化工方面对微量化学元素的检测和分析常需精确控制流量,医疗领域中药液的输液量与点滴速度也需要精确的控制以达到更好治疗效果。
液体点滴速度监控器在医院中主要就是应用于静脉输液。
随着医院管理系统进一步升级,如何利用计算机与现代控制技术提高医疗器械的自动化成为目前主要应用方向之一。
1.2课题目的和意义目前大小医院中所使用的静脉输液器都是悬挂在病人的头上才能输液,液体点滴速度难以实现精确控制,这对特护病人和对输液速度有较严格要求的病人是不方便的。
此设计中的液体点滴速度监控器可以用键盘准确控制速度,精确控制药液的输液量和输液速度,能对输液过程中出现的异常情况进行监测报警,预防输液医疗事故的发生,有助于减轻医护人员的工作强度,提高安全性、精确性和工作效率。
且设备结构简单,价格低,所以对液体点滴速度监控器的研究设计十分有意义。
1.3主要设计内容设计并制作了一个液体点滴速度监测与控制装置,设计内容及实现功能有:(1)采用51系列单片机作为控制核心电路;(2)可以在静脉输液器的滴斗处检测点滴速度,并制作了一个数码显示装置,实现动态显示点滴速度(滴/分);(3)通过改变静脉输液器的储液瓶的高度实现控制点滴速度,也可以通过控制软管夹头的松紧等其它方式来控制点滴速度。
基于单片机的红外点滴测速系统方案设计摘要:21世纪以来,电子信息技术的飞速发展为人类日常生活的诸多方面都带来了翻天覆地的变化。
结合微型控制技术的医院医疗设备更是走上了更加智能化的道路。
传统采用人工控制方式去操作医疗器械不仅占用较多人力资源,而且可靠性低,逐步被淘汰。
依靠医护人员凭借对患者病情的了解设定点滴速度的输液方式已经变得不方便、不可靠,因此有必要研究设计廉价实用的医疗输液点滴速度检测装置以满足更多的医疗需求。
本文设计的红外点滴检测系统以AT89S52单片机为控制核心,键盘和红外对射管构成输入设备,液晶显示器、发光二极管以及蜂鸣器构成输出设备。
由传感器检测点滴信息变化并通过LCD1602进行显示;采用独立式按键设置点滴速度安全范围;当点滴速度不满足设定范围时,由发光二极管和蜂鸣器实现声光报警。
软硬件调试结束以后,整个系统运行正常,基本实现既定功能。
关键词:单片机;红外对射传感器;点滴速度;LCD1206引言一、系统研究背景及意义在现代临床医学中,为病人进行静脉输液是医院进行医疗救治的一项重要手段,是输送人体所必需营养物质如葡萄糖等体液的主要方法。
众所周知,根据病患疾病严重程度以及身体实际情况以安排合理的输液点滴速度对于稳定病人康复起着十分重要的作用。
很多时候,因病昏迷患者或者术后未苏醒患者,他们很容易因肢体机械反应引起扎针处发生鼓针,或者有其他外力因素导致输液快慢难以控制。
鉴于上述情况,为防止此类医疗事故发生,医院通常会安排护士在病人输液期间进行全面监护。
但是护理人员长时间工作状态下难免发生疲惫松懈,很难第一时间发现病人输液异样,况且就液体点滴速度来说,通过人眼观察计算的方法可靠性较低。
针对上述现实情况,研究并设计一种精确检测液体点滴速度的输液控制系统具有很强的实用价值和经济意义。
现今医疗器械逐步走上更加人性化、智能化的道路,势必为人们的生活带来翻天覆地的变化。
1.国内外研究现状对于智能输液装置的研究最早可追溯到上世纪八十年代,随着患者对于输液需要的增加,传统输液器材可控性低这一缺陷逐渐暴露出来,美国、德国等欧美发达国家在输液器材改造上进行卓有成效的研究,并在上世纪末率先研制出实用的智能医疗输液系统。
目录1 引言 (1)2系统基本总体设计 (1)2.1设计要求 (1)2.1.1 基本要求 (1)2.1.2 发挥部分 (2)2.1.3 说明 (2)2.2.系统各个模块的选择与论证 (3)3 系统的硬件设计 (4)3.1系统硬件的基本组成部分 (4)3.2主要单元电路设计 (5)3.2.1 点滴速度测量电路设计 (5)3.2.2 点滴速度控制电路设计 (6)3.2.3 键盘显示电路 (7)4 系统的软件设计 (8)4.1系统的主程序设计 (8)4.2检测点滴速度子程序 (8)4.3点滴速度控制子程序 (8)4.4键盘显示子程序 (9)4.5程序设计 (10)5 结束语 (13)参考文献 (14)基于51单片机的液体点滴速度监控装置摘要:随着电子技术的发展,医疗设备也在发生着一些变化,而传统的人工式监护方式显然已经越来越不能满足当今的监护需要了。
目前,我国医疗机构在进行输液治疗时,输液速度的控制还是采用人工方。
常规临床输液,普遍采用挂瓶式输液,并用眼睛直接观察,依靠手动夹子来控制输液速度,这样的操作方式不能精确控制输液的速度,而且工作也量大。
因此,就需要既廉价又实用的医疗输液检测监控装置来满足现今的医疗需求。
利用单片机设计并制作一个智能化的液体点滴速度监测与控制装置。
该装置由水滴速度测试系统、水速控制系统、显示装置、单片机装置、键盘和报警系统等系统组成。
应用水的压强随着高度差的变化而变化的原理,利用控制步进电动机的升降来控制点滴速度。
点滴速度可用键盘来设定,设定范围为20~150(滴/分),控制误差范围在10%±1滴左右。
从改变设定值起到点滴速度基本稳定整个过程的调整时间小于3分钟。
关键词:点滴速度;红外线传感;步进电动机;51单片机1 引言单片机的发展前景颇为广阔,在各个领域中都用到了单片机控制,如;工业控制,交通控制,信息方面等,随着科学技术的进步,我们在各方面都采用了自动控制取代人工控制,医疗事业的发展是顺应科学技术而发展的,医疗的安全和医疗水平的提高都离不开科学技术,把高科技应用到医疗事业上是对医疗事业的一大促进与补充。
基于51单片机红外发射程序#include "reg52.h"sbit ir=P2^0;//红外发射管控制脚,使用24M晶振sbit led = P2^1;sbit ka=P1^0;sbit kb=P1^1;sbit kc=P1^2;sbit kd=P1^3;unsigned int count, set_count; //中断计数,设定中断次数bit irflag,keyflag; //红外发送标志位,按键标志位unsigned char irsys[]={0x00,0xff};//16位用户码unsigned char irdata,ircode; //发送的红外数据//---------------------------------------------------------------------------void delay(unsigned int a)//延时约1ms,晶振24M ,此处延时不需很精确{unsigned char i;while(--a!=0)for(i=300;i>0;i--); //若是12M晶振i=125}//---------------------------------------------------------------------------void keyscan() // 按键扫描{if(ka==0){ delay(5);while(!ka);keyflag=1;irdata=0x0a;} //a键按下,则发射数据0x0aif(kb==0){ delay(5);while(!kb);keyflag=1;irdata=0x0b;} //a键按下,则发射数据0x0aif(kc==0){ delay(5);while(!kc);keyflag=1;irdata=0x0c;} //a键按下,则发射数据0x0aif(kd==0){ delay(5);while(!kd);keyflag=1;irdata=0x0d;} //a键按下,则发射数据0x0a}//---------------------------------------------------------------------------void ir_sendbyte() //红外发送一个字节数据{unsigned char i;for(i=0;i<8;i++) //发送8位数据{set_count=43;//35; //发送编码中的0.56ms高电平(//后为12M 晶振下的数值)irflag=1; //启动红外发射二极管发射count=0; //中断计数先清0TR0=1; //开启定时器0while(count<="">TR0=0; //关闭定时器0if(ircode&0x01) set_count=130;//130; //判断红外编码最低位,若为1则1.69ms的低电平(//后为12M晶振下的数值)else set_count=43;//35; //为0则0.565ms的低电平(//后为12M 晶振下的数值) irflag=0; //低电平则不发射count=0; //中断计数清0TR0=1; //开启定时器0while(count<="">TR0=0; //关闭定时器0ircode=ircode>>1; //将数据右移,即从低位到高位发送}}//---------------------------------------------------------------------------void ir_send() //发送红外数据{set_count=692;//672; //发送编码中的引导码(9ms高电平+4.5ms低电平) (//后为12M晶振下的数值) tc9012irflag=1; //启动红外发射二极管发射count=0; //中断计数清0TR0=1;while(count<set_count);< p="">TR0=0;set_count=346;//336; //发送编码中的4.5ms低电平(//后为12M晶振下的数值)irflag=0; //低电平则不发射count=0;TR0=1;while(count<="">TR0=0;ircode=irsys[0]; //发送16位用户码的前1-8位ir_sendbyte();ircode=irsys[1]; //发送16位用户码的前9-16位ir_sendbyte();ircode=irdata; //发送8位数据码ir_sendbyte();ircode=~irdata; //发送8位数据反码ir_sendbyte();set_count=43;//35; //发送编码中的0.56ms高电平(//后为12M 晶振下的数值)irflag=1;count=0;TR0=1;while(count<set_count);< p="">TR0=0;ir=1;delay(23); //延时23ms(编码中的23ms低电平)set_count=692;//670; //发送编码中的引导码(9ms高电平+4.5ms低电平) (//后为12M晶振下的数值)irflag=1;count=0;TR0=1;while(count<set_count);< p="">TR0=0;set_count=346;//336; //发送编码中的4.5ms低电平(//后为12M晶振下的数值)irflag=0;count=0;TR0=1;while(count<set_count);< p="">TR0=0;set_count=43;//35; //发送编码中的0.56ms高电平(//后为12M 晶振下的数值) irflag=1;count=0;TR0=1;while(count<set_count);< p="">TR0=0;ir=1; //发射完了关闭红外发射二极管}//---------------------------------------------------------------------------void timer0_init() //定时器初始化{EA=1;TMOD=0x02; //定时0 8位自动重装模式ET0=1;TH0=0xe6;//0xf3; //定时13us,38K红外矩形波,晶振24M (//后为12M晶振下的数值) TL0=0xe6;}//---------------------------------------------------------------------------void main(){timer0_init(); //定时0初始化count=0; //中断计数先清0irflag=0; //红外发射标志先置0while(1){keyscan(); //键值扫描if(keyflag) //若有按键按下{led = 0;delay(10);ir_send(); //发送红外编码delay(500);keyflag=0; //按键标志清零delay(100);}else{led = 1;}}}//---------------------------------------------------------------------------void timer0() interrupt 1 //定时器0中断{count++;if(irflag==1) ir=~ir; //有发射标志,则发射38khz的矩形波else ir=1; //否则不发射,即相当于发射编码中的低电平}</set_count);<></set_count);<></set_count);<></set_count);<></set_count);<>。
51单片机红外发射程序一定要用灌电流驱动,拉电流驱动最远遥控距离2米,改用灌电流之后,可以遥控6米,PK遥控板,通过中间串联一个3v电池之后,遥控距离达30米以上(亲测)。
#include ;#define uchar unsigned char#define uint unsigned intsbit IR_OUT=P1^0 ;void delay_ms(uint ms){uint i,j;for(i=0;i<120;i++){for(j=0;j<ms;j++);}}//T1 13us产生一次中断用于产生38K载波//T0 方式1 16位用于定时void Init_Timer(void){TMOD=0x21; //T0 mode 1T1 mode 2TH1=256-(1000*11.0592/38.0/12)/2+0.5;//特殊TL1=TH1;ET1=1;EA=1;}//发送引导码发送方:4.5ms高电平 4.5ms低电平void Send_Start_Bit(void)//TR1的值=发送的电平{//4.5ms 1TH0=(65536-8295)/256;TL0=(65536-8295)%256;TR0=1;TR1=1;while(!TF0);TR1=0;TF0=0;TR0=0;IR_OUT=1;//4.5ms 0TH0=(65536-4146)/256; TL0=(65536-4146)%256; TR0=1;TR1=0;while(!TF0);TR1=0;TF0=0;TR0=0;IR_OUT=1;}//发送0void Send_Bit_0(void) {//0.565ms 1TH0=(65536-521)/256; TL0=(65536-521)%256; TR0=1;TR1=1;while(!TF0);TR1=0;TF0=0;IR_OUT=1;//0.565ms 0TH0=(65536-521)/256; TL0=(65536-521)%256; TR0=1;TR1=0;while(!TF0);TR1=0;TF0=0;TR0=0;IR_OUT=1;}//发送1void Send_Bit_1(void) {//0.565ms 1TH0=(65536-521)/256; TL0=(65536-521)%256; TR0=1;TR1=1;while(!TF0);TF0=0;TR0=0;IR_OUT=1;//1.685ms 0TH0=(65536-1563)/256;TL0=(65536-1563)%256;TR0=1;TR1=0;while(!TF0);TR1=0;TF0=0;TR0=0;IR_OUT=1;}void Send_over(void)//发送一个结束码,因为最后一个位只有遇到下降沿才能读取(发射端的上升沿){//0.500ms 1//小于0.5ms 接收端很难识别到TH0=(65536-500)/256; TL0=(65536-500)%256; TR0=1;TR1=1;while(!TF0);TR1=0;TF0=0;TR0=0;IR_OUT=1;//0.500ms 0TH0=(65536-500)/256; TL0=(65536-500)%256; TR0=1;TR1=0;while(!TF0);TR1=0;TF0=0;TR0=0;IR_OUT=1;}//发送一字节 8位void Send_Char(){unsigned char i,j1,j2,j3,j4; j1=0xBE;j2=0x41;j3=0xDE;j4=0x20;Send_Start_Bit();Send_Bit_0();//发射引导吗for(i=0;i<8;i++){if(j1&0x80)Send_Bit_0();elseSend_Bit_1();j1=j1<<1;//先发射低位}for(i=0;i<8;i++){if(j2&0x80)Send_Bit_0();elseSend_Bit_1(); j2=j2<<1;//先发射低位}for(i=0;i<8;i++) {if(j3&0x80)Send_Bit_0(); elseSend_Bit_1(); j3=j3<<1;//先发射低位}for(i=0;i<8;i++) {if(j4&0x80)Send_Bit_0(); elseSend_Bit_1(); j4=j4<<1;//先发射低位}Send_over();//结束符}void T1_ISR(void) interrupt 3 {IR_OUT=!IR_OUT;}void main(void){Init_Timer();while(1){Send_Char();delay_ms(1000);}}。
(完整word版)红外测速代码红外测速代码附录2 源程序#include〈reg52.h〉#include<stdio.h>#define uchar unsigned char#define uint unsigned intsbit lcden=P2^6;//定义1602使能端sbit lcdrs=P2^4;sbit lcdrw=P2^5;sbit a=P1^0;//对射传感器的信号输出端sbit add=P3^4;//按键加一变量sbit jian=P3^5;//按键减一变量sbit bj=P2^3;//蜂鸣器端口char zhuan[16];//设置临时数组uint num2;//每秒的转速uint number=7;//设定转速的初值,在其基础上按键加一或按键减一uint num=0;//转数变量void Init_Timer0(void);void delay(uint z)//延迟函数{uint x,y;for(x=z;x〉0;x-—)for(y=110;y>0;y-—);}void write_com(uchar com)//1602写命令{lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_date(uchar date)//1602写数据{lcdrs=1;lcden=1;P0=date;delay(5);lcden=0;}void LCD_Write_String(uchar x,uchar y,uchar *s) //向1602写字符串{(完整word版)红外测速代码 if (y == 0){write_com(0x80 + x); //表示第一行}else{write_com(0xC0 + x); //表示第二行}while (*s){write_date( *s);s++;}}void LCD_Write_Char(uchar x,uchar y,uchar Data) //向1602写字符{if (y == 0){write_com(0x80 + x);}else{write_com(0xC0 + x);}write_date( Data);}void init() //初始化{bj=0;//蜂鸣器初始化write_com(0x01);//1602初始化lcdrw=0;lcden=0;write_com(0x38);write_com(0x0e);write_com(0x06);LCD_Write_Char(13,0,’n’);LCD_Write_Char(14,0,'/');LCD_Write_Char(15,0,'s');LCD_Write_Char(13,1,'n’);LCD_Write_Char(14,1,'/’);LCD_Write_Char(15,1,'s');}void main(){init();while(1){if(a==1)//对射传感器检测障碍物{num++;//计转数while(a);}sprintf(zhuan,”zhuansu%2d”,num);LCD_Write_String(0,0,zhuan);Init_Timer0();//定时1ssprintf(zhuan,”zhuansu %2d”,num2);//输出一秒的转速LCD_Write_String(0,0,zhuan);if(num2>=number)//转速超过设定值报警bj=1;if(num2〈number)//转速不超过设定值报警bj=0;if(!add){ //按下相应的按键,1602LCD液晶显示屏显示相应的码值delay(5);if(!add){number=number+1;sprintf(zhuan,”yushe %7d”,number);//打印温度值LCD_Write_String(0,1,zhuan);//显示第二行while(!add);}}if(!jian){ //按下相应的按键,1602LCD液晶显示屏显示相应的码值delay(5);if(!jian){number—-;sprintf(zhuan,"yushe %7d",number);//打印温度值LCD_Write_String(0,1,zhuan);//显示第二行while(!jian);}}}}void Init_Timer0(void){TMOD |= 0x01; //使用模式1,16位定时器,使用”|”符号可以在使用多个定时器时不受影响//TH0=0x00; //给定初值//TL0=0x00;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开}/*—---—--—-—----------—-----——--—-—--——--—-———--—-定时器中断子程序-—-—----————---—-------———-—----—---—----—-—————*/ void Timer0_isr(void) interrupt 1{static unsigned int num1;TH0=(65536—2000)/256; //重新赋值 2msTL0=(65536—2000)%256;num1++;if(num1==500) //计时1s{num1=0;num2=num;num=0; //读标志位置1}}。
基于51单片机的点滴输液报警器的设计与实现毕业论文目录引言 (1)1 项目概述 (2)1.1 选题背景 (2)1.2目的及意义 (2)1.3 国内外研究现状与发展趋势 (3)2 相关技术 (4)2.1 红外对管技术 (4)2.2 单片机技术 (5)2.3 晶体显示技术 (8)3 总体设计 (11)3.1设计方案 (11)3.2系统硬件总体设计 (12)3.2.1 系统硬件结构 (12)3.2.2 系统硬件方案设计 (12)3.3 系统软件总体设计 (13)3.3.1 下位机软件设计 (13)4 系统硬件设计 (16)4.1 系统硬件设计原则 (16)4.2 核心部件选型 (16)4.2.1 中央处理器 (16)4.2.2 检测液体部件 (17)4.3硬件电路设计 (18)4.3.1 LCD1602显示电路 (18)4.3.2系统控制电路 (20)4.3.3红外对管控制电路 (21)4.3.4蜂鸣器电路及按键电路 (22)5 软件设计 (24)5.1 软件设计原则 (24)5.2 主程序设计 (25)5.3 系统启动程序设计 (25)5.4 晶体显示程序设计 (26)6 系统测试与运行 (29)6.1 测试方案 (29)6.2 测试结果与分析 (30)7 结论 (31)致谢 (32)参考文献 (33)附录A 中文译文 (34)附录B 英文原文 (43)附录C 系统连接原理图 (54)附录D 源程序代码 (55)辽宁工程技术大学毕业设计(论文)引言点滴输液是现在临床治疗和抢救非常重要的手段,医院使用的点滴输液装置是将液体容器挂在一定高度上,利用势差把液体输入到病人的体内,通过软管夹对胶管口径压紧和放松来控制滴速.这对输液有严格要求的病人和护士的监护管理来说都很不方便,在输液过程中药物接近完成或由于某种原因药物的速度过快、过慢都要医护人员及时护理否则将出现医疗事故。
目前没有高效的控制系统,点滴输液时需要医护人员在旁照顾,这加重了医护人员的工作量和病人的思想负担而且也不利于医院的统一管理。