武汉理工大学《学科基础课群课设》数字电流源报告

上传人:1777****777 文档编号:38066400 上传时间:2021-11-05 格式:DOC 页数:33 大小:1.29MB
收藏 版权申诉 举报 下载
武汉理工大学《学科基础课群课设》数字电流源报告_第1页
第1页 / 共33页
武汉理工大学《学科基础课群课设》数字电流源报告_第2页
第2页 / 共33页
武汉理工大学《学科基础课群课设》数字电流源报告_第3页
第3页 / 共33页
资源描述:

《武汉理工大学《学科基础课群课设》数字电流源报告》由会员分享,可在线阅读,更多相关《武汉理工大学《学科基础课群课设》数字电流源报告(33页珍藏版)》请在装配图网上搜索。

1、武汉理工大学学科基础课群课设报告 课程设计任务书学生姓名: 专业班级: 通信1104班 指导教师: 艾青松 工作单位: 信息工程学院 题 目: 数控直流电流源初始条件: Protel软件,电路基础,通信原理基础,模拟电子技术基础要求完成的主要任务: 设计并制作数控直流电流源。输入交流200240V,50Hz;输出直流电压10V。要求;1)输出电流范围:200mA2000mA;2)可设置并显示输出电流给定值,要求输出电流与给定值偏差的绝对值给定值的1+10 mA;3)具有“+”、“-”步进调整功能,步进10mA;4)改变负载电阻,输出电压在10V以内变化时,要求输出电流变化的绝对值输出电流值的1

2、+10 mA; 5)纹波电流2mA;时间安排:序号阶段内容所需时间1方案设计2天2硬件设计3天3软件设计3天4系统仿真2天系统调试3天答辩1天合 计14天指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日 目录摘要1Abstract21 绪论31.1目的31.2任务31.3要求32 相关理论知识42.1理论分析42.2 系统介绍52.3 AT89C52芯片介绍63 硬件设计93.1 恒流源模块93.2 单片机模块93.2.1 AT89C52 硬件电路设计93.3 键盘模块113.3.1 MM74C922113.3.2 键盘电路113.4 显示模块123.4.1 1602LCD显示

3、123.4.2 LCD显示硬件电路123.5 A/D模块133.5.1 芯片MAX1241133.5.2 A/D模块电路143.6 D/A模块143.7 存储模块153.7.1 芯片24C02C153.7.2 存储模块电路153.8稳压电源模块154 软件仿真164.1 软件仿真165 个人小结186 参考文献19附录 程序代码20 摘要本系统由单片机程控设定数字信号,经过D/A转换器AD5320输出模拟量,控制输出功率管的基极,随着功率管基极电压的变化而输出不同的电流。单片机系统还兼顾对恒流源进行实时监控,输出电流经过电流/电压转换后,通过A/D转换芯片MAX1241,实时把模拟量转化为数字

4、量,再经单片机分析处理,通过数字量形式的反馈环节,使电流更加稳定,这样构成稳定的压控电流源。关键词:压控恒流源; AT89C52; 数控电源; AbstractIn the system, the digitally programmable signal from SCM is converted to analog value by DAC AD5320, is sent to the base electrode of power transistor, so an adjustable output current can be available with the base elec

5、trode voltage of power transistor. On the other hand, The constant current source can be monitored by the SCM system real-timely, its work process is that output current is converted voltage, then its analog value is converted to digital value by ADC MAX1241, finally the digital value as a feedback

6、loop is processed by SCM so that output current is more stable, so a stable voltage-controlled constant current power is designed.KeyWords:voltage-controlled constant current source;AT89C52;Numerical controlled source;1. 绪论1.1.目的1、在实践中对通信原理、微机原理、模拟电子技术基础、数字电子技术基础、电磁场与电磁波等学科基础课的课堂理论知识做进一步巩固;2、锻炼对学科基础

7、课的综合运用能力。1.2.任务设计并制作数控直流电流源。输入交流200240V,50Hz;输出直流电压10V。其原理示意如图所示。键盘控制器电流源负载显示器电 源1.3.要求(1)输出电流范围:200mA2000mA;(2)可设置并显示输出电流给定值,要求输出电流与给定值偏差的绝对值给定值的1+10 mA;(3)具有“+”、“-”步进调整功能,步进10mA;(4)改变负载电阻,输出电压在10V以内变化时,要求输出电流变化的绝对值输出电流值的1+10 mA; (5)纹波电流2mA;2.相关理论分析2.1.理论分析首先,在数控方面采用单片机比CPLD和FPGA等可编程逻辑器件好,因为此处只是一般用

8、途的控制,没有必要选用价格昂贵的CPLD和FPGA,而且他们用在此处并不合适,控制起来显得很麻烦。而单片机则不同,他有着非常成熟的技术,这方面的参考文献也很多,而且他从来就是用于控制方面的,在这方面有着天生的优势。还有他价格也不贵,仅几元人民币。对于这样的应用系统比较划得来。其次在恒流源方面,我的方案也很好。从理论上看,运放是接成比较器的,作为模拟反馈的,这样只要运放的输入不变,那么三极管的是不变的,根据三极管的共射极输入特性可知,不变时,和也保持不变,而且,。当比较大时。当运放的输入改变时,也改变了值,这样也就改变了和的值,而且这个变化基本也是呈线性的。这也就是本系统的恒流原理。由于器件受温

9、度的影响以及局部非线性的存在,这样的恒流源不能做到真正的恒流,因此,当外界条件发生变化时,我要及时给予补偿,只有这样才能做到真正的恒流。这也就是为什么要加入模数转换器的真正原因,他能实时测量电流的变化并按照一定的算法及时给予补偿,采用数字补偿逐次逼近的方式作为反馈调整环节,由程序控制调节功率管的输出。当改变负载大小时,基本上不影响电流的输出。模数转换器还起到测量的作用,同时送显示让我知道实际的电流输出值。2.2. 系统介绍本系统以AT89C52单片机为主控制器,通过键盘来设置直流电源的输出电流,设置步进等级可达1mA,并可由液晶模块显示实际输出电流值和电流设定值。首先,采用单片稳压芯片实现直流

10、稳压,然后采用了分立元器件实现稳流。为实现对输出电流控制:一方面,通过 D/A转换器(AD5320)输出实现电流的预置,再经过运算放大器控制晶体管的输出电流。另一方面,单片机系统还兼顾对恒流源进行实时监控,输出电流经过电流/电压转变后,通过A/D转换(MAX1241)芯片,实时把模拟量转化为数字量,再经单片机分析处理, 通过数据形式的反馈环节,使电流更加稳定,这样构成稳定的压控电流源。此外,系统还增加了存储设备,能够保存掉电前的数据,使系统更加方便使用。系统原理框图如下图1:图1 系统原理框图2.3. AT89C52芯片介绍我选择的是ATMEL公司的AT89C52单片机,它是一种低功耗、高性能

11、CMOS8位微控制器,具有8K ISP(在系统可编程)Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89C52主要引脚的主要功能:VCC:接+5V电源。GND:接地。P0口:P0口为一个8位漏极开路双向I/O口,作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被

12、作为低8位地址/数据复用。在这种模式下,P0口具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口输出缓冲器能驱动4个TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.1分别作定时器/记数器2的外部记数输入(P1.0/T2)和定时器/记数器2的触发输入(P1.1/T2EX),具体如下表1所示。在flash编程和校验时,P1口接收低8位

13、地址字节。P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如MOVX DPTR)时,P2口送出高八位地址。在这种应用中,P2口P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P3口:P3 口是一个具有内部上拉电阻的8

14、 位双向I/O 口,P2 输出缓冲器能驱动4 个 TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89C52特殊功能(第二功能)使用,如下表2所示。在flash编程和校验时,P3口也接收一些控制信号。RST:复位输入。晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。ALE/ :地址锁存控制

15、信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚()也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置 “1”,ALE操作将无效。这一位置 “1”,ALE仅在执行MOVX 或MOVC指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。:外部程序存储器选通信号。当AT89C52从外部程序存储器执行外部代码时,在每

16、个机器周期被激活两次,而在访问外部数据存储器时,将不被激活。/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,必须接GND。为了执行内部程序指令,应该接VCC。在flash编程期间,也接收12伏VPP电压XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。 图2 AT89C52引脚图3. 硬件设计3.1. 恒流源模块用“运放+大功率三极管”的结构构成恒流源。大功率三极管选用TIP122型号,它是应用范围广、功率小、频率低的达林顿, NPN极性型,特征频率:1000(MHz),集电极允许电流:8(A),集电极

17、最大允许耗散功率:48(W)。其性能满足本设计要求,同时可以通过功率管的不同容量来满足不同的应用要求。采用常用的大功率电阻作为采样电阻,输出电流波动比较大,而康锰铜丝是一种温度特性佳的阻性元件,选其作为取样电阻,其两端电压正比于流过的电流,因此该电压的反馈就是负载电流的反馈。其原理如图2所示: 图3 恒流电路3.2. 单片机模块3.2.1. AT89C52 硬件电路设计 单片机系统是整个数控系统的核心部分,它主要用于键盘按键管理、数据处理、实时采样分析系统参数及对各部分反馈环节进行整体调整。主要包括AT89C52单片机、振荡电路、复位电路等。电路如下图3所示:图4 单片机控制电路(1) AT8

18、9C52单片机的P0口是个双向口,可以作输出输入口,在本系统中用作显示部分,P1口也是个双向口,主要接A/D、 D/A和24C02C。P2口的P2.0、 P2.1、 P2.2、P2.3接键盘输入,P2.4、 P2.5用于键盘控制是能端。而P3口主要用于中断。(2) 复位电路 复位是单片机初始化操作。复位将单片机复到初始化状态,目的是使CPU及个专用寄存器处于一个确定的初始状态。如前面介绍,在单片机的复位信号RST上保持2个机器周期以上的高电平,单片机就会复位。本次设计采用的是手动复位方式,利用按键闭合是单片机复位端上保持接通高电平状态两个机器周期以上。 (3) 振荡电路 该电路是由内部反相放大

19、器通过引脚XTAL1和引脚XTAL2与外接的晶体以及电容C3和C4构成,产生出晶体振荡信。此晶振信号接至内部的时钟电路。图中的晶振频率为11.0592MHz,外接晶体时,电容C3和C4通常选30pF。虽然对外接电容没有严格要求,但电容的大小会影响振荡频率、振荡器的稳定性和起振的速度。振荡器的这些特性对弹片机的应用影响很大,因此在设计印刷电路板时,应使晶体和电容尽可能与单片机靠近,以保证稳定可靠。3.3. 键盘模块键盘的作用是对单片机输入数据,设计中要求能使电流进行“+”,“-”及电流值的设定,所以采用键盘为44的矩阵键盘,用MM74C922芯片进行识别按键后送AT89C52的并行口P2, P2

20、.0P2.3作为键盘输入口。传统的44矩阵键盘识别处理程序的编写相对烦琐。所以采用MM74C922芯片来将44矩阵键盘的键值转换成4位二进制码以简化程序的编写。3.3.1. MM74C922MM74C922是一款集成了键盘防抖动技术和按键检测功能的16位按键的译码芯片。由CMOS工艺技术制造,工作电压3-15V,“二键锁定”功能,编码输出为三态输出,可直接与微处理器数据总线相连,内部振荡器能完成44矩阵键盘扫描,亦可用外部振荡器使键盘操作与其他处理同步,通过外接电容避免开关发生前、后沿弹跳所需的延时。有按键按下时数据有效线变高,同时封锁其他键,片内锁存器将保持键盘矩阵的4位编码,可由微处理器读

21、出。其引脚图如图4所示: 图5 MM74C9223.3.2. 键盘电路由X1X4,Y1Y4的连接方式,即可确定每一个按键的编码。如图5所示,从键盘的左下角开始,依次编码为0、1、2E、F。我将A作为设置键,B作为恢复键,C作为加法键,D作为减法键,E作为确认键,F作为取消键。再加上09刚好16个按键。通过DA信号触发中断,由于有按键时,DA为高电平,而单片机的中断信号为低电平,故需在DA信号引脚上接上一个非门,再与单片机的INT0引脚相连。图6 键盘电路3.4 显示模块3.4.1 1602LCD显示液晶显示器由于体积小、质量轻、功耗低等特点,已成为各种便携式电子信息产品的理想显示器。液晶显示器

22、通常可分为两大类,一是点阵型,二是字符型。一般的字符型液晶只有两行,面积较小,能显示字符和一些很简单的图形;而点阵型液晶通常面积较大,可以显示图形和更多的字符。为了方便设计,同时又能满足设计的需要及尽可能降低设计成本。因此,我选择1602LCD液晶显示器。目前常用16*1,16*2,20*2和40*2行等的模块。针对此设计,我选用16*2模块。1602引脚功能说明: 表1 引脚功能表编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15

23、BLA背光源正极8D1数据16BLK背光源负极液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。 3.4.2 LCD显示硬件电路1602LCD的读写控制引脚是第5引脚R/W;在本次设计中,为了降低程序设计,我只用LCD作显示器,在此只对其写操作,所以设计时直接将R/W接地。其电路原理图如图6所示:图7 LCD电路3.5 A/D模块3.5.1 芯片MAX1241MAX1241是MAXIM公司推出的一种串行A/D转换器,具有低功耗、高精度、高速度、体积小、接口简单等优点。MA

24、X1241是一种单通道12位逐次逼近型串行A/D转换器,功耗低,转换速度快。它使用逐次逼近技术完成A/D转换过程。最大非线性误差小于1LSB,转换时间9s。采用三线式串行接口,内置快速采样/保持电路。MAX1241内部结构(如图7)和管脚定义(如图8):图8 MAX1241内部结构 表2 功能表管脚名称功能参数1VDD电源输入+2.7+5.2V2VIN模拟电压输入03SHDN节电方式控制端“0”节电方式;“1”工作4REF参考电压输入端1.0VVDD5GND电源地6DOUT串行数据输出三态7CS芯片选通“0”选通;“1”禁止8SCLK串行输出驱动时钟输入频率范围:02.1MHz图9 MAX12

25、41管脚定义3.5.2. A/D模块电路MAX1241的VDD供电范围为2.75.25V,为减少来自电源的干扰,可在VDD引脚配置4.7F和0.1F的滤波电容。由于MAX1241内部没有参考电源提供,需外接参考电压,只需将Vref接在4.7F电解电容即可;特殊情况下,让悬空,此时,即可在REF引脚输入参考电压,其范围为1.0VDD.REF引脚外接电解电容不宜选择过大,电容越大,MAX1241由待机模式到正常工作模式的唤醒时间将越长。MAX1241的三根数据线,时钟输入端、片选控制端和数据输出端分别由AT89C52的P1.0、P1.1和P1.2控制。MAX1241芯片内部具有采样/保持电路,无需

26、外部保持电容和采样/保持电路。MAX1241的控制线SCLK、DOUT可与AT89C52的通用I/O口直接相连,无需任何接口变换, 模拟电压经前级放大至0VREF 范围后,由AIN引脚输入。其中MAX1241,所用到的+2.5V基准电压,由LM336精密的2.5V并联的稳压二极管提供。其外围电路如图9所示:图10 MAX1241外围电路3.6. D/A模块有前面的计算知,模拟量输出通道我选用了AD公司的单通道12位电压输出D/A转换器,单电源工作,电压范围为2.7V5.5V,时钟频率最高可达30MHz。片内高精度输出放大器提供满电源幅度输出,其基准来自电源输入端,可以提供较大的动态输出范围,它

27、利用能与标准的接口标准兼容的3线串行接口与微处理器交换数据,接口简单。工作过程中,将SYNC置为低电平时候启动写序列,在这个阶段,SYNC线至少要保持低电平一直到SCLK的第16个下降沿,DAC在这第16个下降沿被更新,如果在这之前SYNC被拉为高电平,就意味着写序列中断,此时移位寄存器复位。来自DIN线的数据在SCLK的下降沿随时钟送入16位移位寄存器,输入移位寄存器的数据位数为16位宽,前两位是无关位,接下来2为是控制位,决定控制器件处于哪种工作方式,最后12位是数据位,它们代表着DA转换器即将输出的电压值。在第16个时钟下降沿,最后一位数据随时钟输入并按照给定内容执行已编制好的功能。其外

28、围电路如下图10所示:图11 AD5320外围电路3.7. 存储模块本系统的外扩存储器主要是用来记忆用户数据,因此容量不需要很大,一般的小型存储器芯片就可以。然而从方便系统扩展来和价格来考虑,我选用了EEPROM24C02,它是采用C接口的一种常用2Kbit(2568bit)的存储器。3.7.1. 芯片24C02C24C02C是一种串行存储器,其容量2Kbit。A0、A1 和A2引脚用于多器件工作。将这些输入引脚上的电平与从器件地址中的相应位作比较,如果比较结果为真,则该器件被选中。SDA串行数据引脚为双向引脚,用于把地址和数据输入/ 输出器件。该引脚为漏极开路。因此,SDA 总线要求在该引脚

29、与VCC 之间接入上拉电阻。对于正常的数据传输,只允许在SCL为低电平期间改变SDA 电平。而SDA 电平在SCL 高电平期间若发生变化,表明起始和停止条件产生。WP写保护引脚必须连接到 VSS 或者 VCC。如果连接到 VSS, 写操作使能。如果连接到VCC,写操作被禁止,但读操作不受影响。VCC电源输入引脚,标称条件下在VCC 低于3.8V 时,则VCC 阈值检测电路会禁止内部的擦写逻辑。3.7.2. 存储模块电路将A0、A1、A2全部接地,即决定了该模块的地址为0xA0,24C02C的外围电路如图11所示:图12 24C02C外围电路3.8.稳压电源模块本系统要求自制5V,12V稳压电源

30、,满足对系统的供电。对于5V电源,我们制作了使用7805芯片的稳压电源。电路主要包括:整流电路、滤波电路、稳压电路组成。整流电路采用四个二极管整流,经2200uf电容使电流平缓后用0.1uf电容滤波,然后接至7805,输出是纹波较小的5V直流电压。电路图如下所示:图13 5V电源制作图4.软件仿真在组装硬件之前,做足软件的仿真是硬件能够正常工作的保障!为此,我在设计时,就采用Proteus仿真,这样便于我在编程时,能够及时的发现程序的不足,及时的修改,使我编写的程序更加完美。4.1. 软件仿真首先,我在Proteus里编辑原理图(如图22所示),然后在单片机的属性中导入由在keil软件里编辑的

31、程序生成的HEX文件,即可执行仿真!图14 仿真原理图由于设计要求规定输出为200mA2000mA。因此我在初始化是就默认初始值为200mA。我接着单击键盘上的“加”键,设置值加1,输出值也加1的变化。连续单击几次加键,再单击“减”键,也达到我想要的结果。单击设置键,我输入0200,即要求输出为200mA的电流,单击确认键,发现输出值也达到了200mA。由于我选取的取样电阻值为1欧,因此,我检测的电压值理论上就是输出电流值。如图23所示:图15 Proteus仿真图电路初始时,LCD初始显示是输入200ma,输出200ma。在按下键盘的“加”键是,输入显示是201ma,说明步进是1ma,输出显

32、示201ma,符合要求。按下键盘”减”键是,输入显示回200ma,输出显示20ma,符合要求。当输入显示在2000ma时,再按下“加”键,输入和输出还是2000ma;当输入显示在200ma时,再按下“减”键,输入和输出还是200ma;说明,输出的范围是200-2000ma的电流。按下“设置”键,在输入0700,再按下“确认”和“恢复”键,输入显示700ma,输出也显示700ma,大设置输出电流的目的。5.个人小结 通过此次学科基础课群综合训练课程设计,我的理论知识和实际操作能力都得到了很大的提高。我做的题目是数控直流电流源的设计,尽管这个题目只是电力电子装置中很小的一部分,但我还是从中学到了不

33、少。对于以前电力电子装置的一些疑惑,在这次实践中都迎刃而解了,并且更深切地体会到了一些应用软件在实际工作中的重要作用。而且此次程设计将我们所学的书本只是串起来,使我对这一门课有了一个整体上的了解。像这种设计性的课程,它是一个从无到有的过程,尽管其过程是坎坷的,但是我体会到了成功之后的喜悦。这次课程设计使我知道理论和实际的结合十分重要,尽管在理论上行的通,也许在实际操作中会就会出现许多困难,但如果通过团队和个人的努力解决了所遇到的困难,会更加激我对电路设计及仿真的兴趣。通过这次设计,我学到了很多书本上不曾学到的东西。这次的学科基础课群综合训练课程设计是一次综合性的实验设计,它将它将各种知识结合到

34、一起综合运用到实践上来扩展、弥补、串联所学的知识。通过本次设计我得到了很多收获。首先,明确了单片机的构造以及工作原理单片机是一门非常重视实践的技术,不能总是看书,但要学习它首先应看书,对单片机引脚、内部结构、寄存器和原理有一定地了解和感官认识。其次掌握了C语言的编写程序,能够熟练使用PROTUTES和KEIL的仿真来实现,同时掌握了如何收集、查阅、应用文献资料,如何根据实际需要有选择的阅读书籍和正确确定系统所要使用的元器件的类型。最后感谢老师和同学们的大力支持和帮助。 、6. 参考文献1康华光.高调教育出版社.20052吴友宇.清华大学出版社。20093李群芳.电子工业出版社.20054樊昌信

35、.北京:国防工业出版社.20055谢自美.武汉:华中科技大学出版社6周雪.西安:西安电子科技大学出版社.2004 附录 程序代码系统完整程序如下:#include#include #define uint unsigned int#define uchar unsigned char sbit lcdrs=P24;sbit lcde=P25; sbit keyda=P32;sbit adcs=P10;sbit adsclk=P11;sbit adout=P12;sbit dasync=P13;sbit dasclk=P14;sbit dadin=P15;sbit Sda=P16;sbit Sc

36、l=P17;uchar code dis1 = INPUT mA ;uchar code dis2 = OUTPUT mA ;uchar number4,number14;uint i,n,s,m; /n为键入允许标志控制,s为键入次数计数uint adata1,data2;/延时程序void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/作用:启动IIC总线void Start() Sda=1;_nop_();_nop_();Scl=1;_nop_();_nop_();_nop_();_nop_();_nop_();Sda=0;_

37、nop_();_nop_();_nop_();_nop_();_nop_();Scl=0;/停止IIC总线void Stop() Sda=0;_nop_();Scl=1;_nop_();_nop_();_nop_();_nop_();_nop_();Sda=1;_nop_();_nop_();_nop_();_nop_();_nop_();Scl=0;/应答IIC总线void Ack()Sda=0;_nop_();_nop_();_nop_();Scl=1;_nop_();_nop_();_nop_();_nop_();_nop_();Scl=0;_nop_();_nop_();/非应答IIC

38、总线void NoAck()Sda=1;_nop_();_nop_();_nop_();Scl=1;_nop_();_nop_();_nop_();_nop_();_nop_();Scl=0;_nop_();_nop_();/发送一个直字节void Send(uchar Data)uchar BitCounter=8;uchar temp;do temp=Data;Scl=0;_nop_();_nop_();_nop_();_nop_();_nop_();if(temp&0x80)=0x80)Sda=1;elseSda=0;Scl=1;temp=Data1;Data=temp;BitCount

39、er-;while(BitCounter);Scl=0;/读一个字节并返回uchar Read(void)uchar temp=0;uchar temp1=0;uchar BitCounter=8;Sda=1;doScl=0;_nop_();_nop_();_nop_();_nop_();_nop_();Scl=1;_nop_();_nop_();_nop_();_nop_();_nop_();if(Sda)temp=temp|0x01;elsetemp=temp&0xfe;if(BitCounter-1)temp1=temp1;temp=temp1;BitCounter-;while(Bit

40、Counter);return(temp);/写入数据void WrToROM(uchar Data,uchar Address,uchar Num)uchar j;uchar *PData;PData=Data;for(j=0;jNum;j+)Start();Send(0xa0);Ack();Send(Address+j); /写入存储地址Ack();Send(*(PData+j);/写数据Ack();Stop();delay(10);/读出数据void RdFromROM(uchar Data,uchar Address,uchar Num)uchar j;uchar *PData;PDa

41、ta=Data;for(j=0;jNum;j+)Start();/写入芯片地址Send(0xa0);Ack();Send(Address+j);/写入存储地址?Ack();Start();Send(0xa1);/读入地址Ack();*(PData+j)=Read();/读数据Scl=0;NoAck();Stop();/AD转换uint ad_conver()uint voltage_temp=0;uchar ucloop=12;adcs=1;adsclk=0;adcs=0;while(adout=0);/EOC信号为高表示转换结束adsclk=1;adsclk=0;while(ucloop-)

42、adsclk=1;/上升沿数据稳定并读出voltage_temp=1;if(adout=1)voltage_temp+=1;adsclk=0;adcs=1;return voltage_temp;/DA转换void da_conver(uint dignum)uint dig=0;uchar k=0;dasync=1;_nop_();_nop_();dasync=0;for(k=0;k16;k+)dasclk=1;dig=dignum&0x8000;if(dig) dadin=1;else dadin=0;dasclk=0;_nop_();_nop_();dignum=1;dasync=1;_

43、nop_();_nop_();/显示器写数据void write_date(uchar date)lcdrs=1;P0=date;delay(1);lcde=1;delay(1);/E 下降沿-执行指令lcde=0;/显示器写程序void write_com(uchar com) lcdrs=0;P0=com;delay(1);lcde=1;delay(1);lcde=0;/数据显示void xianshi(uchar z)int j;write_com(0x0c);/D2=1:开显示;D1=0:不显示光标;D0=0:光标不闪烁if(z=1)write_com(0x80+0x09);for(j

44、=0;j4;j+)write_date(numberj+0x30);if(z=2)write_com(0x80+0x49);for(j=0;j4;j+)write_date(number1j+0x30);write_date(m);write_date(A);write_date( );/数据处理void chuli()float data3=0.0;data3=data2/2500.0*4095;adata1=(int)data3;adata1=adata1+m;da_conver(adata1);delay(200);adata1=ad_conver();data3=adata1/4095

45、.0;data3=data3*2500;adata1=(uint)data3;number10=(adata1/1000)%10;number11=(adata1/100)%10;number12=(adata1/10)%10;number13=(adata1/1)%10;xianshi(2);if(adata1data2) m-;if(adata1=data2) m=m;/lcd1602初始化void init()lcde=0;write_com(0x38);/8位数据端口,2行显示,5*7点阵write_com(0x0f);/D2=1:开显示;D1=1:显示光标;D0=1:光标闪烁writ

46、e_com(0x01);/清屏write_com(0x80);/设定地址指针在第一行第一个位置/输出数组显示void print(uchar *str)/while(*str!=0)write_date(*str);delay(5);str+;/清除上次输入数据void clear()uint num;write_com(0x80+0x09);for(num=1;num1)write_com(0x04);/D1=0:地址光标减1;D0=0:整屏不移动write_com(0x10);/光标左移?write_date(?);i=i-1;s=s-1;write_com(0x06);/D1=1:地址光

47、标加1;D0=0:整屏不移动write_com(0x14);/光标右移/设置键功能void shezhi()clear();n=1;i=0;s=1;write_com(0x80+0x09);write_com(0x0f);/D2=1:开显示;D1=1:显示光标;D0=1:光标闪烁write_com(0x06);/D1=1:地址光标加1;D0=0:整屏不移动/+键功能void jia()n=0;/data2=number0*1000+number1*100+number2*10+number3;if(data2=200&data29)number3=0;number2+;if(number29)

48、number2=0;number1+;if(number19)number1=0;number0+;else number3=number3+0;write_com(0x0c);/D2=1:开显示;D1=0:不显示光标;D0=0:光标不闪烁xianshi(1);WrToROM(number,0,4);delay(5);data2=number0*1000+number1*100+number2*10+number3;/-键功能void jian()n=0;/data2=number0*1000+number1*100+number2*10+number3;if(data2200&data2=0|key=9) if(n=1&s=4) i=0;numberi+=key;write_date(key+0x30);s+; 30

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

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!