单片机水流量检测测试设计.doc

上传人:李司机 文档编号:1090990 上传时间:2022-06-23 格式:DOC 页数:28 大小:291.57KB
返回 下载 相关 举报
单片机水流量检测测试设计.doc_第1页
第1页 / 共28页
单片机水流量检测测试设计.doc_第2页
第2页 / 共28页
单片机水流量检测测试设计.doc_第3页
第3页 / 共28页
单片机水流量检测测试设计.doc_第4页
第4页 / 共28页
单片机水流量检测测试设计.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《单片机水流量检测测试设计.doc》由会员分享,可在线阅读,更多相关《单片机水流量检测测试设计.doc(28页珍藏版)》请在三一办公上搜索。

1、-单片机课程设计题 目 水流量显示器 学 院 电子工程学院专 业班 级学 号姓 名组 员指导教师引言31. 任务设计42. 系统硬件电路的设计52.1主芯片STC89C525主要性能5芯片功能特性简述:5引脚功能62.2时钟电路72.3复位电路72.4液晶显示电路8显示特性8引脚说明8接口时序10初始化指令:122.5水流量测量电路142.6按键控制电路153. 软件系统的设计163.1软件设计总流程163.2水流量程序模块16水流量的读取程序173.3显示程序184. 总结19参考文献201. 原理图213 仿真图225. 程序23引言随着现代社会的进步,经济的开展,人们对精神领域的追求更高

2、,对生活水平的要求更高。现代的家居生活是一种高品位、高质量、个性化、智能化的方式。本系统就是基于STC89C52单片机控制的智能家居系统,可以实际监控室各种不同的家电设备,并能通过液晶屏动态显示当前工作状态。该系统与传统的智能家居系统相比,具有功能多样化、本钱造价低等优点,且符合当今社会智能、节能、环保的开展观念,并在人们享受高品位、高质量、个性化、智能化生活的同时提高人们的节约意识。由于智能家居系统有众多模块,本课题只采取其中的水流量模块进展单独设计。关键词:单片机 水流量传感器1.任务设计当翻开水龙头时,根据单片机STC89C52的指令、水流量计传感器采集水流量状态。当单片机STC89C5

3、2扫描到水流量计传感器的脉冲数,经过单片机STC89C52处理,计算出所采集的水流量后,通过液晶屏LCD1602能动态显示当前水流量。2.系统硬件电路的设计2.1主芯片STC89C52主要性能1与MCS-52单片机产品兼容 、8K字节在系统可编程Flash存储器21000次擦写周期3全静态操作:0Hz33Hz 4三级加密程序存储器 532个可编程I/O口线6三个16位定时器/计数器八个中断源7全双工UART串行通道8低功耗空闲和掉电模式 9掉电后中断可唤醒 10看门狗定时器11双数据指针12掉电标识符 芯片功能特性简述:STC89C52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在

4、系统可编程Flash 存储器。使用高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在线系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 STC89C52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断构造,全双工串行口,片晶振及时钟电路。另外,STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲

5、模式下,CPU 停顿工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM容被保存,振荡器被冻结,单片机一切工作停顿,直到下一个中断或硬件复位为止。8 位微控制器 8K字节在系统可编程 Flash。 图2-1 单片机引脚引脚功能表2-1 STC89C52引脚介绍说明引脚功能介绍VCC+5V电源电压VSS电路接地端P0.0P0.78位漏极开路的双向I/O通道P2.0P2.78位拟双向I/O通道P3.0R*D,串行输入口P3.1T*D,串行输出口P3.2INT0,外部中断输入口P3.3INT1,外部中断输入口P3.4定时器/计数器外部事件脉冲输入端P3.5定时器/计数器外部事

6、件脉冲输入端P3.6外部数据存贮器写脉冲P3.7外部数据存贮器读脉冲RST/VpD复位输入信号ALE/PROG地址锁存有效信号PSEN程序选通有效信号EA/VPP当保持TTL高电平,执行部EPROM的指令,当使TTL为低电平, 从外部程序存贮器取出所有指令,在的EPROM编程时,此端为21编程电源输入端*TAL1部振荡器外接晶振的一个输入端*TAL2部振荡器外接晶振的一个输入端2.2时钟电路单片机的最小系统有三局部组成,即电源,时钟电路和复位电路。其中单片机的电源引脚与5V电源连通即可,而时钟电路和复位电路还需接口扩展,这也是单片机的根本电路操作。时钟电路用于产生单片机工作所需的时钟信号,时序

7、是指令执行中各信号之间的相互关系。单片机本身就如同一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进展工作。在STC89C52单片机部带有时钟电路,因此,只需要在片外通过*TAL1和*TAL2引脚接入定时控制元件(晶体振荡器和电容),即可构成一个稳定的自激振荡器。在STC89C52芯片部有一个高增益反相放大器,而在芯片的外部,*TAL1和*TAL2之间跨接晶体振荡器和微调电容。在单片机的*TAL1脚和*TAL2脚之间并接一个晶体振荡器就构成了部振荡方式。STC89C52单片机部有一个高增益的反相放大器,*TAL1为部反相放大器的输入端,*TAL2为部

8、反相放大器的输出端,在其两端接上晶振后,就构成了自激振荡电路,并产生振荡脉冲,振荡电路输出的脉冲信号的频率就是晶振的固有频率。在实际应用常还需要在晶振的两端和地之间各并上一个小电容。图2-2 时钟电路用晶振和电容构成谐振电路。电容大小与晶振频率和工作电压有关。但电容的大小影响振荡器的稳定性和起振的快速性,为了提高精度,本实验板采用20pF的电容作为微调电容。在设计电路板时,晶振、电容等均应尽可能靠近芯片,减小分布电容,以保证振荡器振荡的稳定性。2.3复位电路复位是单片机的初始化操作,其目的是使CPU和系统中各局部处于一个确定的状态,并从这一状态开场工作。系统上电路或死机后都要进展复位操作。单片

9、机的RST引脚为复位引脚,振荡电路正常工作后,RST端加上持续两个机器周期的高电平后,单片机就被复位。复位电路有3种根本方式:上电复位,开关复位和看门狗复位。图2-3 复位电路本课题采用按键开关复位是指通过接通按钮开关,使单片机进入复位状态。开关复位电路一般不单独使用。在应用系统设计中,假设需使用开关复位电路,一般的做法是将开关复位与上电复位组合在一起形成组合复位电路,上电复位电路完成上电复位功能,开关复位电路完成人工复位。图2-3中C7与R1构成了上电复位电路。上电复位后,电源经R1对C7充满电源,C7等效于开路,RST端为低电平;单片机正常工作。按开关K1后,C7两端电荷经R1迅速放电,K

10、1断开后,由C7、R1及电源完成对单片机的复位操作。在上述电路中C7、R1按上电复位电路的设计而取值。复位电路的作用非常重要,能否成功复位关系但单片机系统能否正常运行的问题。如果振荡电路正常而单片机系统不能正常运行,其主要原因是单片机没有完成正常复位,程序计数器的值没有回0,特殊功能存放器没有回到初始状态。这时可以适当地调整上电复位电路的阻容值,增加其充电时间常数来解决问题。2.4液晶显示电路课题任务要求以LCD1602芯片显示单片机处理后的温度、水费和水流量,在此有必要详尽的介绍LCD1602的特性和用法。2.4.1显示特性只需5V 电源电压,低功耗、长寿命、高可靠性 置 192 种字符16

11、0个 57 点阵字符和 32 个510 点阵字符 具有 64 个字节的自定义字符 RAM 显示方式:STN、半透、正显 驱动方式:1/16DUTY,1/5BIAS 视角方向:6点 背光方式:底部 LED 通讯方式:4位或 8 位并口可选 标准的接口特性:适配 MC51 和M6800 系列 MPU的操作时序。2.4.2引脚说明表2-2 液晶1602引脚说明管脚号 符号功 能1Vss电源地GND2Vdd电源电压(+5V)3V0LCD驱动电压(可调) 存放器选择输入端,输入MPU 选择模块部存放器类型信号:RS=0,当MPU 进展写模块操作,指向指令存放器;4RS当MPU 进展读模块操作,指向地址计

12、数器;RS=1,无论MPU 读操作还是写操作,均指向数据存放器5R/WR/W=0 读操作;R/W=1 写操作6E使能信号输入端,输入MPU 读/写模块操作使能信号:4位方式通讯时,不使用DB0-DB37DB0数据输入/输出口,MPU 与模块之间的数据传送通道8DB1数据输入/输出口,MPU 与模块之间的数据传送通道9DB2数据输入/输出口,MPU 与模块之间的数据传送通道10DB3数据输入/输出口,MPU 与模块之间的数据传送通道11DB4数据输入/输出口,MPU 与模块之间的数据传送通道12DB5数据输入/输出口,MPU 与模块之间的数据传送通道13DB6数据输入/输出口,MPU 与模块之间

13、的数据传送通道14DB7数据输入/输出口,MPU 与模块之间的数据传送通道15A背光的正端+5V16K 背光的负端0V16K 背光的负端0V2.4.3接口时序图2-5 时序图表2-3 液晶1602时序图标号说明时序参数符号极限值单位测试条件最小值典型值最大值E信号周期tc400ns引脚EE脉冲宽度Tpm150nsE上升沿/下降沿时间Tr,tf25ns地址建立时间Tsp130ns引脚E、RS、RW地址保持时间Thd110ns数据建立时间读操作Td100ns引脚DB0DB7数据保持时间读操作Thd220ns数据建立时间写操作Tsp240ns数据保持时间写操作Thd210ns程序实现如下:/*写指令

14、程序*/void wr_(unsigned char ) /写指令 delay(1); /延时1ms RS=0; /写命令设置 RW=0; /并行数据的读写 EN=0; /使能为0 P2=; /输入命令 delay(1); /延时1ms EN=1; /使能为1 delay(1); /延时1ms EN=0; /使能为0 /*写数据程序*/void wr_dat(unsigned char dat)/ 写数据 delay(1); /延时1ms RS=1; /写数据设置 RW=0; /并行数据的读写 EN=0; /使能为0 P2=dat; /输入数据 delay(1); /延时1ms EN=1; /

15、使能为1 delay(1); /延时1ms EN=0; /使能为02.4.4初始化指令:表2-4 清屏指令指令功能指令编码执行时间/msRSR/WDB7DB6DB5DB4DB3DB2DB1DB0清屏00000000011.64功能:去除液晶显示器,即将DDRAM的容全部填入空白的ASCII码20H; 光标归位,即将光标撤回液晶显示屏的左上方;将地址计数器(AC)的值设为0。表2-5 光标归位指令指令功能指令编码执行时间/msRSR/WDB7DB6DB5DB4DB3DB2DB1DB0光标归位000000001*1.64功能:把光标撤回到显示器的左上方; 把地址计数器(AC)的值设置为0; 保持D

16、DRAM的容不变表2-6 进入模式设置指令指令功能指令编码执行时间/msRSR/WDB7DB6DB5DB4DB3DB2DB1DB0进入模式设置00000001I/DS1.64功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。表2-7 显示开关控制指令指令功能指令编码执行时间/sRSR/WDB7DB6DB5DB4DB3DB2DB1DB0显示开关控制0000001DCB功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。表2-8 设定显示屏或光标移动方向指令指令功能指令编码执行时间/sRSR/WDB7DB6DB5DB4DB3DB2DB1DB0设定显示屏或光标移动方

17、向00000/功能:使光标移位或使整个显示屏幕移位。表2-9 功能设定指令指令功能指令编码执行时间/sRSR/WDB7DB6DB5DB4DB3DB2DB1DB0功能设定0000/功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下:表2-10 设定CGRAM地址指令指令功能指令编码执行时间/sRSR/WDB7DB6DB5DB4DB3DB2DB1DB0设定CGRAM地址000CGRAM的地址位功能:设定下一个要存入数据的CGRAM的地址。表2-11 设定DDRAM地址指令指令功能指令编码执行时间/sRSR/WDB7DB6DB5DB4DB3DB2DB1DB0设定RAM地址00CGRAM的地

18、址位40功能:设定下一个要存入数据的CGRAM的地址。 (注意这里我们送地址的时候应该是0*80+Address,这也是前面说到写地址命令的时候要加上0*80的原因) 表2-12 读取忙信号或AC地址指令指令功能指令编码执行时间/sRSR/WDB7DB6DB5DB4DB3DB2DB1DB0读取忙碌信号或AC地址0FBAC容位40功能:读取忙碌信号BF的容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或指令;当BF=0时,液晶显示器可以接收单片机送来的数据或指令;读取地址计数器(AC)的容。表2-13 数据写入DDRAM或CGRAM指令一览指令功能指令编码执行时间/sRSR/WDB7D

19、B6DB5DB4DB3DB2DB1DB0写数据到DDRAM或CGRAM10要写的数据D7D040功能:将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符;将使用者自己设计的图形存入CGRAM。表2-14 从CGRAM或DDRAM读出数据的指令一览指令功能指令编码执行时间/sRSR/WDB7DB6DB5DB4DB3DB2DB1DB0从CGRAM或DDRAM中读数据11要读的数据D7D040功能:读取DDRAM或CGRAM中的容。单片机和LCD液晶显示器的连接图2-6 液晶显示电路2.5水流量测量电路课题任务中最重要的是水流量的测量。通过水流量传感器的数据采集,根据商家的水流量传感器的参数可

20、以得出单片机在运算时的数据。水流量传感器参数:环境温度:-1055流量计算在流量为:0.20.4L/Min时,1L=2100次;0.50.8L/Min时,1L=2280次;0.91.2L/Min时,1L=2350次;1.22.5L/Min时,1L=2460次;脉冲次数在流量变化时有一定程度的变动接线方法白线:信号输出;黑线:电源负也可按客户要求定做测量精度:5%在流量稳定的系统,精度可达2%工作电压:DC024V工作压力:100PSI7kg/cm)耐湿性能:在环境湿度为90%以下时性能保持稳定寿命测试:本产品用进口干簧管作感应元件,在负荷小于24V 1mA前提下, 开关寿命大于3亿次。 图2-

21、15 水流量测量电路 2.6按键控制电路课题设计之初,要求根本实现的功能有水流量的控制、水价的改变。由于液晶显示屏不能够完全实现其显示,故又增加了换页功能,共三个控制键。图2-16 按键电路3.软件系统的设计3.1软件设计总流程程序要求液晶显示有当前水流量,总流量。水流量的测量由开关控制。由于LCD1602的显示屏幕有限,所以又把程序设计成可以翻页的形式。翻页也用开关控制。由于在两个界面里面都显示水温,故在显示程序里参加测量水温程序也未尝不可。整个程序中构造较为简单,但其中也有几个重要而且比较费脑筋的子程序,包括水测量程序、水流量数据的计算转换程序。在程序中可以分为2个主要模块:水流量模块,显

22、示模块如图3-1所示:图3-1 总流程图3.2水流量程序模块水流量的测量主要依靠对得到的频率处理,由流量计在一段时间下产生高电平的个数决定,即Q流量=F频率/R商家设定值所以只要在单片机中设定一定的时间,并在该时间之下计算出得到的高电平即可。在本程序中STC89C52的两个定时器T0为计数状态,T1 为计时状态,这样方可测量流量。3.2.1水流量的读取程序中断程序运行的时间到,就可以读取计数器中的数值,将下数值读出后把计数器赋值为0,等待下一次的取出,然后进入对读出数据的处理程序。如图3-4所示:图3-2 水流量数据的处理程序在预定时间到,即已经取出了定时器的数值。我们计算的水流量最大是以每吨

23、来计算并显示的,故一个整形或长整型的数不够,故先把它放在了一个int变量的存储空间,做水流量的前三位,在定义一个长整型的数,把它作为水流量的后六位,这样计算起来也比较容易,数据也不会起冲突,也是为将要计算水价做准备。设定该水流量的最大计数为250吨,超过了定值,则会从0开场。如图3-5所示:图3-3 水流量数据处理流程图3.3显示程序在程序中只是计算出流量值,温度值以及和资源分配的情况,一些字母的显示,都要另加,这样才能尽善尽美的表达出显示出来的意思。所以在主程序中不必再测量温度。在第一页主要显示的是总水流量的后三位,最后以t结尾。第二页主要当前水流量的前三位,最后以kg结尾。4.总结在为期两

24、周的实训中,我学到了很多,在整个过程中,包括最开场的课题设计、焊接、程序编写,到最后的调试我都参与其中。可以这么说,在这两个星期中学到的东西比我两个月学到的还要多。在最开场设计课题时,查了很多资料,经过组员的讨论,最终确定了现在这个方案。在焊接的过程中,根本上没出什么问题,一切都很顺利的进展着。在编写程序以及调试的过程中出现了一些问题,比方:当有水流过时,传感器多计数的脉冲达不到我们设计时的要求,所以经过了屡次修改,最终实现了功能。在整个过程中要特别感丁文斌教师的指导,没有他耐心的指导,我们是不会做的这么好的。参考文献1 菁,基于单片机水流量控制系统方案的研究。20079。2 楼然苗,51系列

25、单片机设计实例. 航空航天大学,2003。3 铁力、关振海等.传感器及其接口技术M.,1998.4 肖晴,液晶显示流量的控制,20052。5 谭浩强,C程序设计(第二版). 清华大学. 1999年12月第2版1. 原理图2 实物图3 仿真图4 元器件清单元器件名称型号数量个单片机STC89C511水流传感器探头DS18B201液晶显示器LCD16021晶振11.0596MHZ1电阻500欧2电阻1K1电阻4.7K1电阻10K1瓷片电容22pF2瓷片电容0.1uF2电解电容20uF2电解电容100uF1发光二极管红色1发光二极管黄色2发光二极管绿色1电源接口5V1拨头开关1按键3总计255.程序

26、*include*define uchar unsigned char*define uint unsigned intsbit DQ=P10; /ds18b20与单片机连接口sbit RS=P11;sbit RW=P12;sbit EN=P13;sbit p37=P36; /流量正常运行接口sbit p36=P37; /温度报警接口sbit p14=P14; /功能按键接口sbit p15=P15;sbit p16=P16;uchar code table=0*30,0*31,0*32,0*33,0*34,0*35,0*36,0*37,0*38,0*39,0*20; /0-9数字和显示无 u

27、nsigned long int a;float f,zong;uint tvalue;uchar n1,n2,n3,n4,n5,n6,n7,n8,n9;uchar tflag,d,g,kai,j,j1,j2,b; /*延时子程序*/void delay(uint z) int *,y; for(*=z;*0;*-)for(y=120;y0;y-); /*延时1us子程序*/ void delay_18B20(unsigned int i)/延时1微秒 while(i-); /*液晶显示写指令*/ void wr_(unsigned char ) /写指令 delay(1); /延时1ms R

28、S=0; /写命令设置 RW=0; /并行数据的读写 EN=0; /使能为0 P2=; /输入命令 delay(1); /延时1ms EN=1; /使能为1 delay(1); /延时1ms EN=0; /使能为0 /*液晶显示写数据*/void wr_dat(unsigned char dat)/写数据 delay(1); /延时1ms RS=1; /写数据设置 RW=0; /并行数据的读写 EN=0; /使能为0 P2=dat; /输入数据 delay(1); /延时1ms EN=1; /使能为1 delay(1); /延时1ms EN=0; /使能为0/*水流量计算程序与数据转换程序*/

29、void loop () uint zong1; if(g=0) /判断时间是否到 zong=(b/0.1)+zong; /得出总流量的后三位 g=1; /将标志为为1if(zong=1000) /判断总流量后三位是否大于1000a+; /总流量前六位加1zong=0; /后三位清零 if(a=1000000) /总流量前六位大于1百万a=0; /总流量前六位清零zong1=(int)zong ; /总流量后三位转换为整形 n9=a/100000; /总流量9位全局部配n8=a%100000/10000;n7=a%10000/1000;n6=a%1000/100;n5=a%100/10;n4=

30、a%10;n3=zong1%1000/100;n2=zong1%100/10;n1=zong1%10; /*流量程序*/ void liuliang() while(d=2) /时间到. d=0; /d清零 b=TH0*256+TL0; /读取频率 TH0=0*00; /计数器清零 TL0=0*00; g=0; /时间标志位 loop(); /水流量计算程序与数据转换程序 /*第一页显示子程序*/ void display1() wr_dat(0*3a); /显示: wr_(0*80+0*40); /水流量t显示 wr_dat(0*46); wr_dat(0*4c); wr_dat(0*4f)

31、; wr_dat(0*57); wr_dat(0*3a); wr_dat(0*20); wr_dat(tablen9); wr_dat(tablen8); wr_dat(tablen7); wr_dat(0*2e); /显示小数点 wr_dat(tablen6); wr_dat(tablen5); wr_dat(tablen4); wr_dat(0*20); /显示小数点 wr_dat(0*74); wr_dat(0*20); /*第二页显示子程序*/ void display2() wr_dat(0*3a); /显示: wr_dat(tablej2);wr_dat(0*2e);wr_dat(

32、tablej1);wr_dat(0*5c);wr_dat(0*2f);wr_dat(0*74);wr_dat(0*20);wr_(0*80+0*40+5);/水流量kg显示wr_dat(0*20);wr_dat(0*20);wr_dat(tablen4);wr_dat(0*2e); /显示小数点 wr_dat(tablen3);wr_dat(tablen2);wr_dat(tablen1);wr_dat(0*20);wr_dat(0*6b);wr_dat(0*67); /*控制流量测量的开关程序*/ void kaiguan1() if(p14=0) /按键按下.delay(2);if(p14

33、=0) delay(2); p36=p36; /P3.6取反TR0=TR0; /TR0取反while(p14=0);/按键松开 /*界面切换开关程序*/ void kaiguan2() if(p15=0) /按键按下. delay(2); if(p15=0) delay(2); kai=kai; /P3.6取反 while(p15=0);/按键松开. /*程序初始化*/void lcd_init ()TMOD=0*15; /设定定时器0为计数功能,定时器为1为定时功能TH1=(65536-50000)/256;/定时器1赋出值50msTL1=(65536-50000)%256;TH0=0*00

34、; /定时器0赋初值0次TL0=0*00;EN=0; /液晶使能端为0wr_(0*38); /液晶初始设置wr_(0*0c);wr_(0*06);wr_(0*01);wr_(0*40);wr_dat(0*06); /写CGRAM写字模wr_dat(0*09);wr_dat(0*09); wr_dat(0*06); wr_dat(0*00);wr_dat(0*00);wr_dat(0*00);wr_dat(0*00); zong=0; /总流量带小数点EA=1; /开启总中断ET1=1; /开启定时器1中断TR1=1; /开启定时器1TR0=0; /开启计数器0 p16=1; /p16为1p15

35、=1 ; /p15为1 p14=1; /p14为1 zong=0; /总流量的后三位赋初值a=0; /总流量的前六位赋初值j=20; /水价赋初值j2=2; /水价个位赋初值j1=0; /水价小数位赋初值kai=0;/*主程序*/void main() lcd_init(); /初始化显示 while(1) kaiguan1(); /控制水流量的测量 kaiguan2(); /控制显示界面 liuliang(); /流量测量 if(kai=0) /判断界面开关是否按下display1(); /显示第一页界面else /kaiguan3(); /判断水价开关是否按下 display2(); /显示第二页界面 /*定时器1中断*/ void time1() interrupt 3 TH1=(65536-50000)/256;/定时器1初值定时50msTL1=(65536-50000)%256;d+; /20ms后d加1 . z.

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号