液体点滴速度监控装置设计的程序

合集下载

液体点滴速度监控系统的设计说明

液体点滴速度监控系统的设计说明

液体滴落检测与计数摘要输液是医院常用的治疗手段,传统输液过程中存在着输液速度不精确、需要人工监护等弊端。

本文的目标就是设计一种输液监控系统以解决此问题。

本文设计的液体点滴速度监控装置系统,实现了对输液速度的检测与控制,实现了对储液瓶中液面高度的检测报警,并且动态显示输液速度。

使用者可以通过按键设置输液速度,系统将自动对输液速度进行控制。

当输液结束或输液速度发生异常时,使用发光二极管和蜂鸣器进行报警,继而实现对输液瓶的控制。

系统以80C52单片机为核心,实现对输液瓶控制与液体点滴速度的显示和液体点滴速度的键盘控制;通过外围电路检测储液瓶中液面高度和液体点滴速度;通过实现对步进电机控制以实现对储液瓶高低的控制,来实现控制液体点滴速度。

在整体方案设计中,在保证设计系统能达到的题目要求的精度和稳定度的前提下,考虑到系统的轻便性、实用性、可靠性,经济性,对电路系统进行了优化。

关键词:点滴速度;光电传感器;步进电机;单片机目录任务与要求 (5)一、绪论 (5)1.1课题背景 (5)1.2课题研究的目的和意义 (6)1.3课题的思路与主要框图结构 (6)二、方案比较与论证 (7)2.1控制方案的比较 (7)2.2点滴检测方案比较 (7)2.3液位监测方案比较 (7)2.4速度控制方案 (8)2.5电机的选择 (8)三、系统的硬件设计 (9)3.1系统的硬件设计 (9)3.2.1中央处理单元 (9)3.2.2点滴信号检测单元 (10)3.2.3点滴信号的比较、滤波、整形电路 (11)3.2.4液位检测单元 (11)3.2.5检测电路的抗干扰措施 (12)3.2.6声光报警电路 (13)3.2.7步进电机驱动单元(高度调整单元) (14)3.2.8键盘单元 (14)3.2.9数码管显示单元 (16)3.3芯片时钟电路 (17)3.5复位单元 (17)3.6供电单元 (18)四、液体点滴监控系统的软件设计 (19)4.1各模块软件设计 (19)4.1.1主控模块设计 (19)4.1.2点滴速度测量模块设计 (19)4.1.3电机控制算法 (21)4.1.3.1电机控制原理 (21)4.1.3.2点滴速度控制 (21)4.1.5报警模块设计 (23)4.2.2输入键盘模块的设计 (24)4.4.3数码管显示模块的设计 (24)参考文献 (27)附录 (28)液体滴落检测与计数难度系数:1.0一、任务医用吊瓶注射如图所示,需要检测液体滴落速度和数量。

基于单片机系统的液体点滴速度监控装置设计

基于单片机系统的液体点滴速度监控装置设计

南华大学电气工程学院《单片机原理及应用课程设计》任务书设计题目:基于单片机系统的液滴点滴速度监控装置专业:电气工程及其自动化姓名: 刘杰学号: 20104450244起迄日期:年月日——年月日指导教师:目录一、引言 (4)二、系统总体设计 (4)2.1系统原理框图及原理分析 (4)2.2方案设计与论证 (5)2.2.1电机驱动控制电路 (5)2.2.2 数据采集 (6)2.2.3键盘方案的选择 (7)2.2.4系统最终方案确定 (8)三、单片机系统设计 (8)3.1 硬件设计 (8)3.1.1单片机系统的硬件结构 (8)3.1.2 液体滴速检测模块 (10)3.2 软件设计 (11)四、总结 (13)参考文献 (14)英文摘要 (16)基于单片机系统的液体点滴速度监控装置设计【摘要】:利用单片机设计一个智能化的液体点滴速度监测与控制系统。

该系统由水滴速度测试系统、水速控制系统、显示装置、单片机系统、键盘和报警等系统组成。

应用水的压强随着高度差的变化而变化的原理,利用控制步进电动机的升降来控制点滴速度。

点滴速度可用键盘来设定,同时在水到达警戒线 (2cm~3cm)以下时能发出报警信号。

【关键词】:点滴速度,步进电动机,单片机1 引言目前各类医院中所使用的静脉输液器都是悬挂在病人的身体水平线以上才能输液,这种传统的输液设施的输液速度难以准确控制,这对特护病人和对输液速度有较严格要求的病人是不方便的,也会加重医护人员的工作强度。

本系统就是为了减少人力浪费,获得良好医疗效果而设计的液体点滴速度监控装置,利用这种装置可以通过电机控制储液瓶的高度来达到控速的目的;通过传感系统来确定点滴速度和对液位警戒线的检测;通过键盘设置液体点滴速度。

2 系统总体设计2.1系统原理框图及原理分析利用步进机和压强的原理来控制水滴的速度,有公式可以知道由于液面高度的不同而使压强不同,从而改变液滴的速度。

这样的系统比控制输液软管的松紧更好控制,而且比较容易实现。

液体点滴速度监控装置的设计

液体点滴速度监控装置的设计

液体点滴速度监控装置[摘要 ] 该装置实时地监测液体点滴速度,通过单片机对信息地分析和处理,由主机发出相应地指令, 调整系统地工作平稳,构成了一个高性能地闭环控制系统 .实现了对点滴输液速度地直观监测,同时对一些异常情况地出现可实施报警 .利用该装置还能通过主控平台对各个分立系统信息实施自动化、智能 化地集中处理 .能方便、简易地操作和使用,对医疗具有很强地实用性.[ 关键词 ] 实时监控 红外传感 闭环控制 步进电机一、方案设计与论证根据题目要求和原输液装置地特点,提出以下三种方案:1、方案一 直接在滴斗处用两电极棒地方法 .与受液瓶地高度,达到改变点滴速度,从而进行控制2、方案二把通过电机改变系统装置高度地方法, 改为控制步进电机对输液管进行压缩或缓松, 从而实现对点 滴速度地改变 .采用交流电动机控制 H2 地高度 .即采用红外传感器测量滴斗滴液, 送至单片机接口计数, 通过数字模拟转换,将其转换为 4— 20MA 标准电流值,同时通过键盘输入给定每分钟地滴数,再将此 滴数将其转换为 4—20MA 标准电流值,将此两个信息同时进入数字 PID 调节器 .通过偏差计算再输出一 组4— 20MA 标准电流值,通过变频调速器控制电动机调节H2 地高度,来控制滴斗滴数 .此方案地优点是,完全按目前电气工程标准化运作,可以在很短时间完成 .文档收集自网络,仅用于个人学习2、 方案三根据点滴装置地特点, 通过对装置地某一位置进行监测和控制, 达到对整个系统液体点滴速度地监 控 . (如图 1).文档收集自网络,仅用于个人学习通过控制输液软管夹头地松紧来控制点滴速度,采用红外传感器测量滴斗滴数,送至单片机接口 计数并显示,首先标定两个脉冲(两滴间)间地时间间隔(以 10MS 为时基单位) .然后计算给定滴斗 滴数(通过键盘)地时间间隔(以 10MS 为时基单位) .将此两个时间间隔进行比较,以决定步进电机 运行地方向 .该步进电机通过丝杠控制输液软管夹头地松紧,来控制滴斗滴数 文档收集自网络,仅用于个人学习4、方案比较 方案一地特点是:实现比较简单容易,原理上也是可行地,但由于本装置用于医疗,电弧地产生, 可能对不同地药物有影响,同时传感器(电极)不能重复使用,以防止传染 .文档收集自网络,仅用于. 文档收集自网络,仅用于个人学习个人学习方案二通过改用红外传感器,弥补了方案一地不足.但是还存在问题,利用改变高度地方法虽然容易实现,但可控性不好.由此,我们采用了第三种方案,通过挤压输液管地办法来实现对点滴速度地控制.文档收集自网络,仅用于个人学习二、系统原理框图如图 2 所示.图2本系统最主要地是充分利用单片机编程地灵活性和其强大地功能,使一些小地系统实现自动化和智能化成为了现实.其中地器件都比较简单,尽大可能地利用各集成芯片地功能,如系统地键盘和显示原理电路.通过红外传感器对水滴滴落地动态信息地感应,单片机对数据地采集分析和处理,同时使用小功率地步进电机进行机械调整,使装置能机智、即时地响应操作者地使用.文档收集自网络,仅用于个人学习三、主要电路原理与设计1 、AT89C51 单片机基本系统控制与数值信号处理地核心采用AT89C51 单片机,采用串口工作方式.电路如图 3.文档收集自网络,仅用于个人学习2、显示与键盘如图4利用74LS164 进行串行动态9 位数码管显示,74LS164 地主要功能是8bits 地串入并出数据处理.电路结构简单,功能强大.采用中断和查询地方法,设计地 4 键键盘地形式,利用单片机地灵活图43、红外传感和信号处理采用红外线地发射和接收装置,它可用来检测包括液体在内地各种透明体、半透明体、不透明体,从而可以灵敏地反应水滴滴下.利用光电耦合器对电信号进行处理,减少干扰.文档收集自网络,仅用于个人学习4、步进电机驱动和控制如图5图55、声光报警当检测到液面低于3cm 时由单片机采集到报警信号,由报警芯片发出声光报警5 、主控制平台可以组建一个小型地网络系统,由主机控制和监视各个从机地工作状态和各个装置地信息. 如图 6 文档收集自网络,仅用于个人学习图6四、系统软件工作流程如图7 到图121、软件设计:软件部分参考流程图,这里主要讲述一下软件编写过程中地几个细节部分.如前所述,我们计算滴水速度地原理是通过求出 2 个水滴之间地时间差,通过分析,我们通过定时器建立一个基准时钟,该基准时钟有 2 个字节单元,分别秒单位和10 毫秒单位地数值.在每次传感器送来中断地时候调用“传感测量”子程序,在该子程序中,我们在取当前触发时间时,先把上一个脉冲发生地时间保存在“历史寄存器”中,然后再更新“当前寄存器”地值,即取当前脉冲地发生时间.这样我们就记录下了 2 个时间(连续)值.文档收集自网络,仅用于个人学习历史寄存器当前寄存器基准时钟7由于基准时钟是以10 毫秒为最小单位地,而对于频率范围在20Hz~150Hz 地脉冲而言,因为我们在后边地求滴速中要用到10 毫秒单位值,而水滴地下落并不能保证绝对地规则,经测试发现,每一次求差后地值总有几个单位毫秒地变动,这个变动就导致了最终运算出来地滴速值地大幅度变化,后来惊观察发现这种误差可以归为周期性误差,所以为了消除这个误差,我们不是简单地只取一个差值,相反,我们是取了10 个差值,然后再求平均值,这样处理地最大一个好处是可以使周期性误差地正、负偏差互相抵消,在很大程度上消除上述误差.文档收集自网络,仅用于个人学习前面地处理虽然可以提供一个比较接近真值,对于最终显示出来地影响不大,但当要用这个值去控制滴速夹时,很明显这样处理地结果降低了控制地响应度;而另一方面,对于滴速夹地控制,因为我们采用地是步进电机,而且我们对步进电机地转轴又进行了改造,加了一个螺纹栓,可以保持滴速夹控制端地位置,所以我们在每采集一个脉冲间隔时就进行滴速地更改控制,这样可以提高控制设备地响应速度.所以在本系统中对于建立一个科学合理地系统模型是很有必要地.文档收集自网络,仅用于个人学习在对滴速进行控制时,我们借鉴了PID 算法,建立了一个闭环控制状态,利用类似于锁相环地模型:即把设定地滴速和当前地滴速进行比较,输出一个差值,利用这个差值地极性来决定电机地正反转,并拉小这个差值直至最小.因为每检测到一个传感信号,我们就把设定值和当前值进行比较,这样不仅提高了设备地响应速度,而且由于我们这个系统地基准时钟是以10 毫秒为单位了,因为我们能分辨到10 毫秒地数量级,可以使当前值非常接近我们所设定地设定值.文档收集自网络,仅用于个人学习这一点可以参照电机控制地流程图.(图12)1、运算过程:因为我们系统地基准时钟是以10 毫秒为单位了,虽然加大了系统地精度,但是却给系统地数值运算带来了麻烦,直接用四则运算(特别是乘除地运算)很容易带来无法避免地运算误差,即在运算是因为运算位数地限制而带来地数据尾数地丢失. 前面说过这种误差将对我们对信号地处理和显示产生很大了影响,甚至会得到一个误差很大地最终输出,为避免这种情况,我们在保证精度地基础上采用了查表法,并且在建立表格时对数据进行一定地折中处理,使得最终得到了结果地误差能尽量小,实践证明我们这种方法还是有一定地实用性地.而且查表法地结果便于以后系统误差地自我校正,因为它保存了一个恒值.文档收集自网络,仅用于个人学习2 、对数据表格地处理:前面说过我们这个系统地基准时钟有两个字节单元,而即使采用题目要求地滴速(20~150 分/滴)也将需要260 个字节,这已经超过了8 位单片机地查表范围,所以怎样建立一个合理地查表算法是很有必要地.通过对数据地观察,我们发现虽然每个时间量有两个字节,但是在秒字节地单元里,总共只能出现4种取值,即1、2和3以及0 ,所以我们可以以这4个值为标量对表格地数据进行划分,由于有了秒字节单元来做区分,我们只要在表格中写入10 毫秒字节单元地值就行了,通过综合处理,在保证精度地基础上,我们所建立地表格地字节数为100 多个,这样不仅满足了8 位单片机地查表范围,而且大大了节省了内存,有利于系统资源地优化分配. 文档收集自网络,仅用于个人学习3、通信地建立:在选择方案时,考虑到通信线地多少,我们采用了串行通信,直接利用单片机本身地串行通信口,在软件上我们考虑用串行通信地方式0 来进行通信.通信协议如下:先发送握手信号,然后发送被呼叫地从机号,每个从机在接收到地址时跟自身地地址进行比较,如果不是被呼叫机,则关闭通信链路;如果是则发送响应信号.当确定了通信地链路后,就按照预定地数据包格式进行通信.数据包格式如下:文档收集自网络,仅用于个人学习操作码2、程序流程图个人收集整理仅做学习参考图8个人收集整理仅做学习参考传感测量:学习时钟:文档收集自网络,仅用于个人图9 图10个人收集整理仅做学习参考步进电机控制:文档收集自网络,仅用于个人学习键盘:个人收集整理仅做学习参考图11 图12 3、源程序:时间基准缓冲区:秒55h 0.01 秒56h键盘设置缓冲区:秒57h 0.01 秒58h传感测量缓冲区:前次—秒51h 0.01 秒52h 当前—秒53h 0.01秒54h 差值—秒4fh 0.01秒50h文档收集自网络,仅用于个人学习最终显示缓冲区:选择值:54h 测定值5ah 5bh 5ch 设置值5dh 5eh 5fh R4 用于步进电机地步进记忆org 0000hajmp mainorg 0003hajmp jpint org 000bh ajmp times org 0013h ajmp cgint org 0040h ;int0 ;t0 ;int1main:mov sp,#60h ;设置堆栈mov 5eh,#00hmov 5fh,#00hmov r7,#00hsetb f0clr p2.1mov tmod,#01h ;T0 为工作方式0mov tl0,#0f0h ; 计数器初值mov th0,#0d8hmov ie,#87h ;中断设置,除T1,ES 外全开中断mov 41h,#00h mov 42h,#00h mov 43h,#00h mov 44h,#00h mov 45h,#00h mov 46h,#00h mov 47h,#00h mov 48h,#00h mov 4fh,#00h mov 50h,#00h mov 51h,#00h mov 52h,#00h mov 53h,#00hmov 54h,#00h mov 55h,#00h mov 56h,#00h mov 54h,#00h mov 57h,#00h mov 58h,#00h mov 59h,#00h mov 5ah,#00h mov 5bh,#00h mov 5ch,#00h mov 5dh,#00h ;初值设置;以上为时间初值;初值显示为00mov ip,#02h setbit0 setb it1 setb tr0setb p1.4 disp:acalldisp0ajmp disp;中断优先级;脉冲触发方式;启动定时;调用显示子程序disp0: push accmov dptr,#tablejnb f0,disp1 mova,54h cjnea,#01h,zzz1movc a,@a+dptrmov sbuf,a jnbti,$ clr ti mova,#0ffh movsbuf,a jnb ti,$ clrti acall dealy;选择值显示ajmp disp1 zzz1:cjne a,#02h,zzz2 movca,@a+dptr mov sbuf,a jnb ti,$ clr ti mova,#0ffh mov sbuf,a jnb ti,$ clr ti acall dealy ajmp disp1 zzz2:cjne a,#03h,zzz3 movca,@a+dptr mov sbuf,a jnb ti,$ clr ti mova,#0ffh mov sbuf,a jnb ti,$ clr ti acall dealy ajmp disp1 zzz3:mov 54h,#00hdisp1:mov a,5ah ;测定值显示cjne a,#00h,disp2 ajmp disp3 disp2:cjnea,#01h,disp4 disp3:movc a,@a+dptr mov sbuf,a jnb ti,$ clr ti mov a,#0feh mov sbuf,a jnb ti,$ clr ti acall dealydisp4:mov a,5bh movc a,@a+dptr mov sbuf,a jnb ti,$ clr timov a,#0fdh mov sbuf,a jnb ti,$ clr ti acall dealymov a,5ch movc a,@a+dptr mov sbuf,a jnbti,$ clr ti mov a,#0fbh mov sbuf,a jnb ti,$ clr ti acall dealymov a,5dh ;设置值显示movc a,@a+dptr mov sbuf,a jnb ti,$ clr ti mov a,#0dfh mov sbuf,a jnb ti,$ clr ti acall dealymov a,5eh movc a,@a+dptr mov sbuf,a jnbti,$ clr ti mov a,#0bfh mov sbuf,a jnb ti,$ clr ti acall dealymov a,5fh movc a,@a+dptr mov sbuf,a jnb ti,$clr ti mov a,#7fh mov sbuf,a jnb ti,$ clr ti acall dealy pop acc retdealy: mov r0,#0fah lll: nop nop djnz r0,lll ret table:db 03h db 9fh db 25h db 0dh db99h db 49h db 41h db 1fh db 01h db 09hjpint: ;键盘控制子程序push acc push 07h mov r2,#0ah zzz:acall dealy djnz r2,zzzjb p1.0,x2 ;选择键子程序inc 54h clr ex1 setb f0 mov a,54h cjnea,#04h,x1 mov 54h,#01h x1:ajmp ret0 x2:jb p1.1,x3 ;加 1 键子程序mov a,54h cjne a,#00h,lll1ajmp ret0 lll1:cjne a,#01h,lll2 inc 5fh mov a,5fh cjne a,#0ah,zhongju mov 5fh,#00h ajmp ret0 lll2:cjne a,#02h,lll3 inc 5eh mov a,5eh cjne a,#0ah,ret0 mov 5eh,#00h ajmp ret0 lll3:inc 5dh mov a,5dh cjne a,#0ah,ret0 mov 5dh,#00h ajmp ret0 x3:jb p1.2,x4 ;减 1 键子程序mov a,54h cjne a,#00h,llll1 ajmp ret0llll1:cjne a,#01h,llll2 dec 5fh mov a,5fh cjne a,#0ffh,ret0 mov 5fh,#09h ajmp ret0 zhongju:ajmp ret0 llll2:cjne a,#02h,llll3 dec 5eh mov a,5eh cjne a,#0ffh,ret0 mov5eh,#09h ajmp ret0 llll3:dec 5dh mov a,5dh cjne a,#0ffh,ret0 mov 5dh,#09h ajmp ret0x4:jb p1.3,x5 ;确定键子程序clr f0 acall enter ; 因指令而修改ret01: ;对整数进行修正mov a,r7cjne a,#14,ccc1mov 57h,#03h ;为20 置 3setb ex1ajmp ret0ccc1:cjne a,#1eh,ccc2mov 57h,#02h ;为30 置 2setb ex1ajmp ret0ccc2:cjne a,#3ch,ret02mov 57h,#01h ;为60 置 1setb ex1ajmp ret0x5:jb p2.0,ret0 ;报警监测setb p2.1 ;送报警声音ajmp ret0 ret02:setb ex1 ret0:pop acc pop 07h reti enter:mov 54h,#00h clr cmov a,5dh ;求时间段程序mov b,#64h ;百位数mul abmov r7,amov a,5ehmov b,#0ah ;十位数mul abadd a,r7mov r7,amov a,5fhadd a,r7mov r7,a ;此时r7 中为设定值clr csubb a,#14h ; 查表前减20mov dptr,#table1 ;由数值查时间段表movc a,@a+dptrmov 58h,arettimes: ;时间设置push accmov tl0,#0f0hmov th0,#0d8hsetb tr0 inc 56h mov a,56h cjnea,#64h,quit0 mov 56h,#00h inc 55hquit0:pop acc reticgint: ;传感测量mov r2,#0ah zzzz:acall dealy djnz r2,zzzz jnb p3.3,cgint1 reticgint1:push acc push 03h push 04h push 05h push 06h inc r7cjne r7,#0ah,zhongju1mov r7,#00hmov a,53h ;数值转移mov 51h,amov a,54hmov 52h,amov a,55h ;读取当前时间mov 53h,amov a,56hmov 54h,aclr c ;求10 个脉冲差值子程序mov 47h,#00h ;10 差值寄存区mov 48h,#00hmov a,53hsubb a,51hmov 47h,aclr cmov a,54hsubb a,52hjnc zero ;如果当前值大就跳转dec 47hclr cmov a,#00h mov a,54h add a,#64h subb a,52hzero:mov 48h,a mov a,47h mov b,#0ah div ab mov4fh,a mov a,b mov r3,a mov a,48h mov b,#0ah div ab mov 50h,a mov a,b movr4,a mov a,r3 mov b,#0ahmul ab add a,50h mov50h,a zhongju1:mov a mov42h,a mov a,43h mov 41h,amov a,55h mov 43h,a mova,56h mov 44h,a clr c ;求差值子程序,供电机使用mov 45h,#00h mov46h,#00h mov a,43h subba,41h mov 45h,a clr c mova,44h subb a,42h jnc zero1 ;如果当前值大就跳转dec 45h clr c mov a,#00h mov a,44hadd a,#64h subb a,42h zero1:mov 46h,a mov a,45h mov a,4fhcjne a,#03,ddd1 mov 5ah,#00h mov 5bh,#02h mov 5ch,#00h ajmp exit ddd1:cjne a,#02h,ddd2 mov a,50h jnz ddd01 mov 5ah,#00h mov5bh,#03h mov 5ch,#00h ajmp exit ddd01:mov b,#0ah div ab mov dptr,#table2 ;秒值为 2 地表movc a,@a+dptr mov r5,a anl a,#0fh mov 5ch,a mov 5bh,#02h mov 5ah,#00h ajmp exit ddd2:cjne a,#01h,ddd3 mov a,50h jnz ddd02 mov 5ah,#00h mov 5bh,#06h mov 5ch,#00h ajmp exit ddd02: mov b,#0ah div ab mov dptr,#table3 ;秒值为 1 地表movc a,@a+dptr mov r5,a anl a,#0fh mov 5ch,a mov a,r5 swap a anl a,#0fh mov 5bh,a mov5ah,#00h ajmp exit ddd3: mov a,50h cjnea,#3ch,ddd03 mov 5ah,#01h mov 5bh,#00h mov 5ch,#00h ajmp exit ddd03:clr csubb a,#3chjc lar100 ;大于100 跳转mov 5ah,#00h ;小于100mov dptr,#table4 ;60 到99 地表movc a,@a+dptrmov r5,aanl a,#0fhmov 5ch,amov a,r5swap aanl a,#0fhmov 5bh,aajmp exitlar100:mov 5ah,#01hclr cmov r5,50hmov a,#3chsubb a,r5mov dptr,#table5 ;100 到150 地表movc a,@a+dptrmov r5,aanl a,#0fhmov 5ch,amov a,r5swap aanl a,#0fhmov 5bh,aexit:jb f0,exit1 ;F0为 1 时电机不工作acall dianjic ;送步进电机子程序exit1:pop 05hpop 03h pop 04h pop acc pop 06h reti dianjic: ;电机控制子程序.zhengzh 为前进,fanzh 为后退push accclr cmov a,57hsubb a,45hjz lowdc ;如果高位相等则进行低位比较;平均差值;秒余数暂存;0.01 秒暂存,44h ;送动态显示缓冲区;整值判断jc jcc1 ;当前滴速小于设定滴速,须反转放松acall zhengzh ;当前滴速大于设定滴速,须正转挤压ajmp outjcc1:acall fanzhajmp outlowdc:clr cmov a,58hsubb a,46hjz outjc jcc2acall zhengzhajmp outjcc2:acall fanzhout:pop accretzhengzh: ;前进挤压mov dptr,#table0inc r4mov a,r4cjne a,#06h,zhengzmov r4,#00hmov a,#00hzhengz:movc a,@a+dptrmov p1,aretfanzh: ; 反转放松mov dptr,#table0dec r4mov a,r4 cjnea,#0ffh,fanz movr4,#05h mov a,#05h fanz:movc a,@a+dptr mov p1,a ret table0: db 80h db 0c0h db40h db 60h db 20h db 0a0h table1: dB 00H dB 86H dB 73H dB 61H dB 50H dB 40H dB 31H dB 22H dB 14H dB 07H dB 00H dB 94H dB 88H dB 82H dB 76H dB 71H dB 67H dB 62H dB 58H dB 54H dB 50H dB 46H dB 43H dB 40H dB 36H dB 33H dB 30H dB 28H dB 25H dB 22H dB 20H dB 18H dB 15H dB 13H dB 11H dB 09H dB 07H dB 05H dB 03H dB 02H dB 00H dB 98H dB 97H dB 95H dB 94H dB 92H dB 91H dB 90H dB 88H dB 87H dB 86H dB 85H dB 83H dB 82H dB 81H dB 80H dB 79H dB 78H dB 77H dB 76H dB 75H dB 74H dB 73H dB 72H dB 71H dB 71H dB 70H dB 69H dB 68H dB 67H dB 67H dB 66H dB 65HdB 65H dB 64H dB 63H dB 63H dB 62H dB 61H dB 61H dB 60H dB 59H dB 59H dB 58H dB 58H dB 57H dB 57H dB 56H dB 56H dB 55H dB 55H dB 54H dB 54H dB 53H dB 53H dB 52H dB 52H dB 51H dB 51H dB 50H dB 50H dB 50H dB 49H dB 49H dB 48H dB 48H dB 48H dB 47H dB 47H dB 47H dB 46H dB 46H dB 45H dB 45H dB 45H dB 44H dB 44H dB 44H dB 43H dB 43H dB 43H dB 43H dB 42H dB 42H dB 42H dB 41H dB 41H dB 41H dB 41H dB 40H dB 40H table2: db 29h db 28h db 27h db 26h db 25h db 24h db 23h db 22h db 21h table3: db 57h db 52h db 49h db 45h db 42h db 39h db 37h db 35h db 33h db 31h table4: db 99h db 98h db 97h db 95h db 94h db 93h db 91h db 89hdb 88h db 87h db 86h db 84h db 83h db 82h db 81h db 80h db 79h db 78h db 77h db 76h db 75h db 74h db 73h db 72h db 72h db 71h db 70h db 69h db 68h db 68h db 67h db 66h db 65h db 65h db 64h db 63h db 63h db 62h db 61h table5: db 00h db 02h db 04h db 06h db 08h db 10h db 12h db 14h db 16h四、 系统测试1、仪器1) 数字示波器 2) 信号发生器 3) 数字计数器2、 波形测试 利用示波器观察红外传感电信号是否规则 .若不规则,说明传感器转化地电信号需要进一步处理, 或者是传感器本身有问题, 需要检查 .直到有规则地方波输出为止 .文档收 集自网络,仅用于个人学习用数字计数器对液滴计数 .在系统电路工作时,用数字计数器地表笔从传感器转化 地电信号输出端相接, 对点滴数计数与系统显示做比较, 从而进一步校正电路测量地准 确度 .文档收集自网络,仅用于个人学习3、 测量数据单机测量: 与计数器比较:db 18h db 20h db 22h db 25h db 28h db 30h db 33h db 36h db 39h db 43h db 46h db 49h end。

无线液体点滴速度监控装置的设计

无线液体点滴速度监控装置的设计

CONO MIC CON STR UCTION 经济建设5环球市场信息导报无线液体点滴速度监控装置的设计输液速度的快慢直接影响药效以及患者生命安全。

临床上人为监控误差大、可操作性差,使得输液速度很难实时控制。

本文设计的液体的点滴速度监控装置利用红外传感器实时检测输液的速度,将采集的点滴速度实时无线传输给控制中心,控制中心通过与设定速度比对发出无线控制信号,来调节流速调节器来调节液体的流速,从而实现点滴速度自动调节。

本设计只需将速度检测和速度调节部分固定在一次输液器上即可使用,无需专用输液器,也可扩展应用到其他液体速度监控装置领域。

点滴输液是临床上最为常见的治疗方法之一,大部分药物的输液速度都有严格的规范。

由于在输液前人工控制速度存在误差,在输液过程中人工监护输液速度工作量大很难保证输液的速度。

目前的研制点滴液体速度监控装置大多都为有线检测装置且需要通过输液瓶的高度来调节点滴的速度,这些点滴输液器需要专用的输液器使得输液成本加大,很难在医疗市场推广。

为了解决以上问题,本文设计了一款无线液体点滴速度监控装置。

该系统以单片机ST C 89C52为控制中心,采用红外发射接收对管装置检测液滴速度,并实时将检测的速度值无线发送给控制中心,控制中心根据传输的速度值来实时发送控制信号给液体调速模块来实时调节液体流速,从而实现点滴流速自动监控的目的。

1.硬件设计本系统硬件采用模块化设计,如图1所示,包括速度检测、控制中心、速度调节三个模块。

每个某块都是一个独立的系统均可以独立工作。

速度检测部分检测输液速度值并将速度信号实时传输给控制中心;控制中心部分主要负责接收检测部分的速度数据信号,根据接收的速度值来判断是否需要调速,若需要调速则向速度调节模块发送速度调节模块信号;速度调节再接收到速度调节信号后,判断是速度增加还是减少信号然后驱动步进电机调节液体流速调节器孙佰顺武传佳李洪亮图硬件原理框图81的调节滚轮来增加或减少点滴输液速度。

液体点滴速度控制教学实验装置的设计

液体点滴速度控制教学实验装置的设计

液体点滴速度控制教学实验装置的设计◆王 强单片机的教学实验在信息电子专业的教学中占有十分重要的地位,为了使同学们掌握单片机的开发系统的基本知识,本文设计了一个液体点滴速度自动控制的实验装置,该装置能够由人工设定点滴速度,并能根据监测到的点滴速度通过控制算法达到设定速度,而且调整时间较快。

该装置不仅可以很好地应用到教学实验中,并且还可以推广到实际应用中。

点滴速度自动控制装置教学装置一、前言在传统医疗过程中,给病人输液一直采用人工观测和人工调节点滴的速度,点滴的监控受到医务人员责任心和熟练程度的限制,给病人和医疗过程带来一定的安全隐患。

同时,现阶段实践性教学环节有它的薄弱之处,大都处于滞后、分散、针对性不强、系统性不够、综合性不强等低层次循环状态,师生重视程度不够,一方面,造成学生找不到工作,另一方面,某些岗位的高级应用技术人才紧缺。

为此,必须充分重视实践教学环节,充分发挥出实践性教学的最大功效。

其有效措施之一,就是配合一些优秀的实验教学模型,开展设计性、系统性、综合性的实验和实习教学。

对实验教学模型有几点主要要求:(1)系统性;(2)新技术的综合性;(3)设计性;(4)直观性。

本文将89C51单片机用于对输液实验装置的设计,实现键盘设定输液速度,通过传感系统来确定点滴速度和对液位警戒线的检测,利用LED 数码显示屏实时显示,通过电机控制储液瓶的高度来达到控速的目的,整个系统结构简单,易于实现。

二、硬件设计系统硬件结构框图如图1所示。

主要包括单片机系统、液滴探测、液位检测、报警输出、步进电机控制、看门狗等电路。

单片机系统选用AT89C51,内含4K 字节的EEPRO M ,便于研制阶段反复调试和修改;为提高系统的可靠性,使得当系统掉电、上电后程序可以恢复正常,本文设计了看门狗硬件电路。

图1 系统的整体结构图1.点滴速度检测滴速检测是采用LM339过零比较电路,采用红外发射—接收对管作为液滴检测器件,根据接收到的光强的强弱判断是否有液滴滴下。

液体点滴速度监控

液体点滴速度监控
• (1)点滴速度测量采用红外对管发射接收 方式。
• (2)储液检测电路仍然采纳红外对管发射 接收装置。
• (3)点滴速度控制是利用电动机正反转来 调节储液瓶的高度来实现的。
• (4)数码管显示当前的滴速,同时显示调 节的速度。
3
速度部分大致思路:
转动系统
信号采集系统
显示电路
单片机处理电路
4
光电探测器
实验要求:
1
组内组合:任务分配稍微明确,由我和朱立负责硬
件和文章部分,软件大部分由王忠印负责。
硬件部分
光电传感器、比较器、数码管 直流驱动电路、输入键盘 报警电路等等
本实验分为
软件部分
键盘、PWM、测速 电机控制程序、数码管显示
2
系统最终方案确定
• 根据以上方案的论证分析,结合器件与设 备等因素,系统各模块方案确定如下:
• 解决方案:使用430程序框架+官方程序改 编。
12
5
比较器:
6
直流电机驱动电路图
7
显示+键盘电路:
8
• 本次练手历尽各种磨练终于比较顺利的完 成了实验所要求的任务;
• 当然在这之中也遇到了许许多多的问题, 但在我们三人组合的讨论和老师的帮助下 基本上一一被解决。程序和电路大部分实 现原创性,但这之中还有很多瑕疵,需要 以后有时间时再做改进。
9
问题一:
• 选择大瓶时,电动机带动不了,转速跟不 上,瓶子基本处于不动状态,而且电压源 12V电压会被强制下拉。
解决方案: 更换小瓶,电机转ቤተ መጻሕፍቲ ባይዱ比大瓶好了很多
10
问题二
• 电机一度只会上升不能下降,速度刷新不 了
解决方法: 经过层层修改演示,发现判断条件有疏漏。

液体点滴测速监测装置

液体点滴测速监测装置

液体点滴速度监控装置F64青岛海航苏振程斌李贵忠摘要本系统设计是以单片机89C51为核心,以键盘及红外传感器为输入系统,以数码管、声光报警电路及步进电机为输出系统的智能化输液控制及监测系统。

键盘系统为独立式按键系统,红外传感器的功能为检测点滴的滴下及控制报警电路。

步进电机具有转速可控功率大及输入脉冲不变时可保持大力矩等优点,这样就可以自如控制吊瓶的上、下缓移可以达到智能控制的目的。

一、方案设计及论证根据题目的基本要求,设计任务主要完成1 数据采集方案的选择数据采集一般可以采用以下几种方案:①使用发光二极管和光敏三极管组合。

②使用红外发光二极管和接受管组合。

③利用激光。

通过对比,在这次设计中由于是近距离探测,故采用方案②来完成数据采集。

由于红外光波长比可见光长,因此受可见光的影响较小。

同时红外系统还具有以下优点:尺寸小、质量轻,能有效的抗可见光波段的伪装,对辅助装置要求最少,对人眼无伤害。

当然红外光也有一定的缺点,如大气、潮湿的天气、雾和云对它有衰减作用,所以只适用于室内通信。

在现代生活中,人们为了更方便的使用红外光这种有效的媒质,利用红外光做出了很多器件,发射式光电检测器就是其中的一种器件,它具体积小、灵敏度高、线性好等特点,外围电路简单,安装起来方便,电源要求不高。

用它作为近距离传感器是最理想的,电路设计简单、性能稳定可靠。

2 键盘方案的选择采用独立式按键电路,每个按键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。

缺点为当按键较多时占用单片机的I/O口数目较多,优点为电路设计简单,且编程极其容易。

综合考虑两种方案及题目要求,方案一需要8个I/O口,方案二需要11个I/O口,由于系统资源足够用,故采用方案二。

3 电机系统方案的选择用单片机控制步进电机,控制信号为数字信号,不在需要数/模转换;具有快速启/停能力,可在一刹那间实现启动或停止,且步距角降低到︒5.7,延时短,定位准确,精度高,可操作性强。

毕业设计(论文)-基于单片机的智能化液体点滴速度监测与控制装置设计模板

毕业设计(论文)-基于单片机的智能化液体点滴速度监测与控制装置设计模板

摘要目前大小医院中所使用的静脉输液器都是悬挂一定高度才能输液,输液速度难以准确限制,这对特护病人和对输液速度有较严格的病人是不方便的。

目前的输液监控报警器笨重、体积大、价格太高,增加医院和病人的费用。

所以如果有液体点滴速度监控装置,必将深受医务人员和病人的欢迎。

因为它有许多的优点,如:可以用按键准确控制速度,可以报警,设备结构简单,费用低等。

所以对液体点滴速度监控的研究十分有意义。

利用单片机设计并制作一个智能化的液体点滴速度监测与控制装置。

该装置由水滴速度测试系统、水速控制系统、显示装置、单片机系统、键盘和报警等系统组成。

应用水的压强随着高度差的变化而变化的原理,利用控制步进电动机的升降来控制点滴速度。

点滴速度可用键盘来设定,设定范围为20~150(滴/分),控制误差范围在10% 1滴左右。

从改变设定值起到点滴速度基本稳定整个过程的调整时间小于3分钟。

同时在水到达警戒线以下时能发出报警信号。

该系统是以单片机89C52为核心,采用了步进电机控制装置、红外光电传感滴速检测装置和通过单片机扫描测量、采用PID控制算法控制直流电机传动装置来实现一个点滴速度自动控制系统。

还扩充了掉点数据存储,实施远距离两线制多机通信、语音报警、系统开机自检、回血报警等功能,增强了系统的实用性。

而且由于采用红外光电传感和电容传感配合单片机及可编程逻辑器件,速递测量和控制精度高。

整体结构设计合理,运行稳定。

主机从机间采用自动检测多路访问协议,很好的解决了多机共用一根通讯线的比特流碰撞问题。

关键字:点滴速度,红外传感,步进电动机,52单片机目录1 单片机89C52概述 (1)1.1 AT89C52单片机 (1)1.1.1 89C52输入/输出引脚简介 (1)1.1.2 89C52的存储器配置 (3)1.1.3 电可擦除可编程只读存储器(E2PROM) (3)2 方案 (4)2.1 方案比较,设计与论证 (4)2.1.1控制方案比较 (4)2.1.2 液滴检测方案比较 (4)2.1.3 点滴速度控制方案 (5)2.1.4 储液液面检测方案 (7)2.1.5 通信方案比较 (7)2.1.6 主从机网络通讯构建方案 (8)3 理论分析 (9)3.1 PID控制算法 (9)4 系统设计 (10)4.1 主站部分 (10)4.1.1 主站键盘和显示部分 (10)4.1.2 电源设计 (12)4.1.3 主站软件流程 (12)4.2 从站部分 (13)4.2.1 点滴检测 (13)4.2.2 点滴速度控制模块 (14)4.2.3 步进电机的驱动 (15)4.2.4 警戒检测 (15)4.2.5 传感及测量电路 (16)4.2.6 数字滤波 (18)4.2.7 掉电数据存储 (18)4.2.8 从站软件流程 (18)4.3 通信部分 (19)4.3.1 主从机网络通讯方案 (20)4.3.2 通信方案的选择和硬件结构 (20)4.3.3 通信报文协议 (21)5 调试 (22)5.1 硬件调试 (22)5.2 软件调试 (22)5.3 软硬综合调试 (22)6 总结 (23)感谢 (24)附录一:参考文献 (25)附录二:程序清单 (26)1 单片机89C52概述本设计主要针对AT89C52单片机芯片来设计的。

液体点滴速度监控系统的设计

液体点滴速度监控系统的设计

液体点滴速度监控系统的设计该系统主要由硬件和软件两部分组成。

硬件部分包括传感器、控制器、显示器和报警器;软件部分则负责数据处理和显示。

首先,我们需要选择适合的流速传感器。

传感器可以通过各种方式测量流体的速度,比如利用涡街传感器、超声波传感器或者压力传感器。

根据实际需要以及成本等因素,选择合适的传感器。

在液体点滴管路中添加一个流速传感器,传感器会通过传感器信号转换为电信号,并输入到控制器中进行处理。

控制器会对传感器获得的电信号进行放大、滤波等处理,得到准确的液体流速数据。

为了实现实时监测,监控系统需要进行数据处理和显示。

控制器会将处理好的流速数据传输到计算机或者显示器上,并显示在屏幕上。

同时,系统可以设置不同的报警阈值,当液体的流速超过或者低于设定的范围时,报警器可以发出声音或者进行其他形式的报警,提醒医护人员进行处理。

为了确保系统的准确性和稳定性,我们需要进行校准和稳定性测试。

校准可以通过将已知流速的溶液通过系统,与测量值进行比对来实现。

稳定性测试可以通过长时间的运行和监测,检测系统的稳定性和精度。

设计一个完善的液体点滴速度监控系统还需要考虑以下几个方面:1.系统的可靠性和稳定性:在设计和选择硬件设备时,应注意设备的质量和稳定性。

同时,要保证系统能够长时间稳定运行,以便实时监测液体的流速。

2.软件的易用性:设计一个用户友好的界面和操作系统,使医护人员能够方便地使用和操作该系统。

对于不同的用户,可以提供不同的操作模式和权限。

3.数据的存储和分析:系统应具备将数据存储和分析的功能,以便日后查看和分析。

可以将数据存储在本地或者云端,以便随时调取。

4.系统的可拓展性:系统应具备可拓展的功能,比如可以与其他设备进行数据交互、或者可以设置多个液体点滴的监控等。

综上所述,液体点滴速度监控系统是一种用于监测和保障患者安全的设备。

通过选择合适的硬件和软件,进行适当的校准和测试,可以设计出一个高度可靠和准确的液体点滴速度监控系统。

液体点滴测速

液体点滴测速

液体点滴速度监控装置一、方案论证及选择1、系统总体框图如下:2、滴速检测部分为了检测液滴下落的速度并且将其转换为电信号,需要利用适合的传感器来完成。

方案一、利用光电传感器,将其发射端和接收端分别设置在滴斗的两端。

当液滴下落时,通过光电传感器的瞬间,由于水对光的折射作用,会使接收端接收到的可见光能量降低,以此进行计数,再传入单片机进行处理,完成检测速度功能。

方案二、利用主动式红外发射接收传感器,液滴下落时,利用其对红外线的吸收和折射能力,是红外接收在液滴下落至红外线发射接收通路上时接收红外线发生衰减,来进行规律性的计数,完成检测速度功能。

方案三、利用导线自制一对探针置于滴斗内,在液滴落下的瞬间,利用液滴导电性使两个探针导通,以达到检测的目的。

方案一利用水对可见光的折射来计数,对于题目要求的无色液体来说,谁对其吸收能力很弱,基本上完全靠折射来工作。

而方案二则是利用水对红外线的吸收和折射作用来计数,有较强的适应性,可以应用于无色液体。

方案三则为有损探测,与前两项无损探测相比,局限较大。

综上,选方案二。

3、速度控制部分控制液滴下落速度主要有两种方法:方案一、通过步进电机和滑轮系统控制储液瓶的高度,来达到控制液滴流速的目的。

方案二、通过控制滴速夹的松紧程度来控制液滴流速。

方案一实现较为简便,通过步进电机可方便地实现储液瓶高度的调节,从而达到控制液滴流速的目的,但缺点是调节储液瓶移动的距离比较大,所需时间比较长,而且储液瓶高度与流速的关系非线性,并且没有现成的公式可以利用,而只能去足够多的采样点,来分析两者之间的关系,得出大致的经验公式。

在自变量(储液瓶移动距离)变化范围较大的情况下,这项工作更为繁杂。

方案二控制滴速夹移动的距离很小,但是滴速夹的松紧调节过程中,移动距离、移动阻力等参数难以计算,用机电系统实现起来较为困难。

综上,我们选择方案一。

4、电机驱动模块方案一、采用集成驱动芯片,再利用单片机驱动。

方案二、采用分立元件构建与集成驱动芯片等效功能的电路,驱动信号较之方案一复杂。

(整理)液体点滴测速

(整理)液体点滴测速

液体点滴速度监控装置一、任务设计并制作一个液体点滴速度监测与控制装置,示意图如右图所示。

二、要求1、基本要求(1)在滴斗处检测点滴速度,并制作一个数显装置,能动态显示点滴速度(滴/分)。

(2)通过改变h2控制点滴速度,如右图所示;也可以通过控制输液软管夹头的松紧等其它方式来控制点滴速度。

点滴速度可用键盘设定并显示,设定范围为20~150(滴/分),控制误差范围为设定值 10% 1滴。

(3)调整时间≤3分钟(从改变设定值起到点滴速度基本稳定,能人工读出数据为止)。

(4)当h1降到警戒值(2~3cm)时,能发出报警信号。

2、发挥部分设计并制作一个由主站控制16个从站的有线监控系统。

16个从站中,只有一个从站是按基本要求制作的一套点滴速度监控装置,其它从站为模拟从站 (仅要求制作一个模拟从站)。

(1)主站功能:a.具有定点和巡回检测两种方式。

b.可显示从站传输过来的从站号和点滴速度。

c.在巡回检测时,主站能任意设定要查询的从站数量、从站号和各从站的点滴速度。

d.收到从站发来的报警信号后,能声光报警并显示相应的从站号;可用手动方式解除报警状态。

(2)从站功能:a.能输出从站号、点滴速度和报警信号;从站号和点滴速度可以任意设定。

b.接收主站设定的点滴速度信息并显示。

c.对异常情况进行报警。

(3)主站和从站间的通信方式不限,通信协议自定,但应尽量减少信号传输线的数量。

(4)其它。

三、评分标准四、说明1、控制电机类型不限,其安装位置及安装方式自定。

2、储液瓶用医用250毫升注射液玻璃瓶(瓶中为无色透明液体)。

3、受液瓶用1.25升的饮料瓶。

4、点滴器采用针柄颜色为深蓝色的医用一次性输液器(滴管滴出20点蒸馏水相当于1ml±0.1ml)。

5、赛区测试时,仅提供医用移动式点滴支架,其高度约1.8m,也可自带支架;测试所需其它设备自备。

6、滴速夹在测试开始后不允许调节。

7、发挥部分第(2)项从站功能中,c中的“异常情况”自行确定。

液体点滴速度自动控制装置设计

液体点滴速度自动控制装置设计

摘要:目前,许多医院普通病房患者静脉输液过程中存在输液速度无法人性化监测和调节等问题,设计提出了一套针对不同病人的输液状况进行实时监控并能准确调节液滴速度的装置。

该系统在微改变传统输液形式的前提下,以单片机AT89C51为核心,利用红外对管传感器监测液滴每分钟滴数和液位变化,然后控制步进电机来调节液滴瓶的高低来实现对液滴滴速的控制。

该设计临床实现比较容易,具有较高的实用价值。

关键词:红外对管液滴速度AT89C51步进电机0引言静脉输液是临床治疗中最常用的,临床上一般根据药物和患者的不同情况来配以合适的输液速度,输液速度过快可能导致中毒等不良反应。

常规的临床输液,常用挂瓶输液,依靠眼睛来观察、手动夹具来控制输液速度,这种传统的输液方式并不能精确的控制输液速度,并且工作量大,造成较多的人力资源浪费。

本设计就是为了解决上述的人力资源浪费以及输液速度问题而设计的液体点滴速度自动控制装置。

1自动控制装置硬件设计1.1点滴速度测量采用红外对管来发射和接收点滴信号,采用断续式的工作方式,当液滴滴下时阻挡了红外接收管接收红外线,从而产生一个高电平脉冲信号。

红外对管检测液滴原理图如图1.1所示:图1.1红外对管检测液滴原理图由于红外光产生的光信号较弱,其接收管接收的信号更是十分微弱,相当于毫伏级的电压。

所以必须经过放大电路将其放大到系统能识别的信号。

本设计采用集成运算放大器LM324构成的同向交流放大器。

经过放大电路处理后的信号并不标准,单片机并不能直接识别,因此需要使用电压比较器将不标准的脉冲信号转化为标准的脉冲信号,采用集成电压比较器LM339实现。

1.2液位检测当点滴液位低于警戒线以下时必须发出声光报警。

在这种情况下,关键是如何检测液面高度。

检测方法与液滴测量相同,仍然使用红外对管来发射接收液滴信号。

根据红外接收管接收的光强度的大小,来确定是否达到警戒线水位。

由于红外光通过空气和水的光强不同,因此吸收系数也有不同,当液位高度低于警戒线(离瓶口2-3cm )时,红外对管会接收到信号,即为报警信号,此时蜂鸣器报警。

液体点滴速度监控装置设计报告

液体点滴速度监控装置设计报告

液体点滴速度监控装置设计报告一、引言液体点滴在医疗领域中广泛应用,用于输液、给药等目的。

监控液体点滴的速度对于保证患者的安全和治疗的有效性至关重要。

为了满足对液体点滴速度进行实时监控的需求,我们设计了一种液体点滴速度监控装置。

二、设计原理三、装置设计1.液位传感器:液位传感器是用于测量液体液位变化的关键组件。

传感器采用了浮球原理,即将一个浮球固定在导轨上,当液位升高时,浮球被抬升,随着液位降低,浮球被下压。

通过浮球的位置变化,可以得到液体的液位变化情况。

2.电子控制单元:电子控制单元包括微控制器、模数转换器和显示屏。

微控制器用于处理传感器的信号,并计算液体点滴的速度。

模数转换器用于将传感器的模拟信号转换为数字信号,供微控制器处理。

显示屏用于实时显示液体点滴的速度。

3.其他组件和接口:装置还需要其他一些组件和接口来支持工作,如电源、按键开关和数据输出接口。

电源用于为整个装置提供电力,按键开关用于启动和停止液体点滴速度监控功能,数据输出接口用于将监控结果输出给其他设备。

四、工作流程1.用户启动装置,并通过按键开关选择开始监控液体点滴速度。

2.液位传感器感知液位的变化,并将模拟信号传递给模数转换器。

3.模数转换器将模拟信号转换为数字信号,传递给微控制器。

4.微控制器根据液位的变化计算出液体点滴的速度,并将结果显示在显示屏上。

5.用户根据显示屏上的速度信息判断液体点滴是否正常,并根据需要进行调整。

五、性能评估1.准确性:液体点滴速度监控装置应具备高精度的液位测量和速度计算能力,以保证监控结果的准确性。

2.稳定性:装置应具备良好的稳定性,能够在各种环境条件下正常工作,不受外界干扰影响。

3.实时性:装置应能够实时监测液体点滴的速度,并将结果及时显示在显示屏上,以满足临床医疗的需求。

六、结论本设计报告介绍了一种液体点滴速度监控装置的设计原理和工作流程。

该装置通过液位传感器和电子控制单元实现对液体点滴速度的实时监控,并通过显示屏将监控结果显示出来。

液体点滴速度监控装置

液体点滴速度监控装置

图2图1图4(或反转)并对霍尔元件产生的脉冲个数计数,当霍尔元件产生的脉冲个数与所需的脉冲个数相等,即让电机停转,此时升高(或下降)到达的高度即为所需高度。

(3)手动和自动功能转换 本系统增加了手动按扭操作,调试时和自动操作结合起来能更快、更准确地调节液位高度。

自动和手动控制转换装置由三个按键开关组成。

其中K1有自锁功能,当K1按下时系统进入手动控制状态。

此时按下K3,T1基极电位变为高电平导通,电机得电正转;当松开K3按下K2时,高电平通过K2使T1导通,电机得电,同时触发T3导通使继电器线圈得电,通过继电器触点的状态变化实现电机反转。

算法及软件流程图1.从站部分的软件设计思路从站系统软件根据总体方案要求,采用“粗调+细调” 的闭环控制方法。

所谓“粗调”,就是根据当前所测到的实际滴速与所要设置的滴速相比较,再查表,得到调瓶要上升(或下降)的脉冲数,直接驱动电机正反转,并记录脉冲个数,当脉冲个数到,即让电机停转。

所谓“细调”就是在粗调完成的基础上, 再测量粗调后的滴速,如果测到的滴速不在要求允许的误差范围内,再做第二次调整。

这样做提高了控制精度。

如果粗调完成,控制精度已经符合要求,则无需再经过细调。

经试验,大多数情况下,粗调之后即能满足要求,无需经过细调。

采用“粗调+细调”的这种做法, 首先要有一个较为详尽、准确的表格。

其次就是调整前,必须等待系统实际测量值稳定后,才能做调整。

因为调整方案是以当前实际滴速为基准查表得到的,如果当前滴速还不稳定,查表得到的值必定不是准确的值,从而不满足要求。

经过多次试验,我们得到了一个较为详尽、准确的表格。

表1为不同高度下的滴速值。

在对每一个高度的滴速进行人工测量时,由于人为或仪器等诸多因素的存在,测量到的值难免有误差。

但本方案采用的是 “粗调+细调”的闭环控制方法,从根本上解决了这个问题。

由表1可知,每个高度都对应有一个相应的滴速,控制过程:假设当前滴速为60滴/分,要调整至20滴/分。

液体点滴速度自动监控系统毕业设计论文

液体点滴速度自动监控系统毕业设计论文

郑州轻院轻工职业学院专科毕业设计(论文)题目液体点滴速度自动系统设计液体点滴速度自动监控系统摘要本设计为液体点滴速度监控装置,实现了对液体点滴速度的检测与控制和储液瓶中液面高度的检测报警,并且动态显示点滴速度,可以通过按键设置液体点滴速度并使用步进电机进行速度控制;为了达到较好的调整稳定度,通过软件实现控制电路的自适应调节;利用软件屏蔽检测中的异常信号;另外实现了多机通信,即一个主机站控制多个从机站和主、从机之间的数据传输。

报警信号通过串行口实现从机到主机的传输,利用发光二极管和蜂鸣器实现主机的声光报警,同时从机使用数码管显示异常信息。

系统以单片机89C51单片机为核心控制器件,有直流电动机为液体点滴速度的控制执行器件,进行液体点滴速度控制。

选择合适的传感器,准确检测出模拟信号是实现本设计的关键所在,串行通讯接口建立了主战与从站的有线监控系统,主机采用VB编写的界面,显示了友好的人机互交界面。

制成了一套简易实用的液体点滴速度监控系统装置。

关键词PID /单片机/点滴速度/光电传感器/多机通信AUTOMATIC CONTROL SYSTEMOF DROPPING RATEOF LIQUIDABSTRACTDesigned for the monitoring mechanism, the implementation rate drops of liquid little speed of the inspection and control and a reservoir of the high level test of the police, and dynamically show, via the keys can be set up a little speed and using step into the motor control tempo ;to achieve better adjust the stability and software for the control circuit to regulate ;used software to detect in shielding of the signal ;achieved much in the communications, Is a host got control over from a machine stops and the lord, from the transmission of data between. the alarm signal by serial port from the implementation of the host of transport, the use of light and a buzzer to host of audible visual type of machine, using digital of information. reflect the abnormal。

输液速度监控器的设计

输液速度监控器的设计

输液速度监控器的设计首先,一个输液速度监控器应包括以下组件:1.流量传感器:用于检测药液的流速。

传统的流量传感器使用机械式流量计,但这种传感器不够精确,容易受到温度和压力等因素的影响。

因此,我们可以采用电子式流量传感器,它可以通过电磁感应或者超声波技术来实现非接触式测量,提高测量精确度。

2.控制模块:用于计算药液的流速和输液时间。

控制模块应该具备高精度的时钟和计数器,以确保计算结果的准确性。

同时,它还应该具备数据存储和处理功能,以便对输液速度进行记录和分析。

3.显示屏:用于显示药液的流速和输液时间,并向操作人员提供警报信息。

显示屏应具备足够的亮度和清晰度,以便在光线不好的情况下也能清晰可见。

4.警报装置:当输液速度超出安全范围时,警报装置应该及时发出警报信号,以提醒操作人员注意。

警报装置可以使用声音、光线或振动等方式进行警示,以适应不同环境和操作人员需求。

5.电源:输液速度监控器需要一个稳定可靠的电源,以保证设备的正常运行。

通常可以使用可充电电池或者直接接入交流电源进行供电。

在设计输液速度监控器时,还需要考虑以下几个方面:1.界面设计:设备的界面应该简洁明了,操作方便。

可以使用触摸屏或者物理按键进行操作,以满足不同操作习惯和需求。

2.数据处理与记录:监控器应该具备数据存储和处理功能,可以将输液过程中的流速数据进行记录,并进行分析。

可以使用内置存储器或者外接存储卡等方式进行数据的保存。

3.轻便便携:由于输液速度监控器需要随时使用,因此应该设计成便携轻便的形式,方便携带和操作。

4.安全性能:输液速度监控器应具备良好的安全性能,可以检测药液的流速并及时发出警报。

同时,设备应具备防水、防尘和防震等功能,以提高设备的稳定性和耐用性。

5.耗能情况:输液速度监控器应该具备高效节能的特点,以延长设备的使用时间。

在实际应用中,输液速度监控器可以广泛应用于医院、诊所和家庭等多个场景。

它可以帮助医护人员更好地掌握输液过程中药液的流速,提高治疗的准确性和安全性。

液体点滴监控装置设计

液体点滴监控装置设计

液体点滴速度监控装置设计班级学号姓名指导老师日期摘要:本系统设计是以单片机A T89C51为核心,以键盘及红外对射式传感器作为输入系统,以数码管及电动机作为输出系统的智能化输液控制及监测系统。

键盘系统为独立式按键系统,红外传感器的功能为检测点滴的速度。

电动机具有转速可控功率大及输入脉冲不变时可保持大力矩等优点,这样就可以自如控制吊瓶的上、下缓移可以达到智能控制的目的。

1.系统基本方案根据题目要求系统可以分为以下几个模块:点滴速度测量模块,储液液面检测模块,键盘显示模块,电机系统控制(点滴速度控制)模块。

系统的基本框图如图所示。

1.1设计方案确定(1)点滴速度测量采用红外对管发射接收方式。

(2)储液检测电路仍然采纳红外对管发射接收装置。

(3)点滴速度控制是利用电动机正反转来调节储液瓶的高度来实现的。

(4)键盘显示用的是单列三按键数码来显示的。

2 系统的硬件设计与实现系统可以分为传感器检测部分和控制部分。

传感器检测部分:系统利用红外对管发射接收即光点传感器将检测到的信号点滴速度测量单 片 机 储液液面检测点滴速度控制 控制电路 电机控制 键盘显示转化为控制器可以辨别的电信号。

传感器检测电路包括2个单元电路:点滴速度测量电路、储液检测电路。

智能控制部分:系统中控制器件根据有传感器变换输出的电信号进行逻辑判断,控制点滴的速度及数码管的显示,完成了点滴装置的自动检测、自动调速、数码显示及报警功能等各项任务。

开控制部分主要包括3个电路:单片机控制电路、电动机的驱动电路、数码管的动态显示电路。

2.1点滴速度测量电路设计接收管与发射管正相对,无液滴滴下时,接收管收到信号,输出低电平;有液滴滴下时,下落的水滴对红外光有较强的漫反射、吸收及一定的发散作用,导致接收光强的较大改变,接收管不能收到较强的信号,产生一个较长的脉动,但是波形不是太好,需要经过一级施密特触发器整形,输出一个正向的脉冲信号送给单片机中断口,据此就可以正确的测出液滴的滴数,即点滴的速度(滴/分)。

液体点滴速度监控装置的设计

液体点滴速度监控装置的设计

┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊液体点滴速度监控装置的设计【摘要】随着电子技术的发展,医疗设备也在发生着一些变化,而传统的人工式监护方式显然已经越来越不能满足当今的监护需要了。

目前,我国医疗机构在进行输液治疗时,输液速度的控制还是采用人工方。

常规临床输液,普遍采用挂瓶式输液,并用眼睛直接观察,依靠手动夹子来控制输液速度,这样的操作方式不能精确控制输液的速度,而且工作也量大。

因此,就需要既廉价又实用的医疗输液检测监控装置来满足现今的医疗需求。

本系统的设计是以单片机AT89C51为核心,以键盘及光电传感器作为输入系统,以数码管及电动机作为输出系统的智能化输液控制及监测系统。

键盘系统为独立式按键系统,光电传感器的功能为液体点滴的速度以及输液瓶页面高度的可靠检测。

当液面低于警戒值时,系统发出警报,并可以手动除去警报。

电动机具有转速可控功率大及输入脉冲不变时可保持大力矩等优点,这样就可以通过控制吊瓶的上、下缓慢移动达到智能控制液体点滴速度的目的。

【关键字】单片机光电传感器步进电机┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊The Design Of Liquid Drip Speed Monitoring Device【Abstract】With the development of electronic technology, medical equipment is also undergoing some changes, but the traditional artificial way of manuai-style care has become increasingly clear that the guardian can not meet the needs of today.At present, China's medical institution at the time of infusion therapy, infusion speed control is the use of artificial parties. Routine clinical transfusion, infusion bottle hanging widely used, and direct observation with your eyes, relying on clips to control the infusion speed manual, this mode of operation can not precisely control the speed of infusion, and the large amount of work. Therefore, we need cheap and practical inspection and monitoring of medical infusion devices to meet today's health care needs.The system design is based on AT89C51 microcontroller as the core to keyboard and optical sensor system as input to digital control and the motor output system of intelligent infusion as a control and monitoring system. Keyboard keys for the stand-alone system, the function of photoelectric sensors the speed of the liquid drip infusion bottle and reliable detection of page height. When the liquid amount is less than the warning value, alert systems, and you can manually remove the alert. Large motors have speed control and input pulse power can be maintained constant high torque, etc. So you can control the bottle through the upper and lowerslow-moving liquid drip to control the speed of intelligent purpose.【Keywords】SCM Photoelectric sensor Stepper motor┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊目录第1章系统方案选择与论证 (1)1.1各模块方案选择和论证 (1)1.1.1液体点滴速度检测 (1)1.1.2输液瓶液面检测 (2)1.1.3键盘方案 (3)1.1.4显示方案 (3)1.1.5电动机系统方案 (3)1.1.6点滴速度控制方案 (5)1.2方案确定 (5)1.3基本系统框图 (6)第2章系统的硬件设计与实现 (6)2.1系统硬件的基本组成部分 (6)2.1.1液体点滴速度检测电路 (7)2.2.2储液瓶液面检测电路 (7)2.2.3键盘电路 (8)2.2.4显示电路 (9)2.2.5步进电机驱动电路 (9)2.3原件说明 (10)2.3.1AT89C51 (10)2.3.2NE555 (12)2.3.3数码管 (13)第3章系统软件设计 (15)3.1液体点滴速度检测子程序 (15)3.2储液瓶液面检测子程序 (15)3.3点滴速度检测子程序 (16)3.4键盘显示子程序 (17)3.5系统的主程序设计 (18)第4章总结 (19)致谢 (20)参考文献 (21)长春大学毕业设计(论文)纸第1章系统方案选择与论证1.1各模块方案选择和论证1.1.1液体点滴速度检测红外线属于一种电磁射线,其特性等同于无线电或X射线[1]。

液体点滴速度监控系统的设计

液体点滴速度监控系统的设计

毕业设计(论文)液体点滴速度监控系统的设计系别自动化工程系专业自动化班级50603学号5060331姓名刘营营指导教师顾德英教授2010 年 6 月17 日液体点滴速度监控系统的设计摘要随着现代科技的发展,自动化设备已经应用到我们生活中的各个领域,然而传统的医疗输液设备效率较低,因此我们有必要提高医疗设备的自动化水平,给护士输液工作提供方便,给输液病人提供可靠的安全保证。

因此本文本着适用、可靠、操作方便、节省劳力、降低劳动强度、提高操作准确性的原则,利用SPCE061A凌阳单片机组成了一个主从局域网络,实现了对液体点滴速度的自动监测与调节,并能实时监测剩余药液。

该控制系统由水滴速度检测环节、水滴速度控制环节、显示装置、单片机系统、键盘和报警等系统组成。

本文硬件部分用SPCE061A单片机,传感器,直流伺服电动机,键盘,数码管等实现。

软件程序使用C语言与汇编语言共同编写。

通过软硬件的结合,较好的实现了控制系统的控制要求。

此单片机控制系统具有自动化程度高、成本低、体积小、控制精确等优点,有很好的经济效益和广阔的发展前景。

关键词:液体点滴速度,模糊控制,直流伺服电动机,SPCE061A单片机The design for the liquid drop speed monitoring systemAuthor:liuyingyingTutor:gudeyingAbstractWith the development of modern science and technology,automation equipment has bee- n applied in all areas of our lives,however,the devices of traditional medical transfusion are more efficient.Therefore, we need to improve the automation level of medical equipment, to facilitate the work of nurses and provide guarantees that are reliable and security for partients. This article depends on the principle tihat is reliable,easy to operate, saving labor,reducing la- bor intensity and improving the accuracy of operation, formming a master-local area network used by single chip of Sunplus of SPCE061A , which achieve automatic monitoring and regu- lation to the liquid dropping speed and monitoring the remaining liquid constantly.The control system consists of liquid dropping speed detection tache, water dropping speed control tache, display devices, microcontroller systems, keyboard and alarm system. This hardware implem- entation include SPCE061A MCU , sensors, DC servo motors,keyboards, digital tubes and so on. Software program use C language and assembly language co-written.Through a combinat- ion of hardware and software,to achieve a better control of the control system requirements.T- his single chip control system has the merit of high degree of automation, low cost, small size, precise control and so on.The system has good economic and broad prospects for developme- nt.Keywords:liquid dropping speed, sensor,DC servo motor, SPCE061A single chip目录1 绪论 (1)1.1 课题研究背景及意义 (1)1.1.1 课题研究背景 (1)1.1.2 课题研究意义 (2)1.2 凌阳十六位单片机的应用及特点 (2)1.2.1 凌阳单片机总述 (2)1.2.2 凌阳单片机的性能 (3)1.2.3 SPCE061A开发方法 (4)1.2.4 凌阳单片机应用领域 (4)1.3 本文主要讨论的内容及总体安排 (4)2 方案对比与论证 (6)2.1 液体点滴控制系统的总体方案 (6)2.2 方案的对比与确定 (7)2.2.1 从站控制模块 (7)2.2.2 点滴速度检测模块 (8)2.2.3 液位检测模块 (9)2.2.4 电机模块 (9)2.2.5 电机驱动模块 (10)2.2.6 键盘和显示模块 (10)2.2.7 通讯模块 (10)2.2.8 声光报警 (10)2.3 方案算法 (10)2.3.1 闭环系统 (11)2.3.2 算法的选择 (11)2.3.3 模糊控制 (11)3系统硬件设计 (16)3.1 点滴速度检测模块 (16)3.2 储液瓶液位高度检测模块 (16)3.3 电机控制模块 (16)3.4 键盘设置模块 (17)3.5 数码管显示模块 (18)3.6 通讯模块 (19)3.7 声光报警 (19)4系统软件设计 (21)4.1 凌阳单片机的编程环境 (21)4.2 I/O分配 (21)4.3 从站系统程序 (21)4.3.1 从站程序流程图 (21)4.3.2 从站各部分实现方法 (22)4.4 主站系统程序 (28)4.4.1 主站系统性能分析 (28)4.4.2 主站程序流程图 (29)4.4.3 主站各部分实现方法 (29)4.5 软件算法的实现 (30)5实验结果及分析 (33)5.1 测试仪器及环境 (33)5.2 测试方法 (33)5.3 误差产生的原因分析 (34)结论 (35)致谢 (36)参考文献 (37)附录 (38)附录A (38)附录B (51)1 绪论1.1 课题研究背景及意义1.1.1 课题研究背景输液又名打点滴或者挂水。

液体点滴速度监控系统的设计

液体点滴速度监控系统的设计

液体点滴速度监控系统的设计引言液体点滴是医院内常见的药物给予方式之一,它通过静脉输液的方式将药物直接注入患者的血液中。

点滴速度的控制非常重要,因为速度过快或过慢都可能对患者的生命安全造成危害。

因此,设计一个液体点滴速度监控系统可以帮助医生和护士实时监控液体点滴的速度,提高患者的安全性。

1.系统需求分析1.1功能需求1.1.1实时监测液体点滴的速度1.1.2发出警报当速度超过预设范围1.1.3记录液体点滴速度的变化趋势1.2性能需求1.2.1监控系统的响应时间应小于1秒1.2.2监控结果的准确性应高于95%1.3可靠性需求1.3.1系统应具备防止数据丢失或损坏的机制1.3.2系统应具备自动备份数据的功能1.4用户界面需求1.4.1界面应简洁易懂1.4.2界面应具备操作简单方便的特点2.系统设计2.1硬件设计2.1.1传感器:使用液位传感器来检测液体点滴的速度,可以采用光电传感器或压力传感器等。

2.1.2控制器:使用单片机或嵌入式开发板作为系统的控制器,负责接收传感器的数据,并根据设定的阈值发出警报。

2.1.3显示器:使用液晶显示器或LED显示屏来显示液体点滴的速度和警报信息。

2.2软件设计2.2.1数据采集:使用传感器采集液体点滴的速度数据,并将其传输给控制器。

2.2.2数据处理:控制器接收到传感器数据后,根据设定的阈值判断液体点滴的速度是否正常,并根据需要发出警报。

2.2.3数据存储:采用数据库或文件系统来存储液体点滴的速度数据,以便日后分析和查询。

2.2.4用户界面:设计一个友好的用户界面,使医生和护士能够实时监控液体点滴的速度和警报信息。

3.系统实施3.1硬件实施3.1.1连接传感器:将传感器与控制器进行连接,确保传感器可以正常传输液体点滴的速度数据。

3.1.2连接显示器:将显示器与控制器进行连接,以显示液体点滴的速度和警报信息。

3.2软件实施3.2.1数据采集程序:编写数据采集程序,在控制器上实时接收和处理传感器的数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<AT89X51.H>#define DB0_DB7 P0#define busy 0x80#define SCANPORT P1sbit E=P2^2;sbit RW=P2^1;sbit RS=P2^0;//1110 1111, 1101 1111, 1011 1111, 0111 1111unsigned char uca_LineScan[4]={0xEF,0xDF,0xBF,0x7F}; //列线扫描电压分为第1,2,3,4根列线unsigned char key_ctt[4]={0};unsigned char speed_bcd[4]={0};unsigned char speed_sc[2];unsigned char yy=0,temp;unsigned int speed_ck[4]={0};unsigned int di_xx[2]={0};unsigned int ct=0,ttb=0,xx=0,tt3=0,speedct=0,speed=0,speedcd=10,cott=0;unsigned int time_sq[4]={0};typedef unsigned char uchar;unsigned char code lcd3[]={"0123456789abcdef"};unsigned char code lcdnow[]={"NOW:000"};unsigned char code lcdset[]={"SET:000"};unsigned char CONTROL[8]={0x38,0x18,0x98,0x88,0xC8,0x48,0x68,0x28};unsigned char codes1[8]={0xb8,0x98,0xd8,0xc8,0xe8,0x68,0x78,0x38};//9,18,36,45,54,63,72,81度顺时针unsigned char codes2[8]={0xb8,0x98,0xd8,0xc8,0xe8,0x68,0x78,0x38};//9,18,36,45,54,63,72,81度逆时针unsigned char counts,pt;unsigned char uc_KeyTemp=0;unsigned char uc_ClickCount=0;unsigned char ucCount;bit flag=1; //度数,正反转,速度控制bit a_ac=0;//比较系统标志bit bleept=0;//报警标准bit moto=0;//电机标志位bit a_key=0;bit b_key=0;void vKeyProcess(unsigned char ucKeyCode);void bleep();//报警void ac();//电机速度比校void akey();//功能处理void getspeed();//速度检侧void stdisplay();//显示void Delay(unsigned int t);void delay_50ms(unsigned int t); //延时void SendCommand(unsigned char ch); //发送命令void InitLcd(); //初始化void DisplayOneChar(unsigned char x,unsigned char y,unsigned char ddata);//按指定位置显示一个字符void DisplayListChar(unsigned char x,unsigned char y,unsigned char *DData);//按指定位盆显示一串字符//================================================//================================================void Delay (unsigned int t) //delay 40us{//for(;t!=0;t--);while(t--);}void deley_50ms(unsigned int t){unsigned int j;//可以在此加少许延时补偿,以称补大数值传递时(如delay_50ms(1000))造成的误差,但付出的代价是造成传递小数值//(delay_50ms(1))造成更大的误差。

因为实际应用更多时候是传递小数值,所以补建议加补偿!for(;t!=0;t--)for(j=6245;j>0;j--);}//==============================================//===============================================void SendCommand(unsigned char ch) //发送命令{/*CheckBusy();*/RS=0;RW=0;DB0_DB7=ch;E=1;Delay(1);E=0;Delay(5); //delay 40us}//=============================================//===================================================void vWriteData(unsigned char ch) //发送数据{/*CheckBusy();*/RS=1;RW=0;DB0_DB7=ch;E=1;Delay(1);E=0;Delay(5); //delay 40us}//=========================================================//===========================================================void InitLcd() //初始化SendCommand(0x38);Delay(1);SendCommand(0x08); //设置工作方式Delay(1);SendCommand(0x01); //显示状态设置Delay(1);SendCommand(0x06); //清屏Delay(1);SendCommand(0x0c); //输入方式设置Delay(1);}//=========================================================//===========================================================void DisplayOneChar(unsigned char x,unsigned char y,unsigned char ddata) //按指定位置显示一//个字符{y&=0x1;x&=0xf; //限制X不能大于15,Y不能大于1if(y)x|=0x40;//当要显示第二行时,地址码+0x40;x|=0x80;//算出指令码SendCommand(x);vWriteData(ddata);}//=========================================================//===========================================================void DisplayListChar(unsigned char x,unsigned char y,unsigned char *DData) //按指定位盆显示一串字符{unsigned char ListLength;ListLength=0;y&=0x1;x&=0xf; //限制X不能大于15,Y不能大于1while(DData[ListLength]>0x20){if(x<=0xf){DisplayOneChar(x,y,DData[ListLength]); //显示单个字符ListLength++;x++;}}}//=========================================================//===========================================================void vShowOneChar(unsigned char ucChar){switch(ucChar){case '0':vWriteData(0x30);break;case '1':vWriteData(0x31);break;case '2':vWriteData(0x32);break;case '4':vWriteData(0x34);break;case '5':vWriteData(0x35);break;case '6':vWriteData(0x36);break;case '7':vWriteData(0x37);break;case '8':vWriteData(0x38);break;case '9':vWriteData(0x39);break;case 'a':vWriteData(0x61);break;case 'b':vWriteData(0x62);break;case 'c':vWriteData(0x63);break;case 'd':vWriteData(0x64);break;case 'e':vWriteData(0x65);break;case 'f':vWriteData(0x66);break;default:break;}}//==============================================//==============================================unsigned char ucKeyScan(){unsigned char ucTemp=0;//扫描状态暂存unsigned char ucRow=0,ucLine=0;//行号列号for(ucLine=0;ucLine<4;ucLine++)//列扫描{SCANPORT=uca_LineScan[ucLine]; //输出扫描电位ucTemp=SCANPORT&0x0f;// 输出扫描电位并屏蔽高4位if(ucTemp!=0x0f){switch(ucTemp){case 0x0e:ucRow=10;break;//如果有则判断行号case 0x0d:ucRow=20;break;case 0x0b:ucRow=30;break;case 0x07:ucRow=40;break;default: ucRow=50;break;}break;}}//<<<<<<<<<<<<<<<<<<<<<恢复键扫描处理前舒适状态>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SCANPORT=0x0f;//恢复P2口return ucRow+ucLine+1;//返回按键编码格式为2位数高位为行号地位为列号}//==============================================//==============================================void vKeyProcess(unsigned char ucKeyCode){if(a_key==1){switch(ucKeyCode){case 41:vShowOneChar('7');temp=7;break;case 42:vShowOneChar('8');temp=8;break;case 43:vShowOneChar('9');temp=9;break;case 31:vShowOneChar('4');temp=4;break;case 32:vShowOneChar('5');temp=5;break;case 33:vShowOneChar('6');temp=6;break;case 21:vShowOneChar('1');temp=1;break;case 22:vShowOneChar('2');temp=2;break;case 23:vShowOneChar('0');temp=0;break;case 12:vShowOneChar('7');temp=7;break;}SendCommand(0xc4+uc_ClickCount);SendCommand(0x0f);}switch(ucKeyCode){case 44:/*vShowOneChar('c');*/temp=12;break;//'/'case 34:/*vShowOneChar('d');*/temp=13;break;//*case 24:/*vShowOneChar('e');*/temp=14;break; //-case 14:/*vShowOneChar('f');*/temp=15;break;//+case 13:/*vShowOneChar('b');*/temp=11;break;//=case 11:/*vShowOneChar('a');*/temp=10;break;//ON/Cdefault:break;}if(temp==11)//判断按键与上一次所按的键是否相同{delay_50ms(10);if(uc_ClickCount<255)//同一个按连续按下的次数:1~255{uc_ClickCount++;SendCommand(0xc3+uc_ClickCount);SendCommand(0x0f);}if(uc_ClickCount==3)uc_ClickCount=0;SendCommand(0xc4+ uc_ClickCount);SendCommand(0x0f);}if(temp<=9){switch(uc_ClickCount){case 0:key_ctt[0]=temp;break;case 1:key_ctt[1]=temp;break;case 2:key_ctt[2]=temp;break;default:break;}}//============================================== //==============================================void int_timer0(void){TMOD=0x10;TMOD=0x01;TH0=0x3c;TL0=0xb0;ET1=1;TR1=1;ET0=1;TR0=1;EA=1;IT1=1;EX1=1;}//============================================== //============================================== void Timer1() interrupt 3{TH1=0x3c;TL1=0xb0;pt++;if(pt==2){pt=0;if(flag==0&&moto==1)P2=(P2&0x0f)|CONTROL[counts];if(flag==0&&moto==0)P2=(P2&0x0f)|codes2[counts];counts++;if(counts==8)counts=0;}}//============================================== //============================================== void Timer0() interrupt 1{TH0=0x3c;TL0=0xb0;yy++;if(yy==2){ct++;tt3++;yy=0;if(ct==600)//60秒定时ct=0;xx=0;}if(tt3==20){tt3=0;di_xx[1]=di_xx[0];di_xx[0]=xx;if((di_xx[0]==di_xx[1])&&a_ac==1){bleept=1;flag=1;}}}}//============================================== //============================================== void Int1()interrupt 2{static cott=0;cott++;if(cott==2){xx++;time_sq[2]=time_sq[1];time_sq[1]=time_sq[0];time_sq[0]=ct;if(a_key==0){DisplayOneChar(10,0,lcd3[speed/100]);DisplayOneChar(11,0,lcd3[speed%100/10]);DisplayOneChar(10,0,lcd3[speed%10]);DisplayOneChar(10,0,lcd3[xx/100]);DisplayOneChar(10,0,lcd3[xx%100/10]);DisplayOneChar(10,0,lcd3[xx%10]);SendCommand(0xc4+uc_ClickCount);getspeed();cott=0;}}}//============================================== //============================================== void stdisplay(){DisplayListChar(0,0,lcdnow);DisplayListChar(0,1,lcdset);DisplayListChar(14,0,0x4f);DisplayListChar(15,0,0x46);DisplayListChar(8,0, "S:");DisplayListChar(8,1,"T:");//==============================================//==============================================void main(){delay_50ms(1);int_timer0();InitLcd();P2_3=1;SCANPORT=0x0f;stdisplay();while(1){bleep();if(SCANPORT!=0x0f){for(ucCount=0;ucCount<200;ucCount++);if(SCANPORT!=0x0f)vKeyProcess(ucKeyScan());};switch(temp){case 13:bleept=0;break;//Dcase 14:a_ac=1;b_key=1;if(b_key==1){DisplayOneChar(15,1,0x4f);b_key=0;};SendCommand(0xc4+uc_ClickCount);break;//e case 15:if(a_key==1){speedcd=key_ctt[0]*100+key_ctt[1]*10+key_ctt[2];uc_ClickCount=0;};break;//fcase 10:a_key=1;akey();break;//acase 12:a_key=0;akey();break;//cdefault:break;}}}//==============================================//==============================================void ac(){if(speedct>=(speedcd+5)){ moto=0; flag=0; }else if(speedcd<=(speedcd-5)){ moto=1; flag=0; }elseflag=1;}//==============================================//==============================================void bleep(){if(a_ac==1){if(bleept==1)P2_3=0;P2_3=1;}}//==============================================//==============================================void akey(){if(a_key==1){SendCommand(0x0c);DisplayOneChar(14,0,0x4f);DisplayOneChar(15,0,0x4e);//OnSendCommand(0xc4);SendCommand(0x0f);}if(a_key==0){SendCommand(0x0c);DisplayOneChar(14,0,0x4f);DisplayOneChar(15,0,0x46);//Of}}//==============================================//==============================================void getspeed(){if(a_ac==1) { ac(); };speed=1200/(time_sq[0]-time_sq[2]);speed_ck[3]=speed_ck[2];speed_ck[2]=speed_ck[1];speed_ck[1]=speed_ck[0];speed_ck[0]=speed;if((speed_ck[0]!=speed_ck[1])){speed_sc[1]=speed_sc[0];speed_sc[0]=speed_sc[0];speedct=(speed_sc[0]+speed_sc[1])/2;}else{if((speed_ck[0]==speed_ck[2])&&(speed_ck[1]==speed_ck[3]))speedct=(speed_ck[0]+speed_ck[1])/2;if((speed_ck[0]==speed_ck[1])||(speed_ck[0]==speed_ck[2]))speedct=(speed_ck[1]+speed_ck[2])/2;if((speed_ck[0]!=speed_ck[1])&&(speed_ck[0]!=speed_ck[2])&&(speed_ck[1]==speed_ck[2])) speedct=(speed_ck[0]+speed_ck[1])/2;if((speed_ck[0]!=speed_ck[1])&&(speed_ck[0]!=speed_ck[2])&&(speed_ck[1]!=speed_ck[2])) speedct=(speed_ck[0]+speed_ck[1] +speed_ck[2]+speed_ck[4] )/4;}speed_bcd[1] =speed%100/10;speed_bcd[2]=speed%10;if(a_key==0){DisplayOneChar(4,0,lcd3[speedct/100]); DisplayOneChar(5,0,lcd3[speedct%100/10]); DisplayOneChar(6,0,lcd3[speedct%10]);DisplayOneChar(4,1,lcd3[speedct/100]); DisplayOneChar(5,1,lcd3[speedct/100]); DisplayOneChar(6,1,lcd3[speedct/100]); SendCommand(0xc4+uc_ClickCount);}}。

相关文档
最新文档