张玲丽(武汉职业技术学院 电子信息工程学院,湖北 武汉 430074)
基于单片机的LCD数字电流表的设计与实现
张玲丽
(武汉职业技术学院电子信息工程学院,湖北武汉 430074)
本文中数字电流表的控制系统采用AT89S51单片机,A/D转换器采用ADC0809为主要硬件,实现数字电流表的硬件电路与软件设计。该系统的数字电流表电路简单,所用的元件较少,成本低,调节工作可实现自动化。数字电流表可以测量0~200 mA的8路输入电流值,并在LCD液晶显示屏上显示出来。
单片机;数字电流表;A/D转换器;液晶显示屏
在现实中,根据测试系统的要求,往往需要采集被测对象的各种参数,如电压、电流等,这些参数的采集是至关重要的,它们直接影响到整个测试系统的测试精度。在有些应用中,需要对电流进行检测,必须先将其电流信号转换为电压信号,然后才能实现A/D转换。常用的转换方法是在电路中加入精密电阻,由此将电流信号转换为电压信号[1]。这种方法的优点是测量简单方便,但是这种方法当电流很小时,从电阻上取得的电压值可能很小,影响测量精度,因而很难选择一个合适的阻值;其次,所得到的电流检测信号只有通过放大以后才能进入电路中的比较器,从而增加了电路设计调试时的复杂度。因此,需要采用电流/电压转换芯片,并结合单片机以实现对电流信号的检测。本文中采用精密电阻,克服了常规测量电流方法存在的测量范围小、测量误差大等缺点,可提高测量精度,同时采用单片机可实现自动检测。
本设计旨在设计一款测量范围在 0~200 mA、显示精度在小数点前一位的基于 AT89S51单片机带液晶显示功能的电流表,经查阅多种相关资料,确定本设计的总体框图如图1所示。
图1所示电路工作过程:将需要检测的电流信号经过I/V变换变为电压信号,将其输出的电压信号连接到ADC0809进行 A/D转换,电压信号经过采样后,输出到单片机,单片机控制中断的过程以及数据的读取过程,最后通过控制液晶显示所读取的数据。
1.1I/V变换电路部分
对本设计来说,由于精度要求并不高,故用有源 I/V即可满足要求,有源 I/V变换是利用有源器件——运算放大器和电阻电容组成的,如图2所示。
图2 有源I/V变换
该有源I/V变换电路利用同相放大电路,把电阻R1上的输入电压变成标准输出电压。该同相放大电路的放大倍数为:
若取 R1=20 Ω,R2=100 kΩ,R3=100 kΩ,R4=25 kΩ,R5=10 kΩ,则当输入电流为0~200 mA时,对应于0~5 V的电压输出。
1.2A/D转换模块
基于成本、功耗、分辨率、模拟电压转换范围等因素,此处选择ADC0809芯片。ADC0809与8051单片机的硬件接口有3种形式,分别是查询方式、中断方式和延时等待方式。A/D转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。在本设计中,选择中断方式,即把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。
1.3单片机模块
该电流表可测量0~200 mA的直流电压,通过电位器调节产生,显示位数3位[2],工作电压5 V。通过 A/D转换芯片ADC0809把模拟信号转换为数字量传送到单片机的P3口,并在P2口把转换的结果显示出来。在仿真软件 Protesus[3]里选择元器件后连接电流表总图,如图3所示。
本设计选用的AT89S51是ATMEL公司推出的高性能8位微控制器,由于 ADC0809无片内时钟,时钟信号可由 AT89S51的 ALE信号经D触发器二分频后获得。ALE引脚的脉冲频率是8051时钟频率的1/6。本设计中单片机时钟频率采用6 MHz,则ALE输出的频率是1 MHz,二分频后为500 kHz,符合ADC0809对频率的要求。
1.4显示部分
图3 基于AT89S51的数字电流表电路图
本电流表的显示[4]选择 LCDl602型 LCD,它具有电流小、功耗低、体积小、字迹清晰、美观、方便、使用寿命长、无电磁辐射等优点。从图 3中可看出其与 AT89S51 的P0口相连,其DO~D7为8位双向数据线,VSS为地电源,VDD接 5 V正向电源,VEE为液晶显示器对比度调整端,接正向电源时对比度最弱,而接地电源时对比度最高。该引脚通过一只1 kΩ的电位器来调整其对比度。RS为寄存器选择引脚,RS为高电平时选用数据寄存器;RS为低电平时选用指令寄存器。RW为可读写信号引脚,RW高电平时为读操作;RW低电平时为写操作。当RS和RW共同为低电平时则写入指令或者显示地址;当RS为低电平、RW为高电平时为读忙信号;当RS为高电平、RW为低电平时为写人数据。E为使能端,当E由高电平跳变为低电平时,LCD液晶模块开始执行命令。
本电流表的主程序流程包括:系统初始化、中断处理程序、数值转换程序、显示处理程序。较关键的是数据采集部分和显示部分。
2.1数据采集部分
本部分程序设计的思想如下:首先由ADC0809采集数据,采集完成后单片机通过中断将数据读入,然后将所得十六进制数转换成十进制数,将此十进制数的百、十、个位分别取出,在预先设置好的表中查出其所对应的显示指令并显示出来。以下为数值转换的主代码[5]。
codes=PORT;//将中断值赋予codes
codes1=(codes&0xf0)>>4;//取出codes的高 4位
codes0=codes&0x0f;//取出codes的低4位
code_d=codes1*16+codes0;//将 codes转化为十进制数
bai=code_d/100;//将code_d的百位取出
shi=code_d/10%10;//将code_d的十位取出
ge=code_d%10;//将code_d的个位取出
2.2数值显示程序
这部分程序首先要将单位mA显示出来,因为这单位是不变的。要把测得的数值在液晶屏上显示出来时,此处调用一个getchar函数。在这个函数中,用了一个do{}while语句。在此语句的一开头首先测试液晶模块是否空闲,若不空闲则等待其空闲,当液晶空闲时,执行嵌套switch/case语句。由于要显示三个数字,所以设定了一个变量 i,当i=0时显示百位,当i=1时显示十位,当 i=2时显示个位。显示数字时可选择查表法。先建立三个表,每一位对应一个表。以下为显示十位的例子。
显示完成后,进行适当的延时以保证显示的稳定性。
在本次设计中,通过使用 Proteus绘制电路图,用 C语言编写程序,程序运行完毕后,电压表的显示屏上就可以显示出电流数值来。调节电位器,显示数值就会发生变化。电压表的最小显示值是0 mA,最大显示值是200 mA,这与设计目的一致,1 s内大约可以测量 2次电压值。
[1]柳金龙.浅谈数字电压表的特点[J].中国计量,2004(8):43-44.
[2]王韬.3位半积分式 A/D转换DC电压表[J].电子设计工程:电子世界,2002(2):44-45.
[3]周润景,张丽娜.刘映群.PROTEUS入门使用教程[M].北京:机械工业出版社,2007.
[4]马俊,刘晓林.智能键盘字符输入及LCD显示系统设计[J].电子设计工程,2009,17(1):66-68.
[5]马忠梅,籍顺心,张凯,等.单片机的 C语言应用程序设计(第 3版)[M].北京:北京航空航天大学出版社,2003.
A design and implementation of LCD digital voltmeter based on the single chip microcomputer
Zhang Lingli
(College of Electronic Information Engineering,Wuhan Polytechnic,Wuhan 430074,China)
In this paper,a hardware and software design of an ammeter was given.This system is based on AT89S51.The ammeter contained an A/D converter using ADC0809 as main hardware.Its characteristics were significant,such as simple,less components,low cost.It adjusted its work automatically.The digital ammeter can measure 0~200 mA 8-way input current values,and displayed on the LCD screen.
single chip microcomputer;digital ammeter;A/D converter;liquid crystal display
TM932
A
1674-7720(2015)05-0032-03
(2014-09-12)
张玲丽(1980-),女,硕士研究生,讲师,主要研究方向:通信技术。