- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
项目六 液体点滴速度监控装置的设计指导书
项目六 液体点滴速度监控装置的设计
一、设计内容与要求
利用单片机设计并制作一个智能化的液体点滴速度监测与控制装置。该装置由水滴速度测试系统、水速控制系统、显示装置、单片机系统、键盘和报警等系统组成。应用水的压强随着高度差的变化而变化的原理,利用控制步进电动机的升降来控制点滴速度。点滴速度可用键盘来设定,设定范围为20~150(滴/分),控制误差范围在10%1滴左右。从改变设定值起到点滴速度基本稳定整个过程的调整时间小于3分钟。同时在水到达警戒线以下时能发出报警信号。
二、硬件电路框图
1. 系统框图
各个部分作用:
(1) 电机控速模块:用步进电机来控制储液瓶的高度来达到控速的目的。
(2) 步进电机的驱动:采用硬件驱动。
(3) 红外测速:采用对射式红外传系统。
2. 传感器
对射式光电传感器(以下简称为传感器) 分为投光器和受光器两部分。两者光轴重合在同一直线上。工作时,投光器发出调制光,被受光器接收,变为电信号。当被测体进入检测区时,光被遮挡,受光器无光可受,传感器输出状态改变。电路如下图所示。
3. 单片机最小系统原理图
三、软件设计
1. 主程序流程图
2. 外部中断0流程图
case 1: AA=0xf9;break; /* ‘1’*/
case 2: AA=0xa4;break; /* ‘2’*/
case 3: AA=0xb0;break; /* ‘3’*/
case 4: AA=0x99;break; /* ‘4’*/
case 5: AA=0x92;break; /* ‘5’*/
case 6: AA=0x82;break; /* ‘6’*/
case 7: AA=0xf8;break; /* ‘7’*/
case 8: AA=0x80;break; /* ‘8’*/
case 9: AA=0x90;break; /* ‘9’*/
case 10: AA=0x88;break; /* ‘A’*/
case 11: AA=0x83;break; /* ‘B’*/
case 12: AA=0xc6;break; /* ‘C’*/
case 13: AA=0xa1;break; /* ‘D’*/
case 14: AA=0x86;break; /* ‘E’*/
case 15: AA=0x8e;break; /* ‘F’*/
case -:AA=0xbf;break; /* 破折号,此处原误为0xdf,系04级王资凯同学指正*/
case _:AA=0xf7;break; /* 下划线*/
case :AA=0xff;break; /* 消隐*/
default: AA=0xff;
}
return(AA);
}
/**** T0时钟中断服务程序
在本例中,每5ms被执行一次
*****/
timer0() interrupt 1 using 0
{
EA=0; /*关中断*/
/* 重新对计数器赋初值,并启动定时计数 */
TH0=V_TH0;
TL0=V_TL0;
TR0=1;
/* 1秒钟软定时器计数 */
if (++clock1s=V_T1s)
{
clock1s_flag = 1; /*当1秒到时,溢出标志置1 */
clock1s = 0;
}
output_sel = 0xf0; /*初值,令数码管驱动位无效,指示灯全灭*/
/* 检测到按键被按下(0)时,相应的指示灯亮(0) */
if (KEY1==0) led_1 = 0;
if (KEY2==0) led_2 = 0;
if (KEY3==0) led_3 = 0;
if (KEY4==0) led_4 = 0;
/* 数码管扫描驱动指针值从1到4重复变换,每5ms间隔对一个数码管进行驱动,20ms一个轮回 */
if (++digi_scaner=5) digi_scaner = 1;
switch (digi_scaner)
{
case 1: /* 驱动第一个数码管 */
output_sel |= 0x01;
ADDR_8SEG = NUMTOSEG7(digi[0]); /*输出到锁存器U5(在电路图中找)*/
break;
case 2: /* 驱动第二个数码管 */
output_sel |= 0x02;
ADDR_8SEG = NUMTOSEG7(digi[1]); /*输出到锁存器U5*/
break;
文档评论(0)