《课程设计说明书液位控制器设计.doc》由会员分享,可在线阅读,更多相关《课程设计说明书液位控制器设计.doc(27页珍藏版)》请在三一办公上搜索。
1、编号: 课程设计说明书题 目: 水位控制器设计 院 (系): 电子工程与自动化学院 专 业: 自动化 学生姓名: xxxxxxxxxxxxx 学 号: xxxxxxxxxxx 指导教师:xxxxxxxxxxxxx职 称: 研究员 题目类型: 理论研究 实验研究 工程设计 工程技术研究 软件开发2013年7月 5日 摘 要 半个世纪来,随着控制理论的深入研究,出现了许多新的控制算法。液位高度控制是工业控制过程的一种典型控制模型,进行液位控制课题研究,有助于学生进一步学习单片机、微机控制、自动控制理论等相关课程。在动态状态下,采用合适的方法对液位进行检测、控制,能收到很好的效果。PID控制是目前采
2、用最多的控制方法。根据液位系统的特点,设计合适的PID控制器对其进行液位控制,不仅成本低,而且控制效果好,具有较高的使用价值。 本文主要是利用双向水泵对水箱进行进水与排水控制,也就是进行对水箱液位控制系统的设计,涉及到液位的动态控制、控制系统的建模、PID算法、传感器等一系列知识。选用合适的器件设备、控制方案和算法,为能最大限度地满足系统对控制精度、实时控制等控制品质的要求。关键词 PID控制 单片机 液位 Abstract In recent years, with in-depth study of control theory, many new control algorithm. L
3、iquid level height is an important parameter in industrial control process, under dynamic condition, adopt the appropriate methods to control the liquid level detection, and can get very good effect. PID control is one of the most control methods. According to the characteristics of the liquid level
4、 system, design a suitable PID controller for level control, not only low cost, and good control effect and has higher use value. This article mainly is to use the two-way water pump to control the feed water and drainage water tank, in a word, is the design of water tank level control system, invol
5、ves the level of dynamic control, the modeling of the control system, PID algorithm, sensors and so on a series of knowledge. Choose the right components, equipment, control scheme and algorithm to maximize meet the control accuracy and real-time control system control quality requirements.Keywords
6、PID control ; Industrial ; Liquid level ;singe chip 目 录引言1 背景知识及系统设计要求1.1 背景知识1.2 STC12C5A60S2系列单片机介绍1.3 系统设计要求1.4 系统设计方案2 主要器件的选择及论证2.1 微处理器的选择2.2 驱动模块选择2.3 输出模块选择2.4 输入模块选择3 硬件电路的设计3.1 STC12C5A08S2主控模块设计3.1.1 stc12c5a08s2最小系统芯片部分83.1.2 stc12c5a08s2最小系统I/O口部分93.1.3系统驱动模块部分3.2 总原理图与PCB效果图4 软件设计4.1 A
7、D转换的程序4.2 LCD程序4.1 按键程序14.1 关于中断14.5 关于PWM24. 关于主程序25 调试过程5.1 液位传感器定标5.2 硬件调试过程5.3 软件调试过程6 对系统的总结与展望6.1 总结6.2 展望谢 辞参考文献附 录20 引言 本课题中我们设计了基于单片机控制驱动器驱动水泵来进行水位控制的控制系统,实现了连续控制和跟踪水位,并以液晶实时显示水位。该方案具有原理简单、想法新颖、容易实现、精度高等特点,控制系统对于提高工业自动化水平和提高生活供水质量具有重要的意义。在生产领域中,实现水位自动检测和控制是工业过程控制的一项关键技术,对于提高工业过程控制的自动化水平有着重要
8、的意义。在生活领域中,供水方式过去一般是通过人工来实现控制,容易造成对水资源的浪费,所以现在人们越来越关注水资源的问题。目前,水位控制系统是受到广泛应用的供水系统,水位控制可以有多种实现方法,如机械控制、逻辑电路控制、机电控制、传感器控制等,但传统的控制方式存在控制精度低、能耗大、不能实现连续控制和跟踪水位的特点,所以本论文设计出更方便更准确的水位控制系统。1 背景知识及系统设计要求1.1 背景知识 本课题涉及了单片机、自动控制原理、传感器、计算机控制技术等相关课程,需要熟练编写单片机程序、设计控制算法、正确标定传感器与ad转换的数据曲线、正确进行分段线性拟合、根据实际水位和目标水位的差值用p
9、wm脉宽调制技术进行pid调节。其中单片机程序设计为重点,主要用到其中的定时器,内置ad,中断和寄存器相关知识。1.2 stc12c5a60s2系列单片机介绍 stc12c5a60s2系列单片机是宏晶科技生产的单时钟/机器周期单单片机,是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但是速度快了812倍,内部集成max810专用复位电路,2路pwm,8路10位ad(250k/s),针对电机控制,强干扰的场合。本课题中由学校提供一片stc12c5a08s2单片机,用其进行课题设置完全能满足需求。1.3 系统设计要求 在学过的单片机的一些知识的基础上,通过自主学习,
10、学会另外一些单片机的应用,学会那种单片机的一种或者几种语言的编程,学会运用学到的新的单片机控制外围的芯片、电路模块,设计一个液位控制器,实现4项功能,基本功能:单片机正常工作;功能1:用H桥芯片驱动水泵进行正反转;实现水箱进水与排水控制;功能2:实现用压力传感器进行液位的测量;功能3:键盘可进行水位设置,实际水位可以实时显示。1.4 系统设计方案流程图:主程序流程: 开始进入主程序,开启计数器,开中断,将固定字符送lcd输出显示。根据算术结果进行水泵转动控制在while循环中等待定时器0溢出,每次溢出时进行实际液位于目标水位的位差计算并由此求取所需要的水泵转向的控制信号输出以及水泵输出功率,将
11、其换算为满功率对应占空比信息。进入while循环中,不断刷新ad测出实时数据、按键数据并分别送lcd显示。 开始外部中断1中断服务程序流程:得到新的按键值999 ?按键值为 0 9数字?将原按键值乘与10置高位再加上新按下键值每当4*4按键中扫描到按键按下就进入外部中断程序,读取按键值 将键值最高位去除 退出中断服务程序定时器1中断服务程序设计pwm波形流程:退出中断服务程序 使能输出pwm低电平Time=100? 使能输出pwm保持高电平 使能输出pwm低电平Time=目标占空比?每10us进入定时器1中断中将time自加12 主要器件的选择及论证2.1 微处理器和ADC的选择 老师提供的s
12、tc12c5a08s2是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但是速度快了812倍,内部集成max810专用复位电路,2路pwm,8路10位ad(250k/s),用来进行课题设置完全能满足需求。其中开通一路ad通道采集液位信号就可以,并且精度能达到1/1024足够满足课程精度要求了,若需要再提高精度,可以考虑多开通一路ad通道采集一路标准电平信号用作参考电压来计算减小液位电压的误差。在本次试验中ad转换取高八位1/256的精度就已经足够了,本人采用十位转换精度,经验证最后精度能保持在1毫米误差内,已经满足需求,所以参考标准电压的ad通道只作用预留接口附加
13、设计在硬件中,而未使用之,若读者需要可将参考电压(推荐为2.5v)加入p.14口,并在程序中加入P1ASF = 0x10; (开启p1.4ad通道)。2.2驱动模块的选择由于单片机的负载功率不足以驱动水泵并且控制器与控制对象应该进行电气隔离进行保护,所以应该加入驱动模块,本次课题中我们考虑了293、298器件,最后为了确保供应电流能满足水泵考虑了功率因素采用了298电路,经验证满足设计需求,293为经验证但是理论上可以尝试。298控制端口需要接入in1 in2 ena使能 3个控制端,其中常用控制方式有两种,一是将ena使能置高,in1 in2接入两组互补的pwm波形控制out1 out1同步
14、输出两组互补pwm波形。二是将in1 in2分别接一高一低来决定输出转向,ena接入一个pwm脉冲控制信号作为使能调节功率大小。笔者使用了后一方案。2.3输出模块的选择本课题中需要实现液位实时显示与目标水位显示,所以需要设计输出模块,现在集成的显示模块很多,买最常见的1062lcd或者8位数码管就足够满足设计了,综合考虑编程方便、美观度和经济成本,笔者选择了lcd。2.4输入模块的选择为了能够由人自主设定目标水位,需要设计输入模块,输入模块设计方案也很多,比如用4位开关分别进行加、减、确定、修改 4种操作就能满足,而考虑到用4*4键盘进行键入更能符合日常生活操作规范,笔者选择了设计4*4键盘并
15、且加入一个4输入与门电路在按键列扫描的同时引起外部中断1由中断服务程序处理按键值获得0999mm输入量程。3 脉冲信号参数测试仪的硬件电路设计3.1 stc12c5a08s2主控模块设计3.1 .1 stc12c5a08s2最小应用系统芯片部分和常用的89c51系列单片机一样,最小系统笔者使用了12M晶振,加入了复位按键开关,由于手边有单片机开发板方便下载调试程序,未加入串口下载电路的设计,需要的可以在加入。最小应用系统电路原理图如下:3.1 .2 stc12c5a08s2系统i/o外接部分本课题的外接设计需要外接1位的ad转换输入通道(并预留一路备用通道)8位的4*4键盘,l602lcd的3
16、位使能控制,8位数据口,298的两位输入控制,1位使能控制,考虑布局方便已经使用方便,笔者使用了p1.0为ad输入,p1.4位预留ad输入,p2口8位为按键,p1.11.3位1602控制位,p0口8位为1602数据位,p1.51.7位298的驱动控制位。原理图如下:3.1 .3 系统驱动模块部分 驱动模块直接用298模块,其需要两路电源,支持双输入双输出,本次使用out1,ou2接入水泵响应in1,in2单片机输入来同步驱动水泵,ENA接单片机的p1.7pwm波形输出作为使能控制。具体原理图如下:3.2 总电路原理图与pcb笔者的pcb效果图:4 软件设计4.1 ad转换程序(1)头文件的定义
17、相关内容(2)ADC初始化程序 调用此程序将adc初始化。详见附录3 void InitADC()(3) 获取某通道的转换10位值 调用此程序获取某一位通道ad转换10位结果。详见附录3 lint getADC(uchar ch)4.2 lcd显示程序(1)头文件的定义相关内容(2)显示器初始化 调用此程序将lcd初始化。详见附录3 void LCD_Initial()(3) 可以调用的显示子函数笔者编写了一些方便调用来送数据令lcd输出显示的子程序,入单字写入,3 4位数据直接输出,字符串输出的程序等,详见附录3.4.3 按键程序(1) 按键扫描程序为了能够在按键按下后同时引起外部中断1进入
18、中断服务程序将按键值处理获得0999间的数据而不单单是16个整数,在硬件设计上笔者加入了一个与门印发中断而软件上使用了较为累赘的逐行扫描的按键扫描程序uchar keyscan() ,本文不再赘述。(2) 在中断中获取按键键值程序在这个中断服务程序中将判断按下的是否为数字键原按键值,若是则将原键值置高位再将新值置低位。并在退出中断服务程序前判断最新的按键值是否超过了999,若超过要进行处理,因为在本课题中完全不需要设定高于200毫米的目标水位。具体程序详见附录3 子函数中void Init1() interrupt 2 函数。4.4 关于中断程序笔者用上了定时器1中断和外部中断1,需要启动两个
19、中断。需要特别注意中断初始化,否则在软件调试时往往进入中断中跳不出来。 void Init(void) /初始化 EA=1;/*开总中断 EX1=1;/*开外部中断1 ET1 = 1;/定时器中断 PX1=1;/优先级高 PT1=0;/优先级低 IT1=0;/*设置为电平触发方式另外需要了解基本的中断服务程序指令格式:void Init1() interrupt 0void Init1() interrupt 1void Init1() interrupt 2void Init1() interrupt 3void Init1() interrupt 4。其中后尾数表示中断源,依次是外部中断0
20、,定时器中断0,外部中断1,定时器中断1等等。4.关于pwm波形Pwm脉宽调制技术在控制系统中有着很高的地位,在本课题中笔者通过不断进入定时器1中断判断进入次数是否达到控制水泵功率所需要占空比的数值来改变或维持pwm输出的方式进行程序设计。具体为:void _PWM_() interrupt 3 static time;if(+time = zkb) /每到定时器1溢出中断便进入一次中断程序中将time自加1 /并与占空比比较是否变为低电平,比如主程序求得这时应该 pwm = 0; /令水泵以90%的输出功率工作抽水,那么就90次跳过本if语句 /得到90个延迟周期的高电平和10个延迟周期的低
21、电平的pwm波形if(time=100) /满百重置time = 0;pwm = 1; 4. 主程序进入主程序中首先先开启计数器、开中断、将固定字符送lcd输出显示;然后进入while循环中,不断刷新ad测出实时数据、按键数据并分别送lcd显示。在while循环中等待定时器0溢出,每次溢出时进行实际液位于目标水位的位差计算并由此求取所需要的水泵转向的控制信号输出以及水泵输出功率,将其换算为满功率对应占空比信息。等待定时器1中断根据占空比计算结果形成pwm控制波形进行水泵转动控制。具体的主函数详见附录45 调试过程5.1 传感器线性拟合调测过程 液位传感器是类似于洗衣机内部的压力型传感器,在课题
22、一开始就需要根据传感器的灵敏区设置水箱,刻度标度要在其灵敏量程范围内,但是推荐不必急于用不可擦拭墨迹标定坐标度,避免后期调整传感器后坐标不同。 笔者由于有学校提供了共计5套传感器和水泵,所以前期只将每只传感器装好后经过反复调零和调放大系数各测了4组水位与传感器输出电压关系表并生成曲线观测其线性情况,发现在部分量程中线性度还不错。多组测数能到提高精度,并且必需要在加水过程和排水过程分别测数,及早发现传感器的输出增长过程和降低过程是否能拟合,若不能那么在控制算法中就需要两套计算公式。若整条线根本分线性,就需要多次分段求取各段各自的代数算式以备测试控制效果。 经测试,笔者与同学选中了其中两只在量程范
23、围内精度较高并且较线性的传感器进行后期设计工作。其中部分先期测试到的数据和曲线示例如下在部分量程中线性度较高:前期测试传感器示例数据传感器实物图在后期测设计中,其他模块都能正确工作后需要加入ad转换算式把模拟液位测试电压转化为数字可见的液位数据,这时需要测量更多组数据,并且测量间距要足够小,最后取了平均值后进行拟合得出电压与液位关系算式,示例如下:其中y=3.1756x - 1.3855 为所需算式。5.2 控制模块的硬件调测过程5.2.1 298驱动模块的调试 做出实物后,在未接入单片机不加入控制程序的情况下,将驱动模块的in1接高,in2接低,使能ena直接接高,并正确向298供电,测试输
24、出out1 out2是否能驱动水泵满功率正转。然后将in1 in2互换高低电平,测试水泵是否满功率反转。 若正反转都正常,可以将ena高电平移除,用脉冲信号发生器输出5v的方波接入,方波占空比分别调到20%,50% 80% 观测水泵输出功率状况。可以验证通过单片机输出pwm波形作为使能的预期结果是否满足需要。笔者经测试发现在供应电压为7.5v工作电压时,水泵需要在pwm占空比为20%以上才具备抽水能力,否则只是空转而带不动水流。水泵实物图5.2.2 按键与显示模块的调试将系统在电源开关关闭情况下正确接线接入电源,再次检验接电正确、单片机未反接后打开独立电源开关向单片机和1602提供5v电源。上
25、电后,调节1602亮度调节微调电阻,使亮度适宜。这时若单片机程序为空或未接单片机或接反单片机,lcd为亮着一排空格的初始状态,应及时留意是否接反单片机避免烧坏。若程序正确,会显示相应字符信息,这时进行按键操作观测是否能将键入数据显示到lcd上,若不能应进行程序修改重试。单纯调试按键与的接线图5.3 控制模块的软件调测过程5.3.1 显示lcd程序调测 将lcd相关程序烧入单片机,正确硬件连接后开始测试,若程序正确将得到正确的显示字符。反正需要再修改程序。5.3.2 按键程序调试将按键接入,正确硬件连接后开始测试,若键入数据完全没有通过lcd显示,检查硬件有无接错,4输入与门输入是否接对了p2口
26、行扫描的高4位,输出是否接了p3.2或p3.3外部中断正确引起中断,若没有则需要重调程序,注意按键接的是p2口,程序中是否定义为p2 扫描,软件仿真是否能进入中断服务程序,反复调试可以实现之。按键与lcd部分仿真5.3.3 内置ad转换调试 正确连接硬件,传感器与单片机共低连接,程序正确设定ad转换的初始化等函数,正确从寄存器获取转换数据(笔者取10位转换结果,读者可以根据需要只取高8位),正确将数据送lcd显示,若未能实现应修改程序。若正确得出转换数据但是数据波动很大,请检查硬件连接,或者将直接接高或接地观测是否显示或者,若不是则说明硬件布局不合理或者单片机本身有故障,推荐换备用通道尝试,若
27、不行则换芯片或者重新布局。5.3.4 控制信号输出调试 正确硬件连接后,用万用表测试p1.5 p1.6 p1.7的输出状态,当实际液位与目标水位有差距时,p1.5 p1.6应为一高一低的电平状态,p1.7应为高电平。将p1.7接到示波器观测应为pwm波形,若液位差较大观测到的pwm波形为纯高电平是因为程序设置的占空比为满百,可改为99便于观测。或在液位差较小,系统在进行微调控制时观测示波器显示状态,能观测到较好波形。若以上功能不能实现,应进行软件调试,观测是否进入定时器1中断服务程序,若没有则留意中断初始化和定时器初始化是否正确,主程序调用是否正确,若正常在中断服务程序中获得了pwm控制波形,
28、注意是否正确定义了i/o口,p1.51.7使用是否出错。多次调试结果正确后,可以配合硬件测试接入水泵观测。若pid控制正常,水泵工作应该是不连续的,抽水声音明显有断续。若不正常应进行软件参数调节,笔者使用试凑发反复调节可以得到较好结果。若水泵工作正常但是到达预定水位不会停下而是在目标水位附近低功率抽水又排水的反复,是由于水泵的管道中有水残留,到达预定水位后残留水慢慢流下又影响了实际水位以至于反复启动控制系统工作,若不希望水泵这么跳动,可以进行软件调节将水位2毫米内误差忽略而不进行动作即可。对系统的总结与展望6.1 总结现在本系统已经交付验收,经测试达到了所要求的全部基本要求,误差精度在一毫米左
29、右,个人对本次课程设计中的自我表现还算满意,从方案提出到一步步验证、改进。实施方案都亲力亲为并且每一步都做得不错,最终也达到了设计预期,回想这三个周,看着自己的劳动成果,无论是原理图和的设计和做板焊接还是设计程序反复调试,自己的能力都显然得到了一定的锻炼和提升。6.2 展望 随着时代的发展,自动化控制集成度必然越来越高,精度和速度也要求越来越高,液位控制有着不错的前景,比如在家居中的运用。但是通过课题学习并不是局限着课题本身,更重要的是在其中得到的锻炼和提升,相信未来在更多领域的控制设计中我们也能有所建树。谢 辞从论文选题到资料搜集,从做一次一次地板子到反反复复地调程序,从写稿到反复修改,期间
30、经历了喜悦、痛苦、烦躁和彷徨,在课设的过程中心情是如此的复杂,特别是做板子和调程序的时候,喜怒哀乐都是经常变化的。还体验过晚上加班在实验室里调程序的积极学习生活,现在本次课程设计的任务已经基本完成,圆满验收了。在做毕业设计的过程中,感谢老师为本人们提供了实验室已经各种设备,可以让本人随时都可以在实验室测试板子,调试程序。感谢同学们的无私帮助,很高兴大家能共同探讨学习共同进步。感谢指导老师对本人毕业设计过程中的指导。感谢陪我一起熬夜测板子,调程序的同学们。参考文献1 谭浩强.C程序设计(第三版)M.清华大学出版社2 白驹珩,雷晓平.单片计算机及其应用(第二版)M.电子科技大学出版社,2005.3
31、 康华光.电子技术基础模拟部分(第五版)M.高等教育出版社,2006:4589.4 阎石.数字电子技术基础(第五版)M.高等教育出版社,2006:3479.5百度文库6 系列单片机简介7微型计算机控制技术(第二版)M.清华大学出版社8 EDA技术实用教程(第四版)M.科学出版社9 胡大可.MSP430系列Flash型超低功耗16位单片机M.北京:北京航空航天大学出版社,2001.10 C51单片机高效入门M.机械工业出版社附 录附录1:整体系统板效果图附录:需要调用的两个头文件/*-INTRINS.HIntrinsic functions for C51.Copyright (c) 1988-
32、2004 Keil Elektronik GmbH and Keil Software, Inc.All rights reserved.-*/#ifndef _INTRINS_H_#define _INTRINS_H_extern void _nop_ (void);extern bit _testbit_ (bit);extern unsigned char _cror_ (unsigned char, unsigned char);extern unsigned int _iror_ (unsigned int, unsigned char);extern unsigned long _
33、lror_ (unsigned long, unsigned char);extern unsigned char _crol_ (unsigned char, unsigned char);extern unsigned int _irol_ (unsigned int, unsigned char);extern unsigned long _lrol_ (unsigned long, unsigned char);extern unsigned char _chkfloat_(float);extern void _push_ (unsigned char _sfr);extern vo
34、id _pop_ (unsigned char _sfr);#endif/*-REG52.HHeader file for generic 80C52 and 80C32 microcontroller.Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.All rights reserved.-*/#ifndef _REG52_H_#define _REG52_H_/* BYTE Registers */sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0x
35、B0;sfr PSW = 0xD0;sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89;sfr TL0 = 0x8A;sfr TL1 = 0x8B;sfr TH0 = 0x8C;sfr TH1 = 0x8D;sfr IE = 0xA8;sfr IP = 0xB8;sfr SCON = 0x98;sfr SBUF = 0x99;/* 8052 Extensions */sfr T2CON = 0xC8;sfr
36、RCAP2L = 0xCA;sfr RCAP2H = 0xCB;sfr TL2 = 0xCC;sfr TH2 = 0xCD;/* BIT Registers */* PSW */sbit CY = PSW7;sbit AC = PSW6;sbit F0 = PSW5;sbit RS1 = PSW4;sbit RS0 = PSW3;sbit OV = PSW2;sbit P = PSW0; /8052 only/* TCON */sbit TF1 = TCON7;sbit TR1 = TCON6;sbit TF0 = TCON5;sbit TR0 = TCON4;sbit IE1 = TCON3
37、;sbit IT1 = TCON2;sbit IE0 = TCON1;sbit IT0 = TCON0;/* IE */sbit EA = IE7;sbit ET2 = IE5; /8052 onlysbit ES = IE4;sbit ET1 = IE3;sbit EX1 = IE2;sbit ET0 = IE1;sbit EX0 = IE0;/* IP */sbit PT2 = IP5;sbit PS = IP4;sbit PT1 = IP3;sbit PX1 = IP2;sbit PT0 = IP1;sbit PX0 = IP0;/* P3 */sbit RD = P37;sbit WR
38、 = P36;sbit T1 = P35;sbit T0 = P34;sbit INT1 = P33;sbit INT0 = P32;sbit TXD = P31;sbit RXD = P30;/* SCON */sbit SM0 = SCON7;sbit SM1 = SCON6;sbit SM2 = SCON5;sbit REN = SCON4;sbit TB8 = SCON3;sbit RB8 = SCON2;sbit TI = SCON1;sbit RI = SCON0;/* P1 */sbit T2EX = P11; / 8052 onlysbit T2 = P10; / 8052 o
39、nly /* T2CON */sbit TF2 = T2CON7;sbit EXF2 = T2CON6;sbit RCLK = T2CON5;sbit TCLK = T2CON4;sbit EXEN2 = T2CON3;sbit TR2 = T2CON2;sbit C_T2 = T2CON1;sbit CP_RL2 = T2CON0;#endif附录3:设计专供调用的子函数void InitADC() /ADC初始化程序P1ASF = 0x01; /开p1.0 ad通道,备用通道为p1.4,0x10ADC_RES = 0; ADC_LOW2=0;ADC_CONTR = ADC_POWER |
40、ADC_SPEEDLL;delay(20); lint getADC(uchar ch)/获取某ad通道转换结果(10位)lint p ;ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START; _nop_(); /Must wait before inquiry _nop_(); _nop_(); _nop_(); while (!(ADC_CONTR & ADC_FLAG); /Wait complete flag ADC_CONTR &= ADC_FLAG; /Close ADCp=ADC_RES*4+ADC_LOW2;return (p);void LCD_Initial() /显示器初始化 LCD_WRITE(0x38,LCD_COM); delay(50); LCD_WRITE(0x38,LCD_COM); delay(50); LCD_WRITE(0x06,LCD_COM); delay(10); LCD_WRITE(0x01,LCD_