课程设计基于单片机的数控直流电源设计样本_第1页
课程设计基于单片机的数控直流电源设计样本_第2页
课程设计基于单片机的数控直流电源设计样本_第3页
课程设计基于单片机的数控直流电源设计样本_第4页
课程设计基于单片机的数控直流电源设计样本_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于51单片机数控直流电源设计学号:XXXXXXXXXX姓名:XXX日期:12月目录第1章绪论 11.1课题背景及意义 11.2课程设计重要内容 1第2章系统总体设计 32.1方案设计与论证 32.2系统总框图 4第3章硬件设计 63.1硬件选型 63.1.1系统供电某些 63.1.2控制器某些 63.1.3显示某些 63.1.4键盘某些 63.1.5数模/模数转换某些 73.1.6掉电记忆某些 73.2硬件电路设计 73.2.1电源模块 73.2.2DA转换模块 83.2.3电压调节模块 93.2.4键盘模块 103.2.5EEPROM拓展模块 113.2.6显示模块 12第4章软件设计 134.1主程序流程 134.2键盘程序流程图 144.3EEPROM读写程序流程 154.4DAC0832程序流程 164.5TLC1543程序流程 17第5章系统测试及误差分析 185.1系统测试 185.1.1软件测试 185.1.2硬件测试 185.1.3系统整体测试 185.2误差分析 19结论(心得体会) 21参照文献 22附录一 23附录二 24第1章绪论1.1课题背景及意义电源技术特别是数控电源技术是一门实践性很强工程技术,服务于各行各业。当今电源技术融合了电气、电子、系统集成、控制理论、材料等诸多学科领域。直流稳压电源是电子技术惯用仪器设备之一,广泛应用于教学、科研等领域,是电子实验员、电子设计人员及电路开发部门进行实验操作和研究不可缺少电子仪器。在电子电路中,普通都需要电压稳定直流电源来供电。而整个稳压过程是由电源变压器、整流、滤波、稳压等四某些构成。然而这种老式直流稳压电源功能简朴、不好控制、可靠性低、干扰大、精度低且体积大、复杂度高。普通直流稳压电源品种有诸多,但均存在如下两个问题:输出电压是通过粗调(波段开关)及细调(电位器)来调节。这样,当输出电压需要精准输出,或需要在一种小范畴内变化时,困难就较大。此外,随着使用时间增长,波段开关及电位器难免接触不良,对输出会有影响。稳压方式均是采用串联型稳压电路,对过载进行限流或截流型保护,电路构成复杂,稳压精度也不高。在家用电器和其她各类电子设备中,普通都需要电压稳定直流电源供电。但在实际生活中,都是由220V交流电网供电。这就需要通过变压、整流、滤波、稳压电路将交流电转换成稳定直流电。滤波器用于滤去整流输出电压中纹波,普通老式电路由滤波扼流圈和电容器构成,若由晶体管滤波器来代替,则可缩小直流电源体积,减轻其重量,且晶体管滤波直流电源不需直流稳压器就能用作家用电器电源,这既减少了家用电器成本,又缩小了其体积,使家用电器小型化。老式直流稳压电源普通采用电位器和波段开关来实现电压调节,并有电压表批示电压值大小。因而,电压调节精度不高,读数欠直观,电位器也易磨损。而基于单片机控制直流稳压电源能较好地解决以上老式稳压电源局限性。随着科学技术不断发展,特别是计算机技术突飞猛进,当代工业应用工控产品均需要有低纹波、宽调节范畴高压电源,而在某些高能物理领域,更是急需电脑或单片机控制低纹波、宽调节范畴电源。1.2课程设计重要内容本设计给出数控直流稳压电源输出电压范畴为0~13V,额定工作电流为0.5A,并具备“+”、“-”步进电压调节功能,其最小步进为0.05V,纹波不不不大于10mV,此外,还可用LCD液晶显示屏显示设定电压值和输出电压值。该系统原理是以STC89C52单片机为控制单元,以数模转换芯片DAC0832输出参照电流控制电压调节模块NE5534输出电压大小,同步输出稳压采用模数转换芯片TLC1543将采样电压模仿信号转换为数字信号,再通过单片机实现闭环控制。

第2章系统总体设计2.1方案设计与论证方案一:设计开关电源。在前期方案设计中采用PWM脉宽调制。它功耗小,效率高,稳压范畴宽,电路形式灵活多样,功耗小,效率高。在制作过程中发现,PWM占空比线性变化使相应电流呈非线性变化,经分析发现滤波电容存在对占空比很小PWM波积分效果明显,导致电压非线性变化更明显,特别是PWM占空比很小时(但愿得到输出电压很小),运用单片开关电源PWM技术控制开关占空比来调节输出电压,以达到稳定输出目。但用数字量控制作用更加明显。方案二:用D/A和运算放大器做电流源,即采用D/A输出调节晶体管偏值电流(电压)。采用此方案能有效缩短调节时间,并能提高输出精度。设计方案,涉及了微控制器模块、D/A转换模块、稳压控制模块、显示模块、键盘模块、电源模块五某些构成,形成开环控制。采用惯用51芯片作为控制器,P0口和DAC0832数据口直接相连,DA电流输出端接放大器UA741反向输入端,DAC0832和运放UA1将单片机发出八位二进制数转换成0—5V负电压,再通过反向比例放大器UA2将负电压转换成0—10V正电压,输出到电压调节模块NE5534,将电压步进值调节为0.05V。因此,当MCU输出数据增长1时候,最后输出电压增长0.05V,当调节电压时候,可以以每次依0.05V梯度增长或者减少电压。数码管显示电路,该系统使用3个数码管,可以显示三位数,分别构成显示电路十位、个位、小数点位。本主电路原理是通过MCU控制DA输出电流大小,通过两级放大器转换成电压值并放大,通过电压调节模块调节作为最后输出电压。方案三:用D/A和运算放大器做电流源,即采用D/A输出调节晶体管偏值电流(电压),使用电压采样电路,通过A/D转换实现闭环控制。采用此方案是对方案二改进,能有效缩短调节时间,进一步提高输出精度。设计方案,其重要由微控制器模块、D/A转换模块、电压调节模块、显示模块、键盘模块、电源模块六某些构成。液晶屏显示电路,该系统使用LCD1602液晶显示屏,可以清晰地显示分别构成显示电路十位、个位、小数点位,同步还能显示英文名称和电压/电流单位。

按照方案三设计可以较好满足课程设计目的与规定,因此最后选用方案三。2.2系统总框图采用双220V/18V变压器,将220V市电经桥式整流,滤波后得+21V和-21V电压值,再通过三端稳压芯片得到需要+15V,-15V和+5V,为系统提供电源支持。以单片机STC89C52为核心,输出电流经D/A转换,比较放大后得到适当电压值,经电压调节后输出UO,对UO采样,经A/D转换送回到单片机与设定值比较,自动调节以实现闭环控制。系统总框图如图2-1所示。

市电 市电 系统电系统电源变压+21V+15V整流-15V整流+5V 电压调节及过流保护 电压调节及过流保护UO 比较放大取样比较放大取样 D/A转换 D/A转换 电压显示STC89C52电压显示STC89C52A/D转换键盘A/D转换键盘掉电记忆 掉电记忆 图2-1系统总框图

第3章硬件设计3.1硬件选型3.1.1系统供电某些由于该电源总共需要+21V,+15V,-15V,+5V电压,因此采用双220V/18V变压器,经桥式整流滤波后得到21V电压;由三端稳压器7815,7915和7805分别得到+15V,-15V和+5V电压。3.1.2控制器某些方案一应用mega16作为控制器。AVR是51升级版,具备速度快,且自带512字节EEPROM,不需要此外接扩展EEPROM长处;缺陷是,对AVR使用不太熟悉,价格比较贵。方案二采用STC89C52作为控制器。长处:技术比较纯熟,使用广泛,价格便宜,并且功能上也完全满足本系统规定;缺陷:需要连接扩展EEPROM。由于本系统对单片机速度规定不是很高,并且连接扩展EEPROM也不复杂,通过比较,选用方案二。3.1.3显示某些方案一使用LED显示。长处:可视角度宽,介格便宜;缺陷:显示内容少,介面呆板,并且占用较多IO口资源。方案二应用1602液晶显示模块。长处:界面美观,可显示文字及数字;缺陷:价格较贵。通过比较,我选节方案二。3.1.4键盘某些方案一运用I/O口直接连接独立式键盘,每键均有相应I/O口相应,编程容易控制,实现以便;方案二运用P3口接成4*2键盘。长处:运用6个IO口得到8个按键,可使操作介界变得简朴,操作也以便;缺陷:软件解决比独立按键复杂。通过比较,结合本设计不需要太多IO口,方案一为最佳方案。3.1.5数模/模数转换某些方案一采用PCF8591芯片。长处:集AD,DA于一身;缺陷:价格昂贵,且操作不熟悉。方案二数模转换某些采用DAC0832芯片;模数转换某些采用TLC1543芯片。长处:两芯片均为惯用芯片,操作简朴,软件编程简朴;缺陷:占用比较多IO口,为PCB布线带来困难。通过比较,方案二位最佳。3.1.6掉电记忆某些我选用应用最广泛ST24C02芯片。该芯片价格便宜,操作简朴,抗干扰强,数据能保持一百年。3.2硬件电路设计本系统由电源模块,调压模块,DA转换模块,键盘模块,EEPROM拓展模块与显示模块构成。3.2.1电源模块220V市电通过双18V变压器转换后到+-18V电压,再通过桥式整流滤波电路,得到18*1.2=21.6(V)电压。其中+21V电压通过7815转换得到稳定+15V电压,再经7805转换得到稳定+5V电压;-21V电压通过mc7915转换得到稳定-15V电压。其中,+21V为系统供电,+15V,-15V,+5V分别为各独立元件供电。图3-2-1电源模块原理图3.2.2DA转换模块DA转换模块由DAC0832,两级运放UA741构成。DAC0832具备8位辨别率,有3种工作方式(单缓冲,双缓冲,直通)。本设计中DAC工作于直通工作方式。D/A转换成果采用电流形式输出。要是需要相应模仿电压信号,可通过一种高输入阻抗线性运算放大器实现这个供功能。该片逻辑输入满足TTL电压电平范畴,可直接与TTL电路或微机电路相接,-芯片电路原理图如图3-2-2所示。图3-2-2DAC0832引脚图和内部构造电路图UA741为惯用运放,由美国fairchild公司生产,具备低漂移,稳定等长处,可外置调零电路以抑制零点漂移。DAC0832和运放UA1将单片机发出八位二进制数转换成0—5V负电压,再通过反向比例放大器UA2将负电压转换成0—10V正电压。通过两级运放放大后,DAC0832转换辨别率为10/(2^8-1)=0.04V。即单片机向DAC送出数据变化1BIT,运放UA2输出电压值变化0.04V。滑动变阻器R22作用为调零电路以抑制零点漂移。图3-2-3DA转换模块原理图3.2.3电压调节模块本设计电压调节模块如图3-2-4所示。Q1,Q2构成复合管,以实现大电流输出。由于该设计预定额定电流为0.5A,最大输出电压为12.5V,因此规定Q1管射极最大功率Pmax=0.5*12.5=6.25W,因此选用TIP41c。Q3管9013和电阻R1为限流保护某些。当输出电流不不大于0.7A时,R1上压降为0.7V使得T3管导通,Q3管集电极对Q2管基极分流,使得Q2管基极电流明显变小使得输出电流变小,从而达到过流保护功能。发光二极管起过流提示作用。电压调节模块核心某些是NE5534。NE5534生产于美国德州半导体公司,具备共模抑制比高,响应速度快和压摆率高等长处,惯用于音响,耳机等设备。由DA及运放转换后电压U1输入到NE5534正向输入端,R12R13R17构成NE5534取样电路。由于NE5534Q1Q2及取样电路构成负反馈,由运放“虚短”特点,NE5534反向输入端电压U2为正向输入端电压大小U1。由于运放尚有“虚断”特点,运放输入端对流经取样电路电流不起分流作用,因此输出电压U0/U2=(R12+R13+R17)/(R12+R13)=1.25。即U2每变化0.04V,U0变化0.05V。由于单片机输入到DAC0832二进制数据每变化1BIT,U1变化0.04V即U2变化0.04V,因此U0变化0.05V。因而,该设计最小步进电压为0.05V。电容C9作用为抑制输出纹波电压。图3-2-4电压调节模块原理图3.2.4键盘模块系统共设立了9个独立按键,实现了惯用电压设定,电压“+”“—”设定及正常关机辨别功能。01~08功能分别是:设立电压值12V,9V,5V,3V,步进-0.5V,步进+0.5V,步进-0.05V,步进+0.05V。09为关机设定。图3-2-5按键模块原理图3.2.5EEPROM拓展模块为了实现设定电压数据掉电保护,我在系统中连接了EEPROM24C02B,保证了在行驶过程中,如果数控电源意外掉电,已经设定电压数据可以下来。24C02B是ATMEL公司生产一款256byte串行EEPROM,能重复擦写1,000,000次,记录信息能保存1以上,并且与单片机连接只要2根线。24C02接图如图3-2-6图3-2-6EEPROM拓展模块原理图3.2.6显示模块显示模块重要由TLC1543及LCD液晶显示屏构成。由美国德州公司生产TLC1543,是具备10位辨别率AD转换器,,它具备11路模仿输入通道及3路内置自测试方式,具备明显长处。LCD液晶屏幕采用1602,可以显示16X2个字符。由输出端采样得到模仿信号,输入到TLC1543其中一路模仿输入通道IN0,通过AD转换,TLC1543将模仿量转化为10位数字量输入到单片机相应IO口。通过解决,单片机将模仿量值通过1602液晶显示出来。显示模块接图如图3-2-7所示。图3-2-7显示模块原理图

第4章软件设计4.1主程序流程系统核心某些是对输出精度闭环控制。对输出电压值采样,通过A/D转换通道送入单片机,与输出值进行比较,若误差不在规定范畴内,就调节STC89C52输出值,直到满足规定。系统主程序流程图如图4-1-1和图4-1-2所示。 开始开始 初始化 初始化 读取上次关机设定值 读取上次关机设定值 DA输出 DA输出 调节STC89C52输出值TLC1543检测实际输出值 调节STC89C52输出值TLC1543检测实际输出值误差不大于50mV?误差不大于50mV?N Y 图4-1-1主程序流程图(1)

键盘扫描等待输入键盘扫描等待输入 更改DA输出值 更改DA输出值 保存设定值 保存设定值 屏幕显示当前设定值与输出值 屏幕显示当前设定值与输出值 图4-1-2主程序流程图(2) 4.2键盘程序流程图本系统中键盘程序分为键盘扫描子程序和按键功能执行子程序。键盘扫描子程序流程图如图4-2-1所示,按键功能子程序流程图如图4-2-2所示。开始开始扫描键盘有键接下?返回键值退出YYYN图4-2-1键盘扫描子程序流程图有按键按下开始有按键按下开始 执行相应功能 执行相应功能 退出 退出 图4-2-2按键功能执行子程序流程图4.3EEPROM读写程序流程24C02B读写程序流程图如图4-3-1和图4-3-2所示。开始开始写入数据退出发送地址图4-3-124C02B写入程序流程图读取数据读取数据退出发送地址开始图4-3-224C02B读取程序流程图4.4DAC0832程序流程DAC0832程序流程图如图4-4所示。开始开始结束输出相应值读取数据发送数据结束输出相应值读取数据发送数据图4-4DAC0832程序流程图

4.5TLC1543程序流程TLC1543小程序流程图如图4-5所示:开始开始CLK发送脉冲信号CLK发送脉冲信号发送4位地址发送4位地址读取前四位数据读取前四位数据CLK发送脉冲信号CLK发送脉冲信号 读取后6位数据读取后6位数据结束结束 图4-5TLC1543小程序流程图

第5章系统测试及误差分析5.1系统测试5.1.1软件测试1、测试软件程序编辑器keiluvision4程序烧制器STC-ISPV352、编译成果在编制完C语言后,即keiluvision4界面下,进行了调试,依照提示,我找到了程序在编写上错误,加以改正,再次进行调试。通过上述简朴测试,证明本次设计程序基本上对的无误。然后,将烧录了程序单片机STC89C52接到系统电路中,查看系统电路运营状况;如果程序逻辑有问题可进一步修改,直到系统正常运营。5.1.2硬件测试1、电源某些提供整个电路所需各种电压,由电源变压器和整流滤波电路及三个辅助稳压芯片输出构成,电源变压器功率由需要输出电流大小决定,保证有充分功率余量。2、电流取样电阻R1要选取大功率电阻(5W或10W)。也可使用废旧万用表上拆下来电阻线。检查电路连接无误后,即可试机。找一块数字表将其并联在输出电路上,按S1或S2设定一种电压,此时LCD1602第一行显示电压也许会有误差,恰当微调反馈电路VR2,使其与数字表读数一致,再将数字表串联在电源输出电路上,选取恰当电流档,接上一定负载。此时,LCD1602第二行会显示出电流值,恰当调节VR3变化TLC1543参照电压,直至显示电流值与万用表显示电流值一致为止,校正完毕后即可使用。5.1.3系统整体测试1、测试工具双踪示波器数字万用表测试成果测试成果如表5-1所示。表5-1电压测试表系统理论值系统测量值误差显示电压值(V)理论码值(bit)实测码值(bit)实测电压值(V)3.000011110000111103.20.24.500101101001011004.60.15.000110010001100015.10.15.500110111001101105.60.16.000111100001110116.006.501000001010000006.60.17.001000110010001017.20.27.501001011010010107.60.18.001010000010011118.00.8.501010101010101008.509.001011010010110019.20.210.001100100011000119.8-0.2 系统由于刚启动在电压方面不稳定,存在一定误差,但是单片机会对其进行控制,使系统再次稳定。3、精度分析 绝对误差:ΔU=(0.2+0.1+…...+0.2+0.2)/12=0.11V相对误差:γA=ΔU/U=(0.2/3.0+0.1/4.0+…+0.2/9.0+0.2/10)/12=1.8% 线性度:γL=ΔLmax/YFS=0.2/15=1.3% 敏捷度:K=0.1V5.2误差分析从电路原理框图可以看出,系统误差来源于四个方面:DAC0832量化误差。基准电压温漂引入误差。三端稳压器电路引起误差。其他器件和线路由于温漂、不稳定等因素引起误差。

结论(心得体会)通过两个周艰难奋战,我最后完毕了课程设计。虽然过程是艰难,但最后成功喜悦同样令我高兴! 此设计用D/A和运算放大器做电源,及采用D/A输出调节晶体管偏值电流{电压}。采用此方案能有效地缩短调节时间,并能提高输出精度,经计算需要采用8位D/A芯片。 为了争取时间,减少成本,我解决方案是采用51单片机。变化电压大小,当单片机通过闭环负反馈调节回路A/D转换检测到电压达到设定值时,将再次对输出电压进行调制,直到输出电压达到设定值;电压值理论上是象形变化,不会产生高次谐波,基本实现了各项规定和目的,达到了本次课程设计预期目。本次设计过程中,对纹波也没有提出严格规定,因此惯用稳压集成电路就可以满足规定。本设计输出电压稳压精度高,可以用在对直流电压规定较高设备上,或在实验室中当作实验电源使用。在本次设计过程中,我发现诸多问题,给我感觉就是很难,很不顺手,看似原理比较简朴电路,要动手把它给设计出来却是很难一件事,重要因素是咱们没有经常动手设计过电路,尚有资料查找也是一大难题,这就规定咱们在后来学习中,应当注意到这一点,更重要是咱们要学会把从课本中学到知识和实际电路联系起来,这无论是对咱们后来就业还是学习,都会起到很大增进和协助,我相信,通过这次课程设计,在下一阶段学习中我会更加努力,力求把功课学好,学精。同步,通过本次课程设计,巩固了咱们学习过专业知识,也使咱们把理论与实践从真正意义上相结合了起来;考验了咱们借助互联网收集、查阅有关文献资料,和组织材料综合能力;从中可以自我测验,结识到自己哪方面有欠缺、局限性,以便于在日后学习中得到改进、提高。

参照文献[1]邹红.数字电路与逻辑设计[M].北京:人民邮电出版社,.[2]李祥臣.模仿电子技术基本教程.[M]北京:清华大学出版社..[3]童诗白,华成英.模仿电子技术基本[M]北京:高等教诲出版社,.[4]邱关源.电路(第四版)[M].北京:高等教诲出版社,.56-74[5]李群芳,张士军,黄建.单片微型计算机与接口技术(第二版)[M].北京:电子工业出版社,.[6]刘文涛.单片机语言C51典型应用设计[M].北京:人民邮电出版社,.[7]于永,戴佳,常江.51单片机实例精讲[M].北京:电子工业出版社,.[8]曹凤.微机数控技术及其应用[M].四川:电子科技大学出版社,.[9]胡寿松.自动控制原理[M].北京:科学出版社,.152-233[10]潘永雄,沙河,刘向阳.电子线路CAD实用教程(第二版)[M].陕西:西安电子科技大学出版社,.[11]李朝青.单片机原理及接口技术(建明修订版).北京:北京航空航天大学出版社,1999.[12]李朝青.单片机学习辅导测验及解答讲义.北京:北京航空航天出版社,.[13]何立民.单片机高档编程.北京:北京航空航天大学出版社,1999.[14]张迎新,等.单片机初级编程.北京:北京航空航天大学出版社,1999.[15]余永权.Flash单片机原理及应用.北京:电子工业出版社,1997.[16]钱逸秋.单片机原理及应用.北京:电子工业出版社,.[17]王兆安,刘进军.电力电子技术(第五版).北京:机械工业出版社,.43-95

附录一

附录二完整源程序 #include<reg52.h>#include<intrins.h>#include<math.h>#defineuintunsignedint#defineucharunsignedchartypedefunsignedcharBYTE;typedefunsignedintWORD;typedefbitBOOL;BYTEcodedis1[]={"PowerSupply"};BYTEcodedis2[]={"welcome!"};BYTEcodedis3[]={"Pleasewait..."};BYTEcodedis4[]={"SetValue:"};BYTEcodedis5[]={"Output:"};BYTEsetv[6],getv[6];//LCD输出字符数组floatn,setvalue;//电压设定值floatdq,dp,qq,pp,l,xx;//转换传递参数ucharctu,outv,inv;//DA与AD某些传递参数sbitTLCEOC=P1^1;//TLC占用IO口sbitTLCCL=P1^2;sbitTLCAD=P1^3;sbitTLCOUT=P1^4;sbitTLCCS=P1^5;sbitscl=P2^0;//断电保存占用IO口sbitsda=P2^1;sbitDACS=P1^6;//DA占用IO口sbitDAWR=P1^7;sbitrs =P2^2; //液晶LCD占用IO口sbitrw=P2^3;sbitep=P2^4;voiddelay(BYTEms) //延时子程序{ BYTEi; while(ms--) { for(i=0;i<250;i++) { _nop_(); _nop_(); _nop_(); _nop_(); } }}/********************************************************************LCD显示子函数组*******************************************************************/BOOLlcd_bz(){ //测试LCD忙碌状态 BOOLresult; rs=0; rw=1; ep=1; _nop_(); _nop_(); _nop_(); _nop_(); result=(BOOL)(P0&0x80); ep=0; returnresult; }voidlcd_wcmd(BYTEcmd){ //写入指令数据到LCD while(lcd_bz()); rs=0; rw=0; ep=0; _nop_(); _nop_(); P0=cmd; _nop_(); _nop_(); _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0; }voidlcd_pos(BYTEpos){ //设定显示位置 lcd_wcmd(pos|0x80);}voidlcd_wdat(BYTEdat) { //写入字符显示数据到LCD while(lcd_bz()); rs=1; rw=0; ep=0; P0=dat; _nop_(); _nop_(); _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0; }voidlcd_init(){ //LCD初始化设定 lcd_wcmd(0x38); // delay(1); lcd_wcmd(0x0c); // delay(1); lcd_wcmd(0x06); // delay(1); lcd_wcmd(0x01); //清除LCD显示内容 delay(1);}/********************************************************************DA输出函数***********************************************************************/voidwrite_da() { P0=outv;//将输出值送p0口 delay(1); DACS=0;// DACS,DAWR都为低电平,0832为直通方式,送出数据 delay(1); DAWR=0; delay(1); delay(1); DAWR=1; //都为高电平,0832为单缓冲方式,数据缓存 delay(1); DACS=1; delay(1);}/********************************************************************AD(TLC)读取函数*****************************************************************/voidread_tlc(){ floatvad; inti; i=2; while(i) { uchartemp; vad=0; TLCEOC=1; delay(1); TLCCL=0; TLCCS=0; delay(1); TLCCL=0;//1 TLCAD=0; temp=TLCOUT; if(temp==1) { vad=vad+512 ; } delay(1); TLCCL=1; delay(1); TLCCL=0;//2 TLCAD=0; temp=TLCOUT; if(temp==1) { vad=vad+256 ; } delay(1); TLCCL=1; delay(1); TLCCL=0;//3 TLCAD=0; temp=TLCOUT; if(temp==1) { vad=vad+128 ; } delay(1); TLCCL=1; delay(1); TLCCL=0;//4 TLCAD=1; temp=TLCOUT; if(temp==1) { vad=vad+64 ; } delay(1); TLCCL=1; delay(1); TLCCL=0;//5 temp=TLCOUT; if(temp==1) { vad=vad+32; } delay(1); TLCCL=1; delay(1); TLCCL=0;//6 temp=TLCOUT; if(temp==1) { vad=vad+16; } delay(1); TLCCL=1; delay(1); TLCCL=0;//7 temp=TLCOUT; if(temp==1) { vad=vad+8; } delay(1); TLCCL=1; delay(1); TLCCL=0;//8 temp=TLCOUT; if(temp==1) { vad=vad+4; } delay(1); TLCCL=1; delay(1); TLCCL=0;//9 temp=TLCOUT; if(temp==1) { vad=vad+2 ; } delay(1); TLCCL=1; delay(1); TLCCL=0;//10 temp=TLCOUT; if(temp==1) { vad=vad+1 ; } delay(1); TLCCL=1; delay(1); TLCEOC=0; delay(1); TLCCS=1; delay(1); i--; } inv=(vad/1023)*255;}/********************************************************************字符类型转换函数******************************************************************/voidchange(floatnn,BYTEa[6])//float转字符数组{ uinti,y; floatx=nn*100; for(i=0;i<4;i++) { y=x/(pow(10,(3-i))); switch(y) { case0:a[i]='0';break; case1:a[i]='1';break; case2:a[i]='2';break; case3:a[i]='3';break; case4:a[i]='4';break; case5:a[i]='5';break; case6:a[i]='6';break; case7:a[i]='7';break; case8:a[i]='8';break; case9:a[i]='9';break; } x=x-y*(pow(10,(3-i))); } a[4]=a[3]; a[3]=a[2]; a[2]='.'; a[5]='V'; }voidchangetf()//UCHAR转FLOAT{ setvalue=(dq*13)/255; //dq为单片机p0口输出八位数字量 l=dp*13/255/100; setvalue=setvalue+l+0.02;}voidchangetu()//float转UCHAR{ qq=setvalue*255/13; ctu=qq; pp=(qq-ctu)*100;}/********************************************************************键盘扫描函数**********************************************************************/voidkeyscan(){ uchartemp1,temp; P3=0xff; temp1=P3; while(temp1==0xff)//等待按键 { P3=0xff; temp1=P3; } temp=temp1;//记录按键 while(temp1!=0xff)//等待松手 { P3=0xff; temp1=P3; } switch(temp) { case0x7f:setvalue=setvalue+0.05;break; case0xbf:setvalue=setvalue-0.05;break; case0xdf:setvalue=setvalue+0.5;break; case0xef:setvalue=setvalue-0.5;break; case0xf7:setvalue=3;break; case0xfb:setvalue=5;break; case0xfd:setvalue=9;break; case0xfe:setvalue=12;break; } if(setvalue>13) setvalue=13; if(setvalue<0) setvalue=0; }/********************************************************************开机欢迎界面**********************************************************************/voidwelcome() //欢迎界面{ BYTEi; lcd_init(); //初始化LCD delay(10); lcd_pos(2); //设立显示位置为第一行第3个字符 i=0; while(dis1[i]!='\0') { lcd_wdat(dis1[i]); //显示字符 i++; } lcd_pos(0x44); //设立显示位置为第二行第5个字符 i=0; while(dis2[i]!='\0') { lcd_wdat(dis2[i]); //显示字符 i++; } delay(200); delay(200); delay(200); delay(200); delay(200); lcd_wcmd(0x01); //清除LCD显示内容 lcd_pos(1); //设立显示位置为第一行第1个字符 i=0; while(dis3[i]!='\0') { lcd_wdat(dis3[i]); //显示字符 i++; } delay(200); delay(200); delay(200); delay(200); delay(200); }/********************************************************************当前参数显示界面******************************************************************/voidshow() //欢迎界面{ BYTEi; lcd_init(); //初始化LCD delay(10); lcd_pos(0); //设立显示位置为第一行第1个字符 i=0; while(dis4[i]!='\0') { lcd_wdat(dis4[i]); //显示字符 i++; } i=0; while(i<6) { lcd_wdat(setv[i]); //显示字符 i++; } lcd_pos(0x42); //设立显示位置为第二行第3个字符 i=0; while(dis5[i]!='\0') { lcd_wdat(dis5[i]); //显示字符 i++; } i=0; while(i<6) { lcd_wdat(getv[i]); //显示字符 i++; }}/********************************************************************断电保存子函数组******************************************************************/voidshort_delay(){;;}void_24hc_init(){ sda=1; scl=1;//初始化释放总线} voidstart()//信号开始函数{ sda=1;short_delay(); scl=1; short_delay(); sda=0;short_delay(); }voidstop()//信号结束函数{ sda=0; short_delay(); scl=1; short_delay(); sda=1; short_delay();}voidresponse()//应答信号{uchari; scl=1; short_delay(); while((sda==1)&&(i<250))i++;//若无应答(sda==1),则一段时间后默以为应答 scl=0; short_delay();}voidwrite_byte(uchardate)//写数据函数{ uchartemp; uchari; scl=0;short_delay(); temp=date; for(i=0;i<8;i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论