单片机的中断分别是FCPU与FHOSE啥分别

单片机(李朝青)课后习题答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
单片机(李朝青)课后习题答案
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩15页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢当前位置: >>
钻井工程参数测量系统的设计
本科生毕业设计(论文)摘要进入 21 世纪以来,石油是不可缺少的能源之一,随着国民经济的迅速发展, 对地下开采石油量的需求不断增长,现代钻井技术有了新的发展,本文主要研究 钻井工程中各个参数的测量。 传统的钻井设备体积庞大、不易安装、输出信号一般为模拟信号,测量精度 不高、实时性差、出现故障也不易排除,因此给钻井工作带来了巨大的隐患;本 文将在钻井过程中使用双 CPU 系统测量各个参数,因为各个参数的信号是模拟信 号,需要一个 CPU 一直采集读取,而 CPU 还有显示跟打印的功作,所以避免测量 误差,采取更为方便的 CPU 测量系统,一个是事务处理 CPU,另一个是测量处理的 CPU,双 CPU 都是使用 AT89S52 型单片机对各参数进行控制,井深的测量是使用了 称重传感器跟绞盘编码器一起来进行测量,钻压扭矩的测量也是采用了比较实用 的应变片测量方法。 本文的优点就是利用双 CPU 系统来工作,应变发法测量钻压扭矩,方便快捷 的实现了各个参数的测量。 关键字:单片机;钻压;钻井;扭矩;监测 关键字I 本科生毕业设计(论文)AbstractIn the 21 century, the oil is one of the indispensable energy, as the national economy of the rapid development of underground mining, the amount of oil rising demand, modern drilling technology is a new development, so this paper is mainly drilling engineering research in the measurement of each parameter. The traditional drilling equipment huge volume, not easy installation, the output signal is commonly analog signals, measurement accuracy is not high, the real-time failure, not easy also ruled out, so give drilling wo and This paper will be a drilling process using dual CPU system parameter measurement, because each parameter is the signal of the analog signal, need a CPU has been gathering, and the CPU and read with the work that print, so avoid measurement errors, take a more convenient CPU measurement system, is a transaction processing CPU, the other is a measurement processing CPU, double CPU are the use of various parameters of AT89S52 SCM control, well depth measurement is used together with the winch encoder weighing transducer to make the measurement, the measurement of drilling pressure torque is used more practical measurement method of the strain gauge. The advantages of this paper is to use the system to work, twin CPU strain measurement hair drilling pressure torque, convenient and quick to realize the measurement of each parameter. Key word: SCM; D monitoringII 本科生毕业设计(论文)目录第1章 绪论 ................................................................................................................................... 11.1 钻井工程技术发展的背景 ........................................................................................... 1 1.2 国内外钻井技术的发展概况 ...................................................................................... 1 1.3 自动控制技术在钻井中的应用 .................................................................................. 2 1.4 本文研究的内容 ............................................................................................................. 2 第 2 章 方案论证 ............................................................................................................................ 4 2.1 方案论证 ........................................................................................................................... 4 2.2 测量井深原理.................................................................................................................. 4 2.3 测量钻压原理.................................................................................................................. 5 2.4 测量扭矩的原理 ............................................................................................................. 6 2.5 现有钻压扭矩测量技术比较 ...................................................................................... 7 2.6 整体框图 ........................................................................................................................... 8 2.7 CPU 的选型 ....................................................................................................................... 8 第 3 章 硬件系统设计 ................................................................................................................... 9 3.1 主机及其最小系统的设计 ........................................................................................... 9 3.1.1 单片机最小系统 ................................................................................................ 11 3.2 数据存储芯片选择....................................................................................................... 13 3.3 键盘输入接口设计....................................................................................................... 15 3.5 打印机的设计................................................................................................................ 16 3.5 显示器的设计................................................................................................................ 17 3.6 测井仪与通信接口电路设计 .................................................................................... 18 3.7 测量 CPU 系统设计....................................................................................................... 19 3.8 大钩悬重传感器 ........................................................................................................... 19 3.9 A/D 转换 .......................................................................................................................... 20 3.10 绞盘编码器 .................................................................................................................. 21 3.12 钻压扭距传感器 ......................................................................................................... 23 3.13 PWM 控制........................................................................................................................ 24 第 4 章 软件设计 .......................................................................................................................... 26 4.1 测量 CPU .......................................................................................................................... 26 4.2 事物处理 CPU ................................................................................................................. 26 4.3 测量 CPU 说明及主流程 ............................................................................................. 27 4.3.1A/D 转换说明及流程图 .................................................................................... 28 4.4 事务处理 CPU 说明及主流程图 ................................................................................ 29 4.4.1 DS12887 说明及流程图 .................................................................................. 30 4.4.2 LCD240128A 说明及流程图 ........................................................................... 30 4.4.3 键盘设计流程图............................................................................................... 32 4.4.4 下位机通信流程图 ........................................................................................... 33 4.4.5 W29C040 存储器说明及流程图 .................................................................... 34III 本科生毕业设计(论文)4.4.6 TPμP―40 打印机说明及流程图 ................................................................ 35 第 5 章 总结 ................................................................................................................................... 37 参考文献 .......................................................................................................................................... 38 致谢 ................................................................................................................................................... 39 附录Ⅰ .............................................................................................................................................. 40 附录Ⅱ .............................................................................................................................................. 57 附录Ⅲ .............................................................................................................................................. 59IV 本科生毕业设计(论文)第1章1.1 钻井工程技术发展的背景绪论在经济全球化的大背景下,结合当前国际石油背景,全球油价的居高不下, 引起世界各国对石油勘探开发热潮,对钻井的要求越来越高,钻井的工作量也越 来越大。这也为我国高端的钻井技术的发展提供了一个很好机遇,并产生了巨大 的推动作用。从我国的情况来看,西部地区石油资源近 70%埋藏在深部地层。东 部地区浅层和中深层的勘探程度较高,深部地层尚有 50 多亿吨的石油储量可供 勘探。中部地区是天然气富集区,有超过一半的天然气资源量在深部地层,所以 未来我国的勘探开发潜力主要在深层,必须靠深井和超深井进行勘探开发。而且 深井、超深井钻井技术是一个国家钻井技术水平的重要标志之一。目前我国的钻 井技术还不是特别的先进,有很多还没有克服的难题,比如钻井过程中的上喷下 漏等出现的复杂情况。所以设计出一个实时性高,精确度高的测量井深、钻压等 参数的系统是很有必要的。1.2 国内外钻井技术的发展概况钻井技术从上世纪末至今已经历了经验钻井、科学化钻井、自动化智能钻井 3 个发展阶段。美国、西欧等西方等发达国家一直处于钻井技术的前沿,完成了 大批超深井、高难度定向井、水平井、径向井、分枝井。与之相配套的各种工艺 技术,如化学处理剂应用开发。冶金铸造技术、工具设计制造、精密仪器的研制 加工等都有了长足的进步,从而有力推动了地球科学、石油工业及其他有关行业 的发展。 目前美国 Intelliserv 公司设计出了一个有缆钻杆, 即所谓的智能钻杆。 他的主要特点是数据传输高速、大容量、实时:真正的实现了双向通信;适用于 包括欠平衡钻井、气体钻井在内的任何井况下的数据传输。长期以来,勘探钻井 需要使用陆地钻机或海上钻井平台,还要使用钻杆、泥浆、套管和水泥,势必造 成勘探钻井费用居高不下,勘探风险很大。要想从根本上降低勘探钻井费用和勘 探风险, 就必须摒弃现行的钻井方式, 另辟蹊径, 开发一种完全不同的钻井方式。 挪威的獾式钻探器公司正在研制的獾式钻探器正是这种崭新的钻井方式。 獾式钻 探器是一种无钻机的井下自动钻探机,长约 25 米,设计钻深能力超过 3000 米。1 本科生毕业设计(论文)它的主要特点就是不用陆地钻机或海上钻井平台, 可大幅度减少作业人员和后勤 保障工作,还能避开海洋环境对钻井作业的干扰;显著降低勘探钻井费用和勘探 风险;实现远程控制和自动化钻井等。目前我国研制出多参数随钻测井系统,该 系统是集钻井、测井和油藏工程技术为一体,并且该系统可以同时测量仪器周围 的侧向环形电阻率、方位电阻率以及方位自然伽马等地层地质参数,以及无线随 钻测量系统测量的井斜、方位、工具面等井眼工程参数。1.3 自动控制技术在钻井中的应用近几年,国产电驱动钻机发展迅速,控制水平从早期的模拟控制上升到目前 国际流行的典型三级控制,既上位监控级、PLC 过程控制级、全数字级构成通信 网络。我国石油钻机在标准化水平、技术制造水平及研究开发能力、产品质量和 品种等方面有了较大的提高和发展,自动控制技术在钻机上的应用已达到 20 世 纪 90 年代中期国际钻机先进水平,电传动系统达到美国 20 世纪 90 年代第四代 产品水平。钻机自动控系统所用的元器件的关键件仍是采用优良的原装进口件, 大部分元器件采用了合资企业生产的产品,控制系统性能参数基本稳定可靠。自 动控制技术在机械驱动清醒钻机主机上的使用, 成熟技术主要有电子控制汽油喷 射装置、电子控制自动变速器、大钩限重级天车防碰自动控制系统、电子司钻、 电视监控系统。电子控制汽油喷射装置不仅能稳定、可靠,而且价格比同类普通 产品要低,值得推广。电子控制自动变速器由机械系统、液压系统、气压系统、 电气控制系统组成。 大钩限重及天车防碰自动控制系统广泛用于各类钻机。 在中、 大型电驱动石油钻机上已有应用,但此系统在轻型电驱动钻机上还从没有配置 过。电子司钻广泛应用于所有钻机,主要由高精度调节阀、电磁阀、高性能的计 算机系统、高级的 HMJ 设备构成,它可以提供可靠高效的钻机控制。电子司钻在 复杂的钻井过程和钻井条件下,可根据不同地质结构,在保证钻压恒定的情况下 提供最大的钻井速率,比人工司钻可节约大约 37%的钻井时间。电视监控系统不 管是机械驱动钻机还是电驱动钻机,都可以配该系统。它采用新型先进的摄像机 和监视器,并配有温度控制、压力控制、空气过滤器等设备,以满足恶劣环境使 用和防爆要求。1.4 本文研究的内容本文主要是研究勘探一个油井时所测量的诸多参数, 如测量井深, 测量钻压, 测量扭矩等参数。在测量井深的时候需要准确地测量出钻杆的数量、大钩距离钻 杆的距离、钻杆的单根长度,再根据公式:钻井深度=钻杆数量×单根钻杆长度2 本科生毕业设计(论文)大钩距地面高度 来测量出井深,具体的各个钻杆参数会在后面具体测量,测量 钻压主要是应用应变片法来测量的钻头附近所受压力, 扭矩的测量方法跟钻压的 大致相同,也是利用应变片来测量的,后面会提到具体的测量公式。本文主要采 用的是双 CPU 的方法测量各个参数的,具体要知道各个 CPU 的选型,每个 CPU 都是怎么去工作的,都有什么优点,而且测量还需要各个传感器来测量参数,有 大钩悬重传感器,钻压扭距传感器,要确定每个传感器的选型,跟测量的大小范 围、优点等。事务处理的 CPU 还要连接存储器,LCD 显示器,键盘,实时时钟, 打印机,所以要研究每一个芯片的选型跟作用和优缺点。3 本科生毕业设计(论文)第 2 章 方案论证2.1 方案论证由于本文测量了一个小型的油井,但是也要有 1000 米左右的深度,不能只 用一个钻头就能实现工作的,所以本设计选择了一些器件,有绞盘编码器,大钩 悬重传感器等。为了准确测量井深和钻压扭矩,井深测量必须一直监视大钩悬重 信号和绞盘的编码器信号。编码器信号是数字信号,可以采用中断方式接收,但 悬重信号是模拟信号,必须由 CPU 一直采样测量并监视。在仪器运行过程中,还 有一些信号需要 CPU 及时相应,如打印机送数据、LCD 显示状态的查询、键盘的 处理、管理计算机通信的响应等。显然,当 CPU 结构响应其他工作请求时,就有 可能漏掉对悬重信号的监测。为此,本设计还采用了双 CPU 结构,一个 CPU 负责 测量,一个 CPU 负责事物处理。 在传感器选择方面,由于在钻井的过程中,由于要用到很多根钻杆,尤其是 在提升钻杆的过程中,大钩要吊起地下所有钻杆的重量,因此悬重传感器的量程 需要很大,但另外一方面当钻杆数量很少时,增加或减少一根钻杆可能会引起很 小的变化,这就需要悬重传感器有很高的精度,统计钻杆数量关键是检测到当前 是在增加或是在减少钻杆,而增加或减少钻杆又是由大钩的位置和悬重确定的, 若大钩的载荷为零,说明钻杆被卡座卡住,要进行增加、减少钻杆的操作。若大 钩载荷变为零时大钩的位置在井架的底部,表明要增加一根钻杆;因此大钩更多 情况下是检测载荷是否为 0,因此这就要求悬重传感器有足够的精度能检测到一 根钻杆的变化。2.2 测量井深原理由于井深大约有几千米深, 不可能像机械加工那样用一根钻头完成钻井工作 全过程。 2.1 是钻井系统结构示意图。 图 实际的钻井动力驱动机构有绞盘、 大钩、 多节钻杆和钻头组成。在向下钻探的过程中,当钻杆下降到卡座位置时,大钩与 钻杆脱离, 向上提升到一钻杆的高度, 接入一根钻杆, 再将大钩与钻杆重新连接, 继续向下钻探一根钻杆的深度。如此反复,可完成几百、上千米的钻井任务。因 此,钻井深度的测量公式为: 钻井深度=钻杆数量×单根钻杆长度-大钩距地面高度 (1-1)4 本科生毕业设计(论文)绞盘大钩钻杆卡座钻头图2.1钻井系统结构示意图当需要向上提升钻头时,有大钩向上提升出一根完整的钻杆,然后由井架底 部的卡座加紧地下的其他钻杆和钻头,这时候就可以将地面上的钻杆移去。地面 上的钻杆移去后,大钩向下运动,与卡座夹住的钻杆连接,再松开卡座,于是又 可向上提升钻头。重复这一过程就可以把地下很深的钻头提升到地面。 从式(1.1)可以看出,测量井深的关键在于统计井下钻杆的数量。因为工作 现场的特殊性,更换钻杆的数量不能由人工输入到计算机,只能由测量仪器自动 判断。 由于钻井过程复杂, 在实际操作过程中会出现多次加钻杆、 减钻杆的操作。 因此准确判断增加、减少钻杆的操作是确保统计井下钻杆数量的关键。根据上面 介绍,可以通过大钩的位置和载荷来判断是否在进行增加、减少钻杆的操作:若 大钩的载荷为零,说明钻杆被卡座卡住,要进行增加、减少钻杆的操作。若大钩 载荷变为零时大钩的位置在井架的底部,表明要增加一根钻杆;若大钩载荷变为 零时大钩的位置在井架的上部,表明要移去一根钻杆。 大钩与绞盘上的绞绳相连接,绞盘转动控制绞绳的收放,从而实现大钩的升 降。在一台特定的井架中,绞盘的直径 D,绞绳的直径、每层能缠绕的圈数是固 定的。因此,通过测绞盘的转动圈数与转动位置,即可测量出大钩的实际高度。2.3 测量钻压原理钻压测量,实际上就是对作用于钻头上方的集中力进行测量,常用应变测试 法。测量钻压时,工作应变片贴在需要测量载荷的弹性元件上,温度补偿应变片 贴在不产生应变的其他地方,用来进行温度影响的校正和偏移的校正,要求两类5 本科生毕业设计(论文)应变片有相同的环境温度和散热条件, 温度补偿应变片贴在和需要测量载荷的弹 占: ε 2 =0。性元件材料相一致的材料上测量,工作应变片应变 ε 1 = ε ,温度补偿应变片应变 为了使偏心载荷引起的弯曲应变力更加平均地被消除, 常常串联更多的应变 片,在相对 180°的两个面上沿着弹性元件的轴线,分别贴了两片工作应变片 Rl 和 R2,两片温度补偿应变片 R3 和 R4 在不产生应变的垂直于轴线的方向上。在 Rl 和 R2 中,由钻压应力产生的电阻变化大小相等、符号相同,而由弯曲应力产 生的电阻变化大小相等、符号相反,这样,形成了全桥四应变片测量方法,使用 的两个纵向应变片和两个横向应变片采用全桥接法,如图 2.2 所示。+ (1 ? ? )ε2图2.2 钻压测量原理示意图根据弹性元件界面所受的作用力等于元件的截面面积和应力乘积的关系, 轴 向力的计算公式为:P = σ ? A = ε ? A? E =εcKEA(2-2)式中:P 一弹性元件界面所受的作用力,N;σ 一应力,Pa;A 一弹性元件截面面积, m ; E 一弹性模量,Pa。 根据所测轴向力的大小,就可以得到钻压。22.4 测量扭矩的原理为了排除弯曲应力的干扰,在测量扭矩时,采用全桥四应变片法,应变片 R1,R3 与轴线成 45°粘贴,应变片 R2,R4 与轴线成 135°粘贴。以 Rl,R2 为 例,当弹性元件两端有拉压力作用时,沿轴线方向的应变为 ε ;垂直于轴线方向6 本科生毕业设计(论文)的应变为 ? ?ε ;在与轴线成 45°方向上的应变为+ (1 ? ? )与轴线成 135°方向 2 上的应变也为此值, 既在与轴线成 45°和 135°方向上 R1 和 R2 内产生的应变大 小相等、符号相同。当弹性元件承受弯曲时,轴的表面也受到拉压应变,在 R1 内和 R2 内产生的应变大小相等、符号相同,这种布片方案也可以排除弯曲应力ε的干扰。R3,R4 的受力情况和 R1,R2 相似。再根据扭矩的计算公式就可以计算 出扭矩了。2.3 扭矩测量原理2.5 现有钻压扭矩测量技术比较目前有代表性的钻压扭矩测量技术仍是法国石油研究院与斯伦贝谢公司的 两类专利技术,其他技术或多或少是基于这两个专利进行改进的,下面分析这些 测量技术的优缺点。 法国石油研究院和贝克休斯公司的专利就是基本的拉压、 扭矩测量原理加上 不同结构的井下仪器保护套、不同的测量电路与传感器连接方式。这两个专利共 同的缺点是保护套与传感器部分的密封比较困难, 特别是在井下钻铤的工作过程 中,由于弯矩的作用常常会使泥浆侵入传感器部分而导致测量电路无法正常工 作,为此贝克休斯公司在保护套与传感部分、转换电路的密封方面开展了大量的 工作,一定程度地解决了该问题。 斯伦贝谢和 APS 公司对该技术进行了进一步的改进, 通过在钻铤径向钻一定 直径、一定深度的孔,将应变片粘贴在钻孔内,然后用高压密封盖板将应变片密 封在内部,应变片的电极引线通过钻孔之间的内部连接通道进行互连,最后与安 装在钻铤中间的抗压筒内或者安装在钻铤壁槽内的测量电路相连。 二者的共同 点是解决了保护套的密封问题,不同之处在于径向孔的布置方式、应变片引线的 连接方式及其与二次转换电路的连接方式等方面&。这种技术的缺点也很明显: 首先是内部引线孔加工比较困难,往往需要分别加工,然后再焊接到一起,或者 采用特制工具进行加工;其次是由于径向孔的直径不能太大,给应变片的粘贴造 成了很大困难;第三,这种传感器的测量特性也表现出一定的非线性,必须经过7 本科生毕业设计(论文)地面刻度与校验之后才能应用于实际的测量当中。 本文测量钻压扭矩的方法就是采用了应变片粘贴的方法来测量的。2.6 整体框图打印机 LCD 显示器 键盘接口 实时时钟 串行通信接口 事务处理 CPU信息交换接口大钩悬重 传感器测量处理 CPUPWM钻压扭矩传感器 绞盘 图2.4 系统的整体框图2.7 CPU 的选型CPU 有很多型号, 例如 AT89S51、 AT89S52 等, AT89S52 单片机是一种低功耗、 CMOS8 位微控制器,具有 8K 在系统可编程 FLASH 存储器,使用 Atmel 公司高密 度非易失性存储器技术制造, 与工业 80C51 产品指令和引脚完全兼容。 片上 FLASH 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编程 FLASH,使用 AT89S52 为众多嵌入式控制应用系统提供高 灵活。超有效的解决方案。所以两个 CPU 都选用 AT89S52,现在两种单片如何实 现通信,由于两个 CPU 都是地面且距离很近,所以就直接通过引脚 RXD(P3.0, 串行数据接收端)和引脚 TXD(P3.1,串行数据发送端)实现两个 CPU 之间的通 信。8 本科生毕业设计(论文)第 3 章 硬件系统设计硬件电路设计包括主机及其最小系统的设计,传感器的选型,显示器存储器 的选型等。3.1 主机及其最小系统的设计在本设计中事物处理 CPU 和测量 CPU 都采用的是 ATMEL 公司生产的 AT89S52 单片机作为下位机节点的微处理器。AT89S52 是一个 8k 字节可编程 EEPROM 的高性能微控制器。具有内存较大,功能强,抗干扰能力强、软硬件 资源都比较丰富等特点,其外围接口电路简单,具有很高的性价比,成本低,其 价格仅是 DSP 的五分之一,而且它经过多年的发展,技术也相当的成熟。它与 工业标准 MCS-51 的指令和引脚兼容,因而是一种功能强大的微控制器,它对很 多嵌入式控制应用提供了一个高度灵活有效的解决方案。AT89S52 的引脚如图 3-1 所示:IC1 1 2 3 4 5 6 7 8 13 12 INT0 15 14 VCC 31 19 18 9 17 16 P1 .0 P1 .1 P1 .2 P1 .3 P1 .4 P1 .5 (MOSI) P1 .6 (MISO) P1 .7 (SCK) P3 .3 (INT1) P3 .2 (INT0) P3 .5 (T1) P3 .4 (T0) EA/VPP XTAL1 XTAL2 RST P3 .7 (RD) P3 .6 (W R) AT89 S52 (AD0)P0 .0 (AD1)P0 .1 (AD2)P0 .2 (AD3)P0 .3 (AD4)P0 .4 (AD5)P0 .5 (AD6)P0 .6 (AD7)P0 .7 (A8 )P2.0 (A9 )P2.1 (A1 0)P2.2 (A1 1)P2.3 (A1 2)P2.4 (A1 3)P2.5 (A1 4)P2.6 (A1 5)P2.7 VCC GND (RXD)P3.0 (TXD)P3 .1 ALE/PROG PSEN 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 P0 .0 P0 .1 P0 .2 P0 .3 P0 .4 P0 .5 P0 .6 P0 .7P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.740 VCC 20 10 11 30 ALE 29图3.1 AT89S52引脚图AT89S52 具有以下标准功能:8K 字节 FLASH,256 字节 RAM,32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至 0HZ 静态逻辑操作,支持 2 种软件可选择节点模式。空闲模式下,CPU 停止工作,9 本科生毕业设计(论文)允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内 容被保存,振荡器被冻结,单片机一切停止工作,直到下一个中断或硬件复位为 止。 AT89S52 性能简介: 1) 主电源引脚 VCC 接电源端。GND 是接地端。 2) XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2: 来自反向振荡器的输出。 3) RST:复位输入。当振荡器复位器件时,要保持 RST 脚两个机器周期 的高电平时间 4)ALE/ P :当访问外部存储器时,ALE(地址锁存允许)的输出电平用于 锁存地址的低位字节。在 FLASH 编程期间,引脚用于输入编程脉冲。在平时, ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。因此它 可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据 存储器时,将跳过一个 ALE 脉冲。如想禁止 ALE 的输出可在(SFR)8EH 地址 置 0。此时,LE 只有在执行 MOVX,MOVC 指令是 ALE 才起作用。另外,引 脚被略微拉高。如果微处理器在外部执行外部程序时,该设定禁止 ALE 位无效。 5) RD / WR :外部程序存储器的读选通信号。由外部程序存储器取指期间, 每个机器周期两次 有效。但在访问外部数据存储器时,这两次有效的信号将不 出现。 6) EA /VP:外部访问允许端。当保持低电平时,则在此期间外部程序存储 ,不管是否有内部程序存储器。注意加密方式 1 时, 将内 器(0000H~FFFFH) 部锁 RESET;当端保持高电平时,此间内部程序存储器。在 FLASH 编程期间, 此引脚用于施加 12V 编程电源(VPP) 。 7)P0 端口(P0.0~P0.7):P0 口为一个 8 位漏级开路双向 I/O 口,每个引脚 吸收 8 个 TTL 门电流。当 P0 口的管脚第一次写 1 时,被定义为高阻输入端。P0 能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。 8)P1 端口(P1.0~P1.7):P1 口为一个内部上拉电阻的 8 位双向 I/O 口,P1 口的缓冲器可接收,输出 4 个 TTL 门电流,当 P1 口被写“1”时,其管脚被内 部上拉电阻拉高,且作为输入。并因此作为输入时,P1 口的管脚被外部拉低, 将输出电流。这是由于内部上拉的缘故。 9)P2 端口(P2.0~P2.7):P2 口为一个内部上拉电阻的 8 位双向 I/O 口,P2 口缓冲器可接收,输出 4 个 TTL 门电流,当 P2 口被写“1”时,其管脚被内部 上拉电阻拉高,且作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将 输出电流。这是由于内部电阻上拉的缘故。P2 口当用于外部程序存储器或 16 位10 本科生毕业设计(论文)地址外部数据存储器进行存取时, 口输出地址的高八位。 P2 在给出地址“1”时, 它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2 口输出其 特殊功能寄存器的内容。 口在 FLASH 编程和校验时接收高八位地址信号和控 P2 制信号。 事物处理 CPU 系统以 AT89S52 单片机为核心构成。详细说明如下各小节介 绍。3.1.1 单片机最小系统单片机最小系统包括两部分,复位系统和时钟系统。因为本设计两个 CPU 都是选用的 AT89S52,所有两个 CPU 的最小系统是一样的。 在该系统里,复位系统有外部硬件复位和内部看门狗复位两种,外部复位采 用按键复位方式,具体电路说明如下: 上电后,电源对对电容进行充电,此时电阻 R1 中有电流通过,通过电阻 R1 的钳位作用,使 RST 端一直维持高电平,即处于复位状态;当电容充满电后, 由于供电电压是直流,所以电路中此时没有电流流过,处于断路状态,复位输入 端 RST 为低电平,复位结束。 当按键 S0 被按下时,电阻 R1 中有电流通过,电阻 R1 的钳位作用,使 RST 端一直维持在高电平,即处于复位状态;当按键 S0 被松开时,电阻 R1 中没有 电流通过,处于断路状态,RST 引脚的电平与地一致,IC1 1 2 3 4 5 6 7 8 13 INT1 VCC S0 C2 C1 10 uF 30 pF R1 2K C3 1 30 pF 17 16 Y1 12 MHz 19 18 9 15 14 VCC 2 31 INT0 12 P1 .0 P1 .1 P1 .2 P1 .3 P1 .4 P1 .5 (MOSI) P1 .6 (MISO) P1 .7 (S CK) P3 .3 (INT1) P3 .2 (INT0) P3 .5 (T1) P3 .4 (T0) EA/VP P XTAL1 XTAL2 RST P3 .7 (RD) P3 .6 (W R) AT89 S52 (AD0)P0 .0 (AD1)P0 .1 (AD2)P0 .2 (AD3)P0 .3 (AD4)P0 .4 (AD5)P0 .5 (AD6)P0 .6 (AD7)P0 .7 (A8 )P 2.0 (A9 )P 2.1 (A1 0)P2.2 (A1 1)P2.3 (A1 2)P2.4 (A1 3)P2.5 (A1 4)P2.6 (A1 5)P2.7 VCC GND (RXD)P 3.0 (TXD)P3 .1 ALE/PR OG PSEN 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 40 20 10 11 30 293.2 复位系统时钟系统与单片机接线此时复位结束,这就构成了按键复位电路。由于单片机复位需要 RST 引脚上至11 本科生毕业设计(论文)少出现 10ms 的高电平,通过公式 T=RC,计算出图中的 R、C 的值(复位时间 为 20ms)符合要求,取 R=10K,C=47uf。 内部看门狗复位是通过软件将看门狗启动起来,它有一定的复位时间,当单 片机死机时,看门狗就会将单片机复位,从而解决这一问题;需要注意的是,当 启动看门狗之后,需要定时喂狗,如果不喂狗,看门狗就会定时将单片机复位, 使系统无法工作。 系统的时钟有内部时钟和外部时钟两种方式,这里采用外部时钟,即由晶振 来产生,采用的晶振频率为 12MHZ 由于 MCS-51 一般晶振的选择范围为 1-24MHZ,但是单片机对时间的要求比较高,能够精确的定时一秒,所以也是为 了方便计算选择 12MHZ 的晶振。如下是单片机的最小系统电路实时时钟。 井深仪需要记录各类时间发生的时间,因此在仪器中需要有实时时钟芯片, 设计中选择了 DS12887。DS12887 是 DALLAS 公司制造的并行接口实时时钟芯 片,具有日历时钟、报警时钟、实时时钟功能,内部带有 114 字节不易失性静态 RAM,目前在单片机系统中得到广泛的应用。U? 18 19 ALE 17 20 R D 21 WR22 C S 23 SOW AS IRQ RST DS R/W CS DS12 887 MOT AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 R CLR 16 IC1 5 6 7 8 9 10 11 12 15 C LKRS T 1 2 3 4 5 6 7 8 13 INT0 12 C LKRS T 15 CS 14 VCC 31 19 18 9 P1 .0 P1 .1 P1 .2 P1 .3 P1 .4 P1 .5 (MOSI) P1 .6 (MISO) P1 .7 (S CK) P3 .3 (INT1) P3 .2 (INT0) P3 .5 (T1) P3 .4 (T0) EA/VP P XTAL1 XTAL2 R ST P3 .7 (RD) P3 .6 (W R) AT89 S52 (AD0)P0 .0 (AD1)P0 .1 (AD2)P0 .2 (AD3)P0 .3 (AD4)P0 .4 (AD5)P0 .5 (AD6)P0 .6 (AD7)P0 .7 (A8 )P 2.0 (A9 )P 2.1 (A1 0)P2.2 (A1 1)P2.3 (A1 2)P2.4 (A1 3)P2.5 (A1 4)P2.6 (A1 5)P2.7 VCC GND (RXD)P 3.0 (TXD)P3 .1 ALE/PR OG PS EN 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 40 20 10 11 30 29VCCRD 17 WR 16图3.3 DS12887与单片机接线12 本科生毕业设计(论文)使用 DS12887 时需要注意以下几点: VCC 正常情况下为 5V,当 VCC 降至 4.25V 时,所有的输入被忽略,输出 为高阻状态, VCC 降至 3V 时, 外部电源被关断, 内部锂电池为实时时钟和 RAM 供电,在断电情况下,时钟继续运行,其中的数据可保存十年以上不会丢失。3.2 数据存储芯片选择钻井过程中要记录的数据有当前日期、 时间、 累计工作时间、 累计空闲时间、 当前井深等。考虑到有其他数据,如显示点阵数据、系统校正参数等,设计方案 中选择 Winbond 公司的 W29C040。W29C040 是单 5V 供电、CMOS 工艺、容量 为 512K×8bit 的 EEPROM。 数据可保存 10 年, 是单片机系统中理想的数据保存 芯片。W29C040 采用 DIP40 封装。其引脚排列如图 3.4 所示。U1U2 P1 0 P1 1 P1 2 P1 3 P1 4 P1 5 P1 6 P1 7 P2 0 P2 1 P2 2 P2 3 P2 4 P2 5 P2 6 P0 0 M0 M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 M12 M13 M14 M15 D0 D1 D2 D3 D4 D5 D6 D7 DQ0 DQ1 DQ2 DQ3 DQ4 DQ5 DQ6 DQ7 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 M0 M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 M12 M13 M14 M15PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB0 PB1 PB2WR RD CE M18 M17 M16AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 IC0 IC1 CI WR RD CE0 P0 3 P0 2 P0 1 SPBA01 BWR RD CE M18 M17 M16WE OE CE A18 A17 A16W2 9C040图3.4 W29C040电路图W29C040 的读操作与普通 RAM 和 ROM 的操作方法相同。但芯片的擦除、 编程、 写保护等操作需要用特定的命令来实现。 这些命令其实就是以特定的顺序, 向 W29C040 特定的地址单元写特定的内容。 W29C040 常用的命令格式见表 3.1。13 本科生毕业设计(论文) 表3.1 W29C040常用命令表 命令 第 0 次写 (5555H) 启动写保护 关闭写保护 整片擦除 准备读芯片 ID 退出读芯片 ID AAH AAH AAH AAH AAH 第 1 次写 第 2 次写 第 3 次写 (5555H) 第 4 次写 (2AAAH) 第 5 次写 (5555H)(2AAAH) (5555H) 55H 55H 55H 55H 55H A0H 80H 80H 80H F0HAAH AAH AAH55H 55H 55H20H 10H 60H欲启动 W29C040 的写保护功能,需连续向 W29C040 写入 3 个命令字节, 其中第 1 个字节为 AAH(写入 5555H 单元) ;第 2 个字节为 55H(写入 2AAAH 单元) 第 3 个字节为 A0H ; (写入 5555H 单元) 在写命令过程中, 。 5555H、 2AAAH 单元并不存放写入的内容(AAH、55H), W29C040 能够自动把写入的数据解释 为命令信息,不进行数据存储处理。 在向 W29C040 写数据时,应注意以下事项: 1)W29C040 的写操作以页为基本单元,必须写入一整页的数据。若该页的 某些单元未写入数据,数据固化时会将这些单元的内容自动填为 0FFH。一页为 256 字节,由地址总线的 A7~A0 寻址。 2)写入数据时,应将一页的内容写完,芯片内部固化结束后再写其他页。 因此,在写一页数据时,地址总线 A18~A8 不能变化。 3)一页数据的写入不分先后顺序,可以重复写入。 4)当两次写数据的时间间隔超过 200μs,或从 W29C040 读取数据,都意 味着数据写入结束。此时 W29C040 内部开始固化数据,不再接收写入的数据, 若连续两次读出数据的 D6 位不同,则说明正在固化,若相同,则说明固化已结 束。 5)启动了写入保护的 W29C040 不能直接写数据。每次写页面数据时必须 先启动写保护,然后紧接着写入数据。数据写入结束、芯片固化后,若还要写入 数据,则必须再次启动写保护,然后紧接着写入数据。因此,启动写保护命令也 是一个允许数据写入的命令。若关闭了写保护,则每次可直接写入数据。为了数 据的安全,一般在使用 W29C040 时都应启动写保护。14 本科生毕业设计(论文)3.3 键盘输入接口设计本设计中的键盘采用的是独立式键盘,独立式键盘具有结构简单,使用灵活 等特点。 键盘是由若干个机械触点开关构成的,把它与单片机的 I/O 口线连起 来,通过读 I/O 口的电平状态,即可识别出相应的按键是否被按下,如果按键不 被按下,其端口就为高电平;如果相应的按键被按下,则端口就变为低电平。在 这种键盘的连接方法中,我们通常采用上拉电阻接法,即各按键开关一端接低电 平,另一端接单片机 I/O 口线并通过上拉电阻与 VCC 相连。这是为了保证在按 键断开时,各 I/O 口线有确定的高电平,当然,如果端口内部已经有上拉电阻, 则外电路的上拉电阻可以省去。 通常用来做键盘的按键有触点式和非触点式两种, 单片机中应用的一般是由 机械触点构成的触点式微动开关。这种开关具有结构简单,使用可靠的优点,所 有我们选用这种类型的开关。但当按下按键或释放按键的时候它有一个特点,就 是会产生抖动,这种抖动对于人来说是感觉不到的,但对单片机来说,则是完全 可以感应到的,因为计算机处理的速度是在微秒级的,而机械抖动的时间至少是 毫秒级,对计算机而言,这是一个很长的时间。VCC10 K 10 K 10 K10 K S1 SW -P B S2PB4 PB5S3 SW -P BPB6SW -P B S4PB7SW -P B图3.5 键盘电路图15 本科生毕业设计(论文)3.5打印机的设计打印机内部有 CPU,端口有锁存功能。因此只需要按接口时序和数据格式要求,依次向打印机发送数据和打印命令即可。本设计中,打印机接口信号用 CON3 的 DB25 插座连接, 单片机监视打印机的 ACK、 BUSY 信号, 其中的 ACK 连接到单片机的 INT 1 ,根据实际要求既可用查询方式,也可用中断方式来实现单 片机与打印机的联络。因此设计方案选用 TP?P―B40 型打印机。 TPμP 系列打印机是智能点阵式针式串行击打式打印机, 打印机内部有一个 8031 单片机对打印机进行控制。内有 448 个打印字符、40 条 ESC/P 兼容的打印 命令,可实现诸如字符图形的放大、打印格式的设置、打印方式的选择等多种功 能,并提供了硬汉字库打印的相关命令,可在机内安装多达 600 个 16×16 点阵 的汉字,只要接收标准的内机交换码,即可打印出漂亮的汉字。必须把打印控制 TP?P―40 才能打印。 打印机命令由一个命令字节和若干个 命令送给 TP?P―40, 参数字节组成。 TP?P―B40 与计算机接口: 可以用扁平电缆通过打印机背面的 20 芯插座与主计算机连接起来。20 芯插 座各插孔的排列和名称如图 3.2 所示。3.2 TPμP―40打印机插座孔排列 2 GND STB 4 GND DB0 6 GND DB1 8 GND DB2 10 GND DB3 12 GND DB4 14 GND DB5 16 GND DB6 18 ACK DB7 20 ERR BUSY图 3.6 是 TP?P―40 打印机与单片机 89S52 接口电路。按图中接法,错误命 令信息 ERR 采用查询方式读取。忙信号 BUSY 用于请求中断,也可以采用查询 方式。89S52 执行输出指令时 STB 为低,把命令写入 TP?P―40,执行输入指令 把 ERR 读入累加器。WR P2.7 RD P0.7STB ERR DB7 DB6 DB0 BUSY GND打 打 打图3.6 TPμP―40与AT89S52接口16 本科生毕业设计(论文)3.5显示器的设计对液晶显示器控制包括显示控制、复位与亮度调节。电路中采用 CON4 实现信号连接。液晶显示器的 C / D 接到单片机的地址线 A0,这样奇数地址传递控 制指令,偶数地址传递数据。液晶显示器的复位信号与 DS12887 共用,上电复 位时间要比单片机的复位时间长。 上电后单片机应过一段时间再对液晶显示器进 行初始化。 考虑现场显示的参数多,为便于用户操作,设计方案选用汉字提示,配备了 LCD240128A 液晶显示器。其液晶驱动控制器采用 T6963A。 LCD240128A 具有尺寸小、功耗小、可靠性高、成本低等优点、可显示各种 图形与文本信息,因此在电子仪器中得到广泛的应用。它热致液晶 STN 型图形 点阵式显示模式,它由 STN 型液晶板、液晶显示控制器、液晶驱动器、背光板 有 可显示 16 点阵汉字 15×8 个, 组成, 整屏尺寸为 114×104mm, 240×128 点, 亦可显示各种图形。因此,在智能式电子仪器中,LCD240128A 可用来作为显示 器,以显示各种图形和文字信息。 T6963A 内部含有共 128 字节的字符发生器 CGROM,可外接 8k(最大为 128k) 字节的 RAM 作为外部的显示缓冲区及字符发生器 CGRAM, 并允许 MPU 访问显示缓冲区,甚至还可进行位操作。 根据 T6963A 的特性设计出的 LCD240128A 模块与 AT89S52 单片机的接口 电路如图 3.7 所示。IC1 1 2 3 4 5 6 7 8 13 12 15 14 31 19 18 9 17 16 P1 .0 P1 .1 P1 .2 P1 .3 P1 .4 P1 .5 (MOSI) P1 .6 (MISO) P1 .7 (SCK) P3 .3 (INT1) P3 .2 (INT0) P3 .5 (T1) P3 .4 (T0) EA/VPP XTAL1 XTAL2 RST P3 .7 (RD) P3 .6 (W R) AT89 S52 (AD0)P0 .0 (AD1)P0 .1 (AD2)P0 .2 (AD3)P0 .3 (AD4)P0 .4 (AD5)P0 .5 (AD6)P0 .6 (AD7)P0 .7 (A8 )P2.0 (A9 )P2.1 (A1 0)P2.2 (A1 1)P2.3 (A1 2)P2.4 (A1 3)P2.5 (A1 4)P2.6 (A1 5)P2.7 VCC GND (RXD)P3.0 (TXD)P3 .1 ALE/PROG PSEN 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 P0 .0 P0 .1 P0 .2 P0 .3 P0 .4 P0 .5 P0 .6 P0 .7 P0 .0 P0 .1 P0 .2 P0 .3 P0 .4 P0 .5 P0 .6 P0 .7 Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 D7 D6 D5 D4 D3 D2 D1 D0 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 RD WR VCC RST VCC 40 VCC 20 10 11 30 ALE 29 P2 3 2 1 P2 .6 VCC CE OE PGM VPP LCD240 128 D0 VOUT D1 D2 D3 VEE D4 D5 VSS D6 D7 NC RD FG WR CWD VDD CE RST FSOEGP2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.774 LS3 73ALEP2 .0 P2 .1 P2 .2 P2 .3 P2 .4 P2 .5VCC图3.7 LCD240128模块与AT89S52单片机的接口电路17 本科生毕业设计(论文)在图 3.7 中,AT89S52 单片机作为控制液晶模块 MPU,扩展的 16k 字节 EPROM27128 用于存放 16 点阵汉字的字模数据。也可以看出液晶模块的控制指 令端口为 4001H, 数据端口为 4000H, 可通过电位器 R2 来调整液晶的显示效果。 2)控制命令 T6963A 的指令格式为:数据 1+数据 2+指令字节,有的指令只含有一个数 据或根本就没有数据。LCD240128A 模块选择的是单屏结构,每行最大为 80 个 字节,总行数为 16 的显示模式。3.6测井仪与通信接口电路设计由于管理计算机无特殊要求,测井仪与管理计算机的通信选用了 RS232 标准,本设计直接选用了 MAX232 接口芯片。MAX232 是一种非常通用的芯片, 单电源双 RS232 发送/ 接收器。 适用于 该芯片是 MAXIM 公司生产的低功耗、 各种 EIA -232E 和 V. 28/ V. 24 的通信接口。MAX232 芯片内部有一个电源电 压变换器, 可以把输入的 + 5V 电源变换成 RS - 232C 输出电平所需 ±10V 电 压, 所以采用此芯片接口的串行通信系统只要单一的+5V 电源就可以。 MAX232 外围需要 4 个电解电容 C5、C6、C7、C8, 是内部电源转换所需 C9 电容。 其取值均为 1μF/25V1 宜选用钽电容并且应尽量靠近芯片。 为 0. 1μF 的去耦电容。MAX232 的引脚 T1IN、T2IN、R1OUT、R2OUT 为接 TTL/ CMOS 电平的引脚。引脚 T1OUT、T2OUT、R1IN、R2IN 为接 RS - 232C 电平的引脚。 因此 TTL/ CMOS 电平的 T1IN、T2IN 引脚应接 AT89C52 的串行发送引脚 TXD; R1OUT、R2OUT 应接 MCS - 51 的串行接收引脚 RXD1 与之对应的 RS -232C 电平的 T1OUT、T2OUT 应接 PC 机的接收端 RD ; R1IN、R2IN 应 PC 机的发送 端 TD。VCC C9 10uFPORT7 1 6 2 7 3 8 4 9 5 DB9 C5 10uF R2 R3 1K 1K 13 8 11 10 1 3C6 10uFC7 10uF 12 9 14 7 4 5P3-B1R1 IN R2 IN T1 IN T2 IN C1+ C1 IC4V+ VVCC2 6 16R1 OUT R2 OUT T1 OUT T2 OUT C2+ C2 -P3-B0GNDMAX232 15C8 10uF图3.8 MAX232接口电路18 本科生毕业设计(论文)MAX232 硬件接口电路如图 3.8 所示。 选用其中一路发送/ 接收 1R1OUT 接 MCS - 51 的 RXD, T1IN 接 MCS - 51 的 TXD1T1OUT 接 PC 机的 RD, R1IN 接 PC 机的 TD1 因为 MAX232 具有驱动能力,所以不需要外加驱动电路。3.7测量 CPU 系统设计测量 CPU 系统也是以 AT89S52 单片机构成的,前面已经介绍过,这里不再说明。3.8大钩悬重传感器由于在钻井的过程中, 由于要用到很多根钻杆, 尤其是在提升钻杆的过程中,大钩要吊起地下所有钻杆的重量,因此悬重传感器的量程需要很大,但另外一方 面当钻杆数量很少时,增加或减少一根钻杆可能会引起很小的变化,这就需要悬 重传感器有很高的精度,而且由于前面介绍,统计钻杆数量关键是检测到当前是 在增加或是在减少钻杆,而增加或减少钻杆又是由大钩的位置和悬重确定的,若 大钩的载荷为零,说明钻杆被卡座卡住,要进行增加、减少钻杆的操作。若大钩 载荷变为零时大钩的位置在井架的底部,表明要增加一根钻杆;若大钩载荷变为 零时大钩的位置在井架的上部,表明要移去一根钻杆。因此大钩更多情况下是检 测载荷是否为 0,因此这就要求悬重传感器有足够的精度能检测到一根钻杆的变 化。综合考虑上述要求,本设计选用了 BHR-4 系列油井专用负荷传感器,该传感 器采用全封焊的结构,DIN 电气接头联接形式,能有效地保证在抽油井测试系统 中全天候工作,做到完全防水防潮,具有产品结构紧凑、优越的稳定性、可靠性 等特点。该系列传感器采用空心圆柱体应变筒和剪切式结构作为弹性敏感元件, 具有结构简单,应变测量可靠等特点,有一定的抗冲击振动稳定性,有优良的静 态性能和良好的动态性能,广泛应用于石油钻井场合。 由于传感器输出信号比较微弱,所以传感器的输出应接上放大电路。本设计 所用到的放大器是高集成运放 ICL7650,ICL7650 高精度、低漂移运算放大器是 美国公司投入市场的高性能第四代运算放大器: CMOS 工艺, 开关电容斩波方式 使其前置放大的分辨率可以小于 10?V;能自动检测放大器的失调电压和共模引 起的漂移,并自动动态校零;它的输入失调电压极低,在整个工作电压范围只有 ±1?V; 失调电压温漂仅 0.01?V/C; 共模抑制比达 130DB, 单位增益带宽达 2MHz。 其中 ICL7650 的 1 号和 2 号引脚分别接一电容到 8 号引脚上,目的是为了补偿 自动调零。4 号和 5 号引脚分别为差动信号的-、+输入端,10 号引脚为输出端, 本电路的连接是用差分比例放大器,放大倍数为 100,输出接电容滤波电路,后19 本科生毕业设计(论文)经可调电阻分压,将合适的电压信号传输给 A/D 转换电路。悬重传感器信号放 大电路如图 3.9 所示。10 0K B T1 1K ICL765 0 B HR -4B 1K 10 0K 0.1u F 0.1u f 56 0nF 10 0K图3.9 悬重传感器信号放大电路图3.9 A/D 转换在综合井深测量系统中,深度系统是最重要的部分,离开了深度系统仪器大 部分参数都将失去意义, 而在深度系统中, 大钩高度的测量是最基本、 最关键的。 大钩悬重信号是判断增加、减少钻杆的重要依据。当钻杆数量较少时,钻杆的总 量相对大钩自身的重量而言较小,增加活减少钻杆时悬重信号的变化量小.又由 于悬重信号是模拟量信号,要转换成数字量信号,使用了 MAX191A/D 转换器。 1) MAX191 的器件特性 由于井深仪位于办公室,大钩在钻井现场,为使系统的可靠性好、抗干扰能 力强,大钩悬重传感器送出的信号在现场经放大后再传输给井深测量系统。送到 井深的悬重信号为 0-5V,可直接接人 A/D 转换器信号输入端。根据钻井过程中 悬重信号的测量要求,设计方案选择 MAX-IMX191 型 A/D 转换器。它是 12 位 的 A/D,同时具有并行和串行接口,7.5μS 数据获取时间,采用速度最高可达到 100kHz。MAX191 可以单 5V 供电,也可以±5V 双电源供电,可接收单极性或 双极性信号。MAX191 采用 DIP24 封装。 2)MAX191 的内/外部时钟电路 MAX191 含有内部时钟电路, CLK 和 DGND 之间连接 120PF 的电容, 在 可 以产生 1MHz 的内部时钟,在 MAX191 的 CLK/SCLK 引脚上也可以连接 100kHz~1.6MHz 的外部时钟源。 3)MAX191 的内部参考及其内部参考的外部补偿电路 通过在 VREF 和 AGND 之间连接一个 4.7μF 的电解电 MAX191 在工作时,20 本科生毕业设计(论文)容,然后该电容再并联一个 0.1μF 的无极电容,将在 VREF 端产生 4.096V 的参 考电压,在实际工作时,为了根据需要而适当改变 VREF 端的输出参考电压,可 以采用内部参考的外部补偿电路进行调节,通过调节补偿电路中电位器 R2 的数 值, 改变 VREF 端的输出电压, 得到所测信号范围的满刻度读数, 外部补偿电路。 在这种方式下, 4.7μF 的电容能够补偿参考输出放大器, 以达到最大的转换速度 和最小的转换噪声。U4 VSS R D C LK C S B IPHBEN AGNDD7 R EF D6 VREF D5 AIN- D4 AIN+ D3 DGNDD2 VDD D1 PAR D0 B US Y PD MAX1 91图3.10 A/D电路图47 uF 0.1u F 5V47 uF5V 0.1u FRD P2.5 P2.1VCC 0.1u FP2.03.10 绞盘编码器由于绞盘位置与大钩高度有关,为准确测量绞盘的位置,设计方案中采用编 码器作为测量部件。编码器是一种测量圆周位置的通用部件,测量时将编码器的 轴与绞盘的轴相连,绞盘每转动一周,编码器输出 n 个脉冲,相当于把圆周位置 分成了 N 份。 根据测量要求, 可以选择适当 n 值规格的编码器, 最多可达 36000。 根据钻井实际情况,绞盘尺寸 D0 =1000mm,绞绳直径 d=300mm。在钻井过程 中绞盘缠绕绞绳不超过 5 层,即最外层的绕线周长为: C5≈π(D0+4.5d)=3.14(×300)=7379mm (3-1)根据实际精度要求,现选用 n=100 线的编码器,经过倍频后每周可得到 200 个脉冲,即 400 个脉冲上升、下降沿,通过作用的接口电路或处理软件,大钩的 高度测量精度可达到: ≈20mm 可以满足实际测量的要求。 编码器产生的信号有 A、B 两相脉冲信号和一组零位信号 Z,信号间的时序21(3-2) 本科生毕业设计(论文)关系如图 3.10 所示。当编码器轴正转时,A 相信号比 B 相信号超前 90°;编码 器轴反转时,A 相信号比 B 相信号,该信号的频率是 A(B)信号频率的 2 倍。图3.11 编码器信号时序图由于编码器在井架上,而井深仪位于办公室,二者的距离远,信号传输过程 中干扰大。因此采用电流驱动方式,在仪器内还采用光隔对编码器信号进行隔离 处理,电路如图 3.11 所示。VCCR1 22 0编编编P2.6图3.12 编码器接口示意图光耦选择了 6N137 光耦合器,它是一款用于单通道的高速光耦合器,其内 部有一个 850 nm 波长 AlGaAs LED 和一个集成检测器组成,其检测器由一个光 敏二极管、高增益线性运放及一个肖特基钳位的集电极开路的三极管组成。具有 温度、电流和电压补偿功能,高的输入输出隔离,LSTTL/TTL 兼容,高速(典型 为 10MBd), 5mA 的极小输入电流。 6N137 光耦的特性: ①转换速率高达 10MBit/s; ②摆率高达 10kV/us;③扇出系数为 8;④逻辑电平输出;⑤集电极开路输出; 工作参数:最大输入电流,低电平:250uA 最大输入电流,高电平:15mA 最22 本科生毕业设计(论文)大允许低电平电压(输出高):0.8v 最大允许高电平电压:Vcc 最大电源电压、输 出:5.5V 扇出(TTL 负载):典型应用:高速数字开关,马达控制系统和 A/D 转 换等。3.12 钻压扭距传感器扭距传感器选用的是 KR―803 系列的传感器, 它就是采用应变片电测技术, 在弹性轴上组成应变桥,向应变桥提供电源即可测得该弹性轴受扭的电信号。将 该应变信号放大后,经过压/频转换,编程与扭应变成正比的频率信号。此传感 器输出的方波幅度可选 5V/12V。开机 5 分钟即可进入工作状态,无需预热过程。 检测精度高、稳定性好、抗干扰性强。不需要反复调零即可连续测量正反扭矩。 体积小、重量轻、易于安装。扭矩精度:<±0.5 % F? S、<±0.3 % F? S、 <±0.1 % F? S。 图 3.12 表示钻压扭矩传感器 1 与上部连接钻铤 2、抗压筒和测量电路 5 等 连接在一起时的整体结构示意图。 其中:传感器 1 用来粘贴测量钻压和扭矩的 应变片,应变片引线通过导线孔引入安装在抗压筒 5 中的扭矩测量桥路、 单片 机电路;引线孔通过高压密封盖板 4 进行密封。 图 3.12 中上下两幅剖面图分别 表示井下工程参数测量单元的两个相互垂直的整体剖面图,图 3.12 中的另一个 剖面图 3 清楚地表明了抗压筒连接处的泥浆通道,图 1 中的 4 是引线孔密封盖 板。钻钻钻钻编钻钻钻钻钻1k C1 3u F10 k A 8 2 7 C1 3u F 7 1k 850 k A 2B T1 12 V1k扭扭钻钻编钻钻钻50 k A 8 2 7 C1 3u F 7 1k 850 k A 2B T2 12 VC1 3u F图3.13 钻压扭矩传感器电路图23 本科生毕业设计(论文)正常钻井情况下,钻压扭矩测量值相对平稳,由单片机记录存储钻井过程中 的钻压扭矩值,用于起钻回放后的钻井过程分析当钻压扭矩测量值异常时,通过 井下水力脉冲发生器将实时测量值传送到地面监控系统,供钻井人员来决策参 考。图3.14 传感器平面展示正常钻井情况下,钻压扭矩测量值相对平稳,由单片机记录存储钻井过程中 的钻压扭矩值,用于起钻回放后的钻井过程分析当钻压扭矩测量值异常时,通过 井下水力脉冲发生器将实时测量值传送到地面监控系统,供钻井人员来决策参 考。3.13 PWM 控制H 形控制电路在控制方式上分双极式、单极式、和受限单极式三种,本设计 采用了双极式可你的 PWM 控制电路。 它是由四个大功率晶体管和四个续流二极 管组成的,四个大功率管分为两组,V1 和 V4 一组,V2 和 V3 为另一组。在基 极驱动信号 Ub1=Ub4,Ub2=Ub3=―Ub1 的作用下,同一组中的两个晶体管同时 导通或同时断开,两组晶体管之间交替地轮流导通和截止。由于允许电流反向, 所以双极式工作时电枢电流始终是连续的。 双极式可逆 PWM 控制电路的可逆性由正、负脉冲电压的宽窄而定。当正脉 冲宽度大于周期的一半时,电枢两端的平均电压为正,电动机正转;当小于周期 一半时,平均电压为负,电动机反转;当等于周期一半时,电动机停转。24 本科生毕业设计(论文)VCC VCC R2R120 0VDD 10 K R3 20 0Ub1 VD2 V1 VD1 V2 + A -Ub2P2.7Ub3 V3 VD3VD4 Ub4 V4图3.15 PWM控制电路25 本科生毕业设计(论文)第 4 章 软件设计4.1 测量 CPU程序入口地址:0000H 外部中断0入口:0003H 定时器0中断入口:000BH 外部中断1入口地址:0013H 定时器中断入口地址:001BH 串行口中断入口地址: A 口: (cs=P2.0=0,A1A0=P2.1P2.2=00)0000H~5FFCH B 口: (cs=P2.0=0,A1A0= P2.1P2.2=01)0001H~5FFDH (cs=P2.0=0,A1A0= P2.1P2.2=10)0002H~5FFEH C 口: 控制口: (cs=P2.0=0,A1A0= P2.1P2.2=11)0003H~5FFFH W29C040地址:6000H-78FFH AD 转换地址:78FFH-7FFFH4.2 事物处理 CPU程序入口地址:0000H 外部中断0入口:0003H 定时器0中断入口:000BH 外部中断1入口地址:0013H 定时器中断入口地址:001BH 串行口中断入口地址:0023H 打印机:6000H-65FFH DS12887:65FFH-72FFH LCD240128 : 文 本 区 H 图 形 区 H 自 定 义 字 符 区 7800H-7FFFH26 本科生毕业设计(论文)4.3 测量 CPU 说明及主流程开始 各模块初始开中断参数实时检测读取 A/D 转悬重是否为 0 Y N 当前大钩在顶端吗 Y钻压扭矩值 是否超限 NPWM 电机调控 N Y 钻杆数量加 1 Y 钻杆数量减 1 计算钻压扭矩 值 在底端吗计算井的深度显示钻井状态 给事务处理 CPU 通信 图 4.1 测量 CPU 流程图程序开始对所有模块进行初始化并定义变量,设定钻压和扭矩上下限值,开27 本科生毕业设计(论文)中断,实时监测所测量的 3 个参数,经 A/D 转换送入单片机处理并判断大钩状 态和钻压扭矩是否超限,如果钻杆数量增加 1,就开始计算井的深度,如果钻压 扭矩值超过上限,PWM 控制电机转速减缓,如果超过下限,PWM 控制电机转 速加快,并实时显示这三个参数的状态,将测量的结果送给处理 CPU。4.3.1A/D 转换说明及流程图A/D 转换结果的读进采用查询方式。通过查询 MAX191 的 BUSY 真个信号 来判定转换是否结束; 位的转换结果需要两次读取, 12 然后拼接成 12 位的结果。 假如为了使外部干扰的影响减小可采用软件滤波。对于信号一般来说是缓变的, 可采用一阶滞后滤波或中值均匀滤波等。图 4.2 A/D 转换流程图28 本科生毕业设计(论文)4.4 事务处理 CPU 说明及主流程图读取钻压扭矩数据否数据是否超 限是4.3 事务处理流程图29 本科生毕业设计(论文)程序开始对所有模块进行初始化并定义变量,检测是否有测量 CPU 通信过 来的信息,如果有的话就读取三个参数的状态,判断井深测量值是否比上次测量 多 1 米并判断钻压扭矩值是否超限,随即显示三个测量值,当需要打印时,能打 印出结果。4.4.1DS12887 说明及流程图进入主程序后,DS12887 首先进行初始化设置,若串行口有数据,最后则条 用函数从日历时钟芯片获取日历时钟信息, 调用显示函数显示日历时钟信息显示 出来,重复进行。这部分包括 DS12887 某个单元写、读 DS12887 某个单元的内 容和 DS12887 设定时间。开始DS12887 初始 化调用函数获取时钟信息送数据显示图 4.4 DS12887 流程图4.4.2LCD240128A 说明及流程图显示程序首先判断信息是否已被采集;若无则等待或处理其它程序;然后判 断行号是否大于 8,若大于 8 则清 2-8 行,保留第一行,设置行号等于 2;然后 根据状态信号判断采集到的数据是对应于哪一种状态做相应处理, 各种工作状态 时对应的文字信息如“正向运行”等应在编程时就存入其对应的区位码,程序运 行通过查表得具体工作状况时的文字信息对应的区位码。 汉字和数据显示子程序 是主程序的重要部分,它们要解决的关键问题是在得到汉字的区位码后到存储器30 本科生毕业设计(论文)中哪个位置去找到字符的点阵字模数据,以及正确给出每个字节点阵字模数据应 送到的缓冲器地址,使汉字在屏上对应位置显示。N CLLECT=1 Y COLLECT=0 Y 行号+1&8? 清 2-8 行;行号 N 根据行号查表得显示位置的起始地址STATE&#0FH=STATESTATE=00 STATE=01H 查表得“正向运行”两个字的区位STATE=06H调汉字显示子程序计算第一个参数显示位置的地址调数据显示子程序计算第二个参数显示位置的地址调数据显示子程序 图 4.5 LCD240128A 流程图31 本科生毕业设计(论文)4.4.3 键盘设计流程图键盘的操作,无论是案件或键盘都是利用机械触点的合、断作用。由于机械 触点的弹性作用,在闭合及断开瞬间均有抖动过程,会出现一系列负脉冲。抖动 时间的长短,与开关的机械特性有关,一般为 5~10ms。 案件的稳定闭合期,由操作人员的按键动作所确定,一般为十分之几秒到几 秒的时间。为了保证 CPU 对键的一次闭合,仅做一次键输入处理,必须去除抖 动影响。 通常去除抖动影响的措施有硬、软件两种,这里所采用的是软件措施,采用 软件去除抖动影响的办法是: 检测到有键按下时, 执行一个 10ms 的延时程序后, 再确认该键点评是否仍保持闭合状态电平, 如保持闭合状态电平则可确认确实有 键按下,从而消除了抖动的影响。按键子程序入口S1 键 是否按下NN S2 键 是否按下 S3 键 是否按下NS4 键 是否按下NY 延时 10ms 消抖Y 延时 10ms 消抖Y 延时 10ms 消抖Y 延时 10ms 消抖S1 键 是否按下NN S2 键 是否按下 S3 键 是否按下NS4 键 是否按下NY 执行 S1 按键程序Y 执行 S2 按键程序Y执行 S3 按键程序Y 执行 S4 按键程序N S1 键 是否释放 S2 键 是否释放N S3 键 是否释放N S4 键 是否释放NYYYY图 4.6 键盘流程图32 本科生毕业设计(论文)4.4.4 下位机通信流程图AT89S52单片机具有多机通信功能。串行口工作在方式2、方式3均可实现通 信。串行控制寄存器SCON中的SM2和TB8、RB8相配合可以完成主从式多机通信。 主从式多机通信中, 一台是主机, 其余为从机, 从机要服从主机的调度和支配. 多 机通信协议: 1)所有从机的SM2=1,处于只接收地址帧的状态。东南大学工程硕士学位论 文 2)主机向从机发送一帧地址信息,其中包括8位地址,且第9位为l,表示发 送的是地址,中断所有从机。 3)从机接收。在多机通信时,一个为主机,其他为从机,所有从机的SM2都 必需置1。主机首先发送一帧地址数据,中断所有从机。从机接收到地址后,判 断主机发送地址是否为本机地址,若是本机地址,则将SM2清零,进入正式通信 状态,把本机的地址发送回主机作为应答信号,然后开始接收主机发来的数据或 命令信息。其他从机由于地址不符,其SM2=l保持不变,不与主机通信,从中断 返回。中断服务程序接受或发送接受接受 接收地址地址或数据 Y接受是否结束 N 是否和本机一致 接收校验码 接收数据 令 SM2=0、TB8=0 是否正确 N 回送错误信号Y发送数据回送地址一致信号回送正确信号返回 图 4.7 键盘流程图33 本科生毕业设计(论文)4)主机接收从机发回的应答地址信号后,与其发送的地址信息进行比较,如 果相符,则使 TBS=O,正式发送数据;如果不符,则发送错误信息。 5)通信的各机之间必须以相同的帧格式及波特率进行通信4.4.5W29C040 存储器说明及流程图W29C040 为 32 脚 DIP 封装芯片,工作电压为 5V,内部 512K×8 位的快速 闪存,它的结构为 256 字节为一页,没页的擦写时间为 5ms,整片擦除时间为 50ms。去掉写保护流程图片擦除流程图将数据“AA”写入 地址“5555”中将数据“AA”写入 地址“5555”中将 数 据 “ 55 ” 写 入 地 址 “2AAA”中将 数 据 “ 55 ” 写 入 地 址 “2AAA”中将数据“80”写入 地址“5555”中将数据“80”写入 地址“5555”中将数据“AA”写入地址 “5555”中将数据“AA”写入地址 “5555”中将数据“55”写入地址 “2AAA”中将数据“55”写入地址 “2AAA”中将数据“20”写入地址 “5555”中将数据“10”写入地址 “5555”中等待 10ms等待 50ms退出退出34 本科生毕业设计(论文)页写流程图 将数据“AA”写入地 址中“5555”中写结束判断流程图按字节编程/扇区擦写 初始化将 数 据 “ 55 ” 写 入 “2AAA”中读取字节将数据“AO”写入地址 “5555”中 否读取相同字节DQ6 匹配? 连 续的写入 总计 256 字节的页面数据 是 写完成等 待 10ms 或 toggle/polling 已经完成退出图 4.8 存储器流程图4.4.6TPμP―40 打印机说明及流程图STB 为数据选通触发脉冲,上升沿时读入数据,为输入到打印机的信号。 ACK 是回到脉冲, “低”电平表示数据已被接受而且打印机准备好接受下一个数 据,此信号为打印机输出。35 本科生毕业设计(论文)并行接口操作Y BUSY 有效吗? N 发送数据发送 STBACK 有效吗? N Y N 数据发完吗?Y 结束图 4.9 打印机流程图36 本科生毕业设计(论文)第 5 章 总结随着工业技术的发展,科技的发达,石油作为原材料的地方越来越多,国家 对石油资源是很重视的。根据在石油的开采过程中需要实时掌握钻井的状态,本 文深入研究了测量井深的仪器。可以显示钻井的深度,记录钻井过程中的操作状 态。还具有掉电保护功能。在设计过程中我还使用了 DALLAS 公司制造的实时 时钟芯片,具有报警时钟等功能。本设计的重点是准确测量大钩的高度和换钻杆 的过程,不仅及时显示还要对数据进行处理,当 CPU 相应其他工作请求时,就 有可能漏掉信号的监测,所以在设计时要选用了两个 CPU,事物处理 CPU 和测 量 CPU 都采用了 AT89S52 系列单片机为核心,完全实现了智能化工作。 该系统与过去井深测量系统相比,具有经济性好,可靠性高,应用广泛等优 点,这是过去的井深测量系统所不能比拟的。当然,系统中也存在很多不足之处 一是由于对各个危险信号的特征认识不足,阐述时会有些漏洞;二是本人对汇编 语言的掌握程度有限,程序设计方面可能存在个别问题。这些都是有待于进一步 学习和研究的。 虽然技术和工艺的发展, 使组成的智能仪器系统的每一个器件具有高度的可 靠性和稳定性,由于井深测量系统运作环境的多样性,不可避免有干扰问题的存 在。目前在智能仪器系统中,主要从硬件和软件两个方面考虑抗干扰的问题。其 中,接地、屏蔽、去耦、以及软件抗干扰等是抑制干扰的主要方法。 在设计中,工作接地是为了保证系统稳定可靠地运行,防止地环路引起干扰 而采取的防干扰措施。 由于在测量系统中进行数据采集时,需要对信号进行输入处理。其中,利用 A/D 转换为常用的方式,二模拟量的接地问题也是很重要的。当输入 A/D 转换 器的模拟信号较弱时,模拟地的接法尤为重要,为了提高抗共模干扰能力,我在 设计中采用三线采样双层屏蔽浮地技术,就是将地线和信号线一起采样,这样的 双层屏蔽技术是抗共模干扰很有效的办法。 在汇编语言时,结合我的程序流程框图为各个主、子程序插入软件陷阱,并 在系统运行中加以调试、调整,也收到了良好的软件抗干扰效果。37 本科生毕业设计(论文)参考文献[1]卢胜利.智能仪器设计与实现[M].重庆:重庆大学出版社,2006. [2] 胡乾斌.单片微型计算机原理与应用[M].华中科技大学出版社,2007. [3] 张进秋.可编程控制器原理及应用实例[M].机械工业出版社,2004. [4] 王福瑞.单片微机测控系统设计大全[M].北京:北京航空航天大学出版社,2008. [5] 何立民.单片机应用技术选编(1)[M].北京:北京航空航天大学出版社,2009. [6] 付 惠 生 . 液 晶 显 示 器 的 多 级 驱 动 . 工 业 仪 表 与 自 动 化 装 置 [M]. 机 械 工 业 出 版,2006. [7]腾召胜.智能检测协调与数据融合[M].北京:机械工业出版社,2006. [8] 张毅坤.单片微型计算机原理及应用[M].西安:西安电子科技大学出版社,2008. [9] 何希才主编.传感器及其应用电路[M].电子工业出版社,2006. [10] 童诗白,华成英. 模拟电子技术[M].(第三版).清华大学出版社,2007. [11] William Stallings. DATA &COMPUTER COMMUNICATIONS (Six Edition), Higher Education Press Pearson Education. [12] 凌 志 浩 . 智 能 仪 表 原 理 与 设 计 技 术 [M]( 第 1 版 ) . 华 东 理 工 大 学 出 版 社,2009.7. [13] 谈振藩. 电气自动化专业英语[M].哈尔滨:哈尔滨工程大学出版社,2008. [14] 李广弟.单片机基础[M].北京:北京航空航天大学出版社,2009.38 本科生毕业设计(论文)致谢本设计在导师杨汇军教授的悉心指导和严格要求下业已完成,论文从选题、 实验、方案论证到具体设计和调试,导师都给予了精心的指导和极大的帮助 可 以说论文中的每一个字都倾注了先生的心血、导师渊博的学识、严谨的治学、态 度和一丝不苟的工作作风使我受益匪浅。同时,还教我做人的道理无不凝聚着杨 汇军导师的心血和汗水,在四年的本科学习和生活期间,也始终感受着导师的精 心指导和无私的关怀,我不胜感激。在此向导师表示深深的感谢和崇高的敬意。 从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我 无言的帮助,在这里请接受我诚挚的谢意!39 本科生毕业设计(论文)附录Ⅰ#include&reg51.h& #include&stdio.h& //NULL 的引用 #include&intrins.h& #include&ABSACC.H& //XBYTE[]的引用 #define uc unsigned char #define uchar unsigned char #define uint unsigned int #define lcmcom XBYTE[0x3fff] /*T6963C 写命令口的地址,读数据口的地址*/ #define lcmdata XBYTE[0x3eff] /*T6963C 写数据口的地址*/ #define SCLK P1.1 //MAX191 时钟 #define SDOUT P1,2 //MAX191 数据输出 #defiRe CS P1.3 //MAX191 片选 xdata uchar seconds _at_ 0x0000; //秒寄存器地址 xdata uchar minutes _at_ 0x0002; //分寄存器地址 xdata uchar hours _at_ 0x0004; //时寄存器地址 xdata uchar day _at_ 0x0006; //星期寄存器地址 xdata uchar date _at_ 0x0007; //日期寄存器地址 xdata uchar month _at_ 0x0008; //月寄存器地址 xdata uchar year _at_ 0x0009; //年寄存器地址 xdata uchar com_a _at_ 0x000A; //A 寄存器地址 xdata uchar com_b _at_ 0x000B; //B 寄存器地址 xdata uchar com_c _at_ 0x000C; //C 寄存器地址 xdata uchar com_d _at_ 0x000D; //D 寄存器地址//顺时针//逆时针 uc start, //停止 uc key_value,a,Tcount, uc ge,shi,bai,qian,i,samp, uc code seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uc buf[10]; uchar code table[]; uchar code picture0[]; uchar code picture1[]; uchar a=0; uchar b=0; uchar i=0; uchar j=8; uint showword=0; sbit ch451_dclk=P1^6; sbit ch451_din=P1^5;40 本科生毕业设计(论文) sbit ch451_dout=P3^2; sbit ch451_load=P1^7; sbit dat=P1^0; //74HC164 数据脚 sbit clk=P1^1; //74HC164 时钟脚 sbit clr=P1^5; //DS12887 请 RAM 引脚 sbit a=P1^2; //a.b,c 为 74HC138 的输入引脚,输出为 DS12887 的片选引脚 sbit b=P1^3; sbit c=P1^4; sbit PWM=P3^7; sbit text=P3^6; sbit text1=P3^5; uchar sec,min, uchar b_d[6]={0}; uchar table[11]={0x88,0xeb,0x4c,0x49,0x2b,0x19,0x18,0xcb,0x08,0x09,0xff}; //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 灭. void delay(uchar c,uchard) {while(c--) {while(d--);} } //******************************************* //A/D 转换部分 //采用 P1 口作控制 //11.0592MHz 的晶体 //MAX191 1 2 位 AD 操作程序 unsigned int max191(void) { Char I; U Unsigned char hbyte, CS191=0 //低电平有效,开始转换 //延时 8.5us 以上,等待转换结束 for(i 一 0;i& 8;i+ + ) { 一 nop 一(); ) SCLK 一 1: SCLK 一 0: //开始读数据 hbyte= 0; for(i=0;i& 4;i+ + ) //高 4 位 {SDoUT= 1: SCLK = 1;41 本科生毕业设计(论文) If(SDoUT) hbyte= 0x01; SCLK =0: If(i! = 3) hbyte& & = 1: ) 1byte 一 0; for(i=0;i& 8;i+ + ) //高 8 位 { SDoUT 一 1; SCLK 一 1; if(SDoUT) lbyte 一 0x01; SCLK 一 0: if(i! 一 7) lbyte~ = 1; ) 一 nop 一(); 一 nop 一(); CS191= 1: //数据处理 result= 0: result=hbyte; result& & =8; result=lbyte; retLlrn result; ) //************************************************************************* **** //键盘显示部分 void GetKey(uint8 *pKeyValue) { static uint8 s_u8KeyState = KEY_STATE_INIT ; static uint8 s_u8KeyTimeCount = 0 ; static uint8 s_u8LastKey = KEY_NULL ; //保存按键释放时候的键值 uint8 KeyTemp = KEY_NULL ; KeyTemp = KeyScan() ; switch(s_u8KeyState) { case KEY_STATE_INIT : //获取键值42 本科生毕业设计(论文) { if(KEY_NULL != (KeyTemp)) { s_u8KeyState = KEY_STATE_WOBBLE ; }} case KEY_STATE_WOBBLE : { s_u8KeyState = KEY_STATE_PRESS ; } case KEY_STATE_PRESS : { if(KEY_NULL != (KeyTemp)) { s_u8LastKey = KeyT //保存键值,以便在释放按键状态返回键值 KeyTemp |= KEY_DOWN ; //按键按下 s_u8KeyState = KEY_STATE_LONG ; } else { s_u8KeyState = KEY_STATE_INIT ; }} case KEY_STATE_LONG : { if(KEY_NULL != (KeyTemp)) { if(++s_u8KeyTimeCount & KEY_LONG_PERIOD) { s_u8KeyTimeCount = 0 ; KeyTemp |= KEY_LONG ; //长按键事件发生 s_u8KeyState = KEY_STATE_CONTINUE ; }}43//消抖 本科生毕业设计(论文) else { s_u8KeyState = KEY_STATE_RELEASE ; }} case KEY_STATE_CONTINUE : { if(KEY_NULL != (KeyTemp)) { if(++s_u8KeyTimeCount & KEY_CONTINUE_PERIOD) { s_u8KeyTimeCount = 0 ; KeyTemp |= KEY_CONTINUE ; }} else { s_u8KeyState = KEY_STATE_RELEASE ; }} case KEY_STATE_RELEASE : { s_u8LastKey |= KEY_UP ; KeyTemp = s_u8LastK s_u8KeyState = KEY_STATE_INIT ; } default : } *pKeyValue = KeyT //返回键值 } //******************************************* //LCD 显示void busy_lcm(uchar flag) {44 本科生毕业设计(论文)i= while(i==lcmcom&flag); } /******************************************************************* 函数功能:写数据、写指令 参数说明:数据(data1,data2)、指令(lcmcom) 判别(count),count=&0x1&,只写指令(com); count=&0x2&,写数据1 和指令(data1,lcmcom); count=&0x3&,写数据1 数据2 和指令(data1,data2,lcmcom); /*******************************************************************/ void write_lcm(uchar count,uchar com,uchar data1,uchar data2) { switch(count) { case 1: busy_lcm(0x3); lcmcom= case 2: busy_lcm(0x3); lcmdata=data1; busy_lcm(0x3); lcmcom= case 3: busy_lcm(0x3); lcmdata=data1; busy_lcm(0x3); lcmdata=data2; busy_lcm(0x3); lcmcom= default: } } /************************************************************** 函数功能:图形方式单个汉字显示 void display_1c(uchar caddr,uchar x,uchar y) {uchar i,j,*p; p=table+caddr*32; x=x&&1; for(i=0;i&=1;i++) { x=x+i; for(j=0;j&16;j++) { w=y*16*30+x+32+j*30; write_lcm(0x3,0x24,w%256,w&&8); write_lcm(0x2,0xc2,*p,NULL); p++; } } }45 本科生毕业设计(论文)/************************************************************** 函数功能:图形方式单个半角西文或数字显示(8×16) 参数说明:x 为水平坐标,以字为单位(0-29)(240×128) y 为垂直坐标,以字为单位(0-15)(240×128) caddr 为欲显示的半角西文或数字字符表中此字的绝对地址(偏移量) 如显 0,d=0;显 A,d=11 ***************************************************************** / void display_1e(uchar caddr,uchar x,uchar y) { uchar j,*p; p=table+caddr*32; for(j=0;j&16;j++) { w=y*16*30+x+32+j*30; write_lcm(0x3,0x24,w%256,w&&8); //显示地址设置 write_lcm(0x2,0xc2,*p,NULL); //数据 p++; } } /*************************************************************** 函数功能:图形方式清屏 参数说明:自动写模式 /**************************************************************/ void clear_lcm() { write_lcm(0x3,0x24,0x0,0x0); /*设置显示 RAM 首地址*/ write_lcm(0x1,0xb0,NULL,NULL); /*设置自动写方式*/ for (i=0;i&3840;i++) {busy_lcm(0x0c);lcmdata=0x0;} /*写 00H 清屏*/ busy_lcm(0x0c);lcmcom=0xb2; /*设置自动写结束*/ } /*************************************************************** 函数功能:图形方式初始化 参数说明:自动写模式 /**************************************************************/ void init_lcm() { write_lcm(0x1,0xa1,NULL,NULL); //设置光标形状为 8(列)×1(行) write_lcm(0x3,0x21,0x0,0x0); //设置光标指针 write_lcm(0x3,0x40,0x0,0x0); //设置文本显示区域首址 write_lcm(0x3,0x41,0x1,0x0);46 本科生毕业设计(论文)write_lcm(0x3,0x42,32,0x0); //设置图形显示区域首址为 32 write_lcm(0x3,0x24,32,0x0); write_lcm(0x3,0x43,30,0x0); //设置图形显示区域宽度为 30 字节 write_lcm(0x1,0x80,NULL,NULL); //设置显示为逻辑“或”方式 write_lcm(0x1,0x9c,NULL,NULL); //设置显示开关,图形/文本显示均开启 } /************************************************************** 函数功能:8×16 汉字显示(图形方式) 参数说明:caddr:汉字在字符表中的相对首地址 x:列地址,以汉字为单位(0~14)(240×128) y:行地址,以汉字为单位(0~7)(240×128) n:显示汉字的个数 /**************************************************************/ void display_c(uchar caddr,uchar x,uchar y,uchar n) { for (w=0;w &n;w++) display_1c (caddr,x,y); caddr++; x=x+1; } } /************************************************************** 函数功能:绘点(图形方式) 参数说明:px 点的水平坐标(0~239)(240×128) Py 点的垂直坐标(0~127)(240×128) /*************************************************************/ void display_p(uchar px,uchar py) { volatile uchar a,c; a=px/8; //a 化为字节数 c=px%8; //c 化为单字节的数据 b=py*16+a+32; a=0x80&&c; //根据 c,变为小数点的位置 write_lcm(0x3,0x24,b%256,b&&8); //设置显示地址 busy_lcm(0x0c);lcmcom=0xc5; busy_lcm(0x0c);c= //读该位原来的数据 a=a|c; write_lcm(0x2,0xc4,a,NULL); //写显示数据}/**************************************************************** ** 函数功能:图片显示 240X12847 本科生毕业设计(论文)参数说明:字模数组 ***************************************************************** ***/ void display(uchar *p1) { uint i,j, write_lcm(0x3,0x42,0x00,0x08); write_lcm(0x3,0x43,0x1e,0x00); addr=0x0800; write_lcm(0x3,0x24,addr%256,addr/256); for(i=0;i&128*30;i++) { if(i%30==0) { j++;addr=0x0800+j*30;; write_lcm(0x3,0x24,addr%256,addr/256); } write_lcm(0x2,0xc0,p1[i],NULL); } }//******************************************* //实时时钟 /**************************/ void delay_ms(uint x) //1ms 延时函数 { while(x--) { for(i=0;i&250;i++); } } /**************************/ void init(void) //初始化函数 { dat=0; clk=0; clr=0; delay_ms(1); clr=1; } /***********************/ void cs_ds12887(void) //片选,选择 DS12887。48 本科生毕业设计(论文) { a=0; b=1; c=0; } /*********************/ void set_time(uchar s_sec,uchar s_min,uchar s_hour) //写时间秒,分,时. { //cs_ds12887(); //片选,对 DS12887 芯片而言,可以放在 DS12887 初始化函数中,片选一次 就也行. com_b |= 0x80; //芯片更新禁止. seconds=s_ minutes=s_ hours=s_ com_b &= 0x7f; //芯片更新允许. } /***********************/ uchar get_sec(void) //读秒的时间. { //cs_ds12887(); i=com_a; while( ( i&0x80 )==0x80 ); return(seconds); } uchar get_min(void) //读分钟的时间. { //cs_ds12887(); i=com_a; while( ( i&0x80 )==0x80 ); return(minutes); } uchar get_hour(void) //读小时的时间. { //cs_ds12887(); i=com_a; while( ( i&0x80 )==0x80 );49 本科生毕业设计(论文) return(hours); } /*************************/ void ds12887_init(void) { cs_ds12887(); //在 DS12887 初始化函数中选择 DS12887。一次也行。 com_a=0x20; //A 寄存器,晶体振荡器开启而且时钟保持运行。 com_b=0x02; //B 寄存器,芯片更新正常进行,BCD 码格式,24 小时制。 //com_b |= 0x80; //芯片更新禁止. set_time(0x12,0x39,0x08); //设置秒,分,时的初始时间. //com_b &= 0x7f; //芯片更新正常进行 } /************************/ void read_time(void) { hour=get_hour(); hour &= 0x3f; min=get_min(); min &= 0x7f; sec=get_sec(); sec &= 0x7f; } /***********************/ void b_d_data(void) //数据处理函数 { b_d[0]=sec&0x0f; //秒的个位 b_d[1]=sec&0xf0; //秒的十位 b_d[1]&&=4; b_d[2]=min&0x0f; //分的个位 b_d[3]=min&0xf0; //分的十位 b_d[3]&&=4; b_d[4]=hour&0x0f; //时的个位 b_d[5]=hour&0xf0; //时的十位 b_d[5]&&=4; }50 本科生毕业设计(论文) /****** 数码管显示************/ void disp_data(uchar x) { uchar i, num=table[x]; for(i=0;i&8;i++) { clk=0; if( (num&0x01)==0x01 ) dat=1; else dat=0; clk=1; num&&=1; } } /*************************/ void disp(void) //显示函数 { disp_data(b_d[0]); //显示秒的个位 disp_data(b_d[1]); //显示秒的十位 disp_data(b_d[2]); //显示分的个位 disp_data(b_d[3]); //显示分的十位 disp_data(b_d[4]); //显示时的个位 disp_data(b_d[5]); //显示时的十位 }//******************************************* //PWM 控制电机 ////////////////延时子程序////////////////////// void delay(unsigned int delay_time) { while(delay_time--) { for(i=0;i&125;i++) ; } //延时8+6*delay_time us } void display() {51 本科生毕业设计(论文) uc i, temp=0 buf[0]=now%; buf[1]=now%; buf[2]=now%; buf[3]=now/1000; for(i=0;i&4;i++) { P0=seg[buf[i]]; P1= temp=_crol_(temp,1); delay(4); } } void Timer0() interrupt 1 { if(widdershins==2)//逆时针转 { if(PWM==0) { PWM=1;text=1; text1=1; TH0=(-pwm)/256; TL0=(-pwm)%256; } else { PWM=0; TH0=()/256; TL0=()%256; } } if(deasil==1)//shun时针转 { if(PWM==1) { PWM=0;text=1;text1=1; TH0=(-pwm)/256; TL0=(-pwm)%256; } else { PWM=1;52 本科生毕业设计(论文) TH0=()/256; TL0=()%256; } } if(start==3)// { if(PWM==1) { PWM=0; text=1;text1=1; TH0=()/256; TL0=()%256; } else { PWM=1; TH0=()/256; TL0=()%256; } } } void Timer1() interrupt 3 { TH1=0x4c; TL1=0x00; Tcount++; if(Tcount==20) { Tcount=0; now=a; i++; if(i==10) samp=a; if(i&100) i=90; a=0; } } void exter() interrupt 0 { a++; } //***********键盘扫描****************************53 本科生毕业设计(论文) //函数名称:void Timer0() interrupt 1 using 1 //函数功能:计时 //参数说明: //*********************************************** void key_scan(void) { unsigned char key_//键盘行编码 unsigned char row=0;//行值 unsigned char line=0;//列值 unsigned char temp=0//列扫描码 P2=0xf0;//P2口赋初值,准备进行行,列扫描 if((P2&0xf0)!=0xf0)//表示有键按下 { delay(10);// if((P2&0xf0)!=0xf0)//表明确实有键按下,进行键盘扫描 { for(i=4;i&0;i--)//列扫描 { P2=//送列扫描码 if((P2&0xf0)!=0xf0) { key_code=P2&0xf0;//得出行编码 line=i-1;//计算出列值 } temp=(temp&&1)|0x01;//进行下一列扫描 } switch(key_code)//根据行编码得出行值 { case 0xe0: row=3; case 0xd0: row=2; case 0xb0: row=1; case 0x70: row=0; default: } key_value=row*4+//根据行,列值计算出}

我要回帖

更多关于 pic单片机 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信