首页 | 期刊简介 | 编辑部 | 广告部 | 发行部 | 在线投稿 | 联系我们 | 产品信息索取
2024年4月19日星期五
2011年第01期
 
2010年第12期
 
2010年第11期
2010年第11期
 
2010年第10期
2010年第10期
 
2010年第09期
2010年第09期
 
2010年第09期
2010年第08期
 
2010年第07期
2010年第07期
 
2010年第06期
2010年第06期
 
2010年第05期
2010年第05期
 
2010年第04期
2010年第04期
 
2010年第03期
2010年第03期
 
2010年第02期
2010年第02期
 
2010年第01期
2010年第01期
 
2009年第12期
2009年第12期
 
2009年第11期
2009年第11期
 
2009年第10期
2009年第10期
 
2009年第9期
2009年第9期
 
2009年第8期
2009年第8期
 
2009年第7期
2009年第7期
 
2009年第6期
2009年第6期
 
2009年第5期
2009年第5期
 
2009年第4期
2009年第4期
 
2009年第3期
2009年第3期
 
2009年第2期
2009年第2期
 
2009年第1期
2009年第1期
 
2008年第12期
2008年第12期
 
2008年第11期
2008年第11期
 
2008年第10期
2008年第10期
 
2008年第9期
2008年第9期
 
2008年第8期
2008年第8期
 
2008年第7期
2008年第7期
 
2008年第6期
2008年第6期
 
2008年第5期
2008年第5期
 
2008年第4期
2008年第4期
 
2008年第3期
2008年第3期
 
2008年第2期
2008年第2期
 
2008年第1期
2008年第1期
高频开关电源监控系统液晶显示模块的设计
Design of Liquid Crystal Indicators Used on High Frequency Power Monitor System
武汉大学电气工程学院


摘 要:本文以89C52单片机为核心,阐述了高频开关电源监控系统液晶显示模块的设计框架,介绍了 89C52与液晶的接口电路,并以C51为开发平台,系统地介绍了用液晶显示监控系统参数的方法,并给出了相应的C51源程序,该方案已经获得应用。

关键字:高频开关电源; 监控系统; 液晶显示 C51


引言

供电电源和人们的工作、生活息息相关,一旦发生故障将导致系统瘫痪,造成局部乃至社会性的巨大影响。高频开关电源由于体积小、功率密度高、运行可靠,深受人们欢迎。常用电源系统配置若干个高频开关电源模块,(N+1)冗余并联运行,将220V交流电转换成负载所要求的直流电,电瓶并联于系统输出,正常情况下由模块输出对其充电,停电时由电瓶放电供给负载,保证其正常工作,同时切换备用油机投入发电。为此我们设计了一个以89C52单片机为核心的控制器,监控高频开关电源的工作状况,进行智能管理,包括电压调谐、电瓶管理、模块限流、故障判断及报警、参数及状态显示等。

在高频开关电源的监控系统中,使用液晶作为显示输出设备。液晶除了显示西文和数字外,还可显示汉字及各种图像,因此近年来广泛用于现代智能仪器及自动化仪表中。由于用汇编语言编写的汉字显示程序难于阅读,不同的液晶控制器与单片机的接口也不尽相同,本文着重介绍具有内藏控制器的液晶板与89C52的接口电路,并给出了显示片内汉字及片外二级汉字字库的方法和相应的C51源程序。


监控系统显示部分的主要原

高频开关电源监控系统需要控制的参数通常有三相交流电压、模块输出电压、模块电流、电瓶电压、电瓶电流、负载电压等模拟量及电压输入正常、工作正常、风扇故障、开关机信号、风扇强迫风冷等开关量。监控的参数众多,一屏无法全部显示,因此程序框架采用树状分支结构,如图1所示。

开机初始化后,第一屏显示三个主要的参数值(交流电压、输出电压、输出电流),参数数值动态刷新显示。如果当前存在故障,则蜂鸣器报警,液晶反转闪烁显示"故障",按"确认"键可进入故障屏查看故障内容。程序设计故障内容可保存,以便于查看检修,按"清除"键可清除当前不存在的故障。若要查看系统其它信息,在第一屏按"操作"键可换屏进入主菜单选项屏,汉字反转显示以表示当前光标的位置。通过"↑ "、"↓ "键移动光标,可选择电压、电流、工作状态、参数设置等四个选项,按"确认"键可进入当前光标位置相应的选项。

电压屏又细分为直流电压、交流电压两屏;电流屏分为电源模块电流和直流电流两屏。在工作状态屏中显示当前开机的电源模块、电瓶均浮充、系统加减开关管等状态,同时可打开/关闭报警声音、查看系统参数信息等。在参数设置中,可显示修改均浮充电压、过压值、欠压值、限流值、均充时间、均充周期等十几个系统工作参数。为防止参数被随意修改,在进入参数设置前设置了密码输入屏,同时程序对参数可修改范围进行自动限幅,保证系统运行的安全性,参数值保存在串行EPROM芯片中,在其它屏下按"操作"键则返回第一屏。

图1 系统主程序框图(略)


系统参数的显示分为汉字部分和数值部分。对于数值部分,首先要将显示单元内容由十六进制转换为十进制,送到RAM中特设的四个单元(程序设计显示数值最多为四位数),然后再将这四个单元内容依次送显示。对于显示时必要的修饰,如是否带小数点,数值不以虚零开头等,只需加必要16高频开关电源监控系统的判断即可。参数修改,实际上是修改相应进制转换的四个RAM单元中的十进制内容,同时不断送显示,其中要考虑RAM单元的定位及小数点的处理。参数修改确认后,将四个RAM单元的内容经进制转换后送到相应参数单元,同时送串行EPROM芯片保存。对于汉字部分,本程序中汉字点阵直接采用汉字库,一些特殊字符则自编点阵。下面将着重介绍汉字显示部分。


监控系统显示部分的软硬件设计

图2为89C52与液晶的接口电路原理图。(略)

系统显示采用内藏T6963C液晶控制器的MGL(S)24064CCFL型液晶板(清华蓬远公司产),长240个点,宽64个点。

程序存放在89C52内部EEPROM中,89C52与液晶的接口电路不需扩展外围程序芯片,EA/VP脚接高电平。外围扩展32K静态RAM62256作为数据存储器以及扩展存放二级汉字字库的字模512K ROM 27C4001。由于27C4001需19位地址线,而89C52只有16位地址线,因此,我们分别使用89C52的P10、P11、P12、P13为A16、A17、A18、A19。液晶、62256及27C4001的片选信号用GAL16V8对A17、A18、A19进行译码产生。其逻辑关系方程为:

液晶的接口信号包括数据D0至D7、片选CS-LCD信号、地址线A0、读信号RD、写信号WR、电源VCC、地GND、复位/RES以及对比度负压信号及背光信号等。对液晶来说,A0=0时为液晶数据口,A0=1时为液晶命令口。
下面介绍软件设计。选通LCD、62256及27C4001的函数分别为

SelectLcd()、Select62256()、Select27C4001()。具体形式如下:

void Select27C4001() 
{ P13=0;}
void Select62256() 
{ P13=1;P12=0;P11=0;}
void SelectLcd() 
{ P13=1;P12=0;P11=1;}

对液晶的操作包括初始化程序和应用程序。液晶的数据口为DataPort XBYTE [0X0000],命令口为DataPort XBYTE [0X0001]。对液晶进行操作时必须检查液晶是否忙。我们设计了检查液晶是否忙的函数Check-Lcd-Busy(),具体如下:

voidCheck-Lcd-Busy()
{ unsigned char data statu;
SelectLcd();
While(1)  
{ statu=CmdPort;
if((statu^0==0x01)&(statu^1==0x02))break;   
}
}
对液晶的初始化程序为InitLcd(),如下:
void InitLcd()
{ Check-Lcd-Busy();
DataPort=0;
Check-Lcd-Busy();
DataPort=0;
Check-Lcd-Busy();
CmdPort=0x40; /*设置文本显示区首地址*/
Check-Lcd-Busy();
DataPort=0x20;
Check-Lcd-Busy();
DataPort=0x00;
Check-Lcd-Busy();
CmdPort=0x41; /*设置文本显示区宽度,即一 行显示所占字节数*/
Check-Lcd-Busy();
DataPort=0;
Check-Lcd-Busy();
DataPort=0x08;
Check-Lcd-Busy();
CmdPort=0x42;  /*设置图形显示区首地址*/
Check-Lcd-Busy();
DataPort=0x20;
Check-Lcd-Busy();
DataPort=0x00;
Check-Lcd-Busy();
CmdPort=0x43; /*或文本属性区宽度,即一行 显示所占字节数*/
Check-Lcd-Busy();
CmdPort=0xA7; /*设置光标形状=8 8*/   
Check-Lcd-Busy();   
CmdPort=0x80; /*设置显示方式*/   
Check-Lcd-Busy();   
CmdPort=0x9F; /*设置显示开关,图形、西文显 示*/
}

在液晶上显示片内自定义16 16汉字的函数为Write-CC(unsigned int x,unsigned int y,unsigned,int,CCcode)。x,y分别为液晶的横坐标与纵坐标,CCcode为所要显示的自定义16 16汉字字模表的第几个汉字,CCTAB为汉字字模表的首址。其具体函数如下:

void Write-CC(unsigned int x,unsigned int y,unsigned int CCcode)
{ unsigned int data Dsp-Ram-Addr,para;
unsigned char data Hz-Pattern-L,Hz-Pattern-R,i;
unsigned char data code * Hz-Ptr;
Select62256();
Dsp-Ram-Addr=0x0800+y*32+x; /*LCD显示缓冲区首地 址=0800H+O-Y 20H+O-X*/
Hz-Ptr=CCTAB+CCcode 32; /*计算汉字点阵首地址*/
for(i=0;i<16;i++) /*共16行*/
{ para=Dsp-Ram-Addr;
Check-Lcd-Busy();
DataPort=para&0x00FF; /*送显示指针低位*/
para=para>>8;
Lcd-Busy();
DataPort=para&0x00FF; /*送显示指针高位*/
Check-Lcd-Busy(); /*写入地址*/
CmdPort=0x24;
Hz-Pattern-L=*Hz-Ptr;
Check-Lcd-Busy();
DataPort=Hz-Pattern-L; /*送左边8个像点的汉字字*/
Check-Lcd-Busy();
CmdPort=0xC0; /*写入8个像点的汉字字模*/
Hz-Ptr++;
Hz-Pattern-R=*Hz-Ptr;
Check-Lcd-Busy();
DataPort=Hz-Pattern-R; /*送右边8个像点的汉字字*/
Check-Lcd-Busy();
CmdPort=0xC0; /*写入8个像点的汉字字模*/
Hz-Ptr++;
Dsp-Ram-Addr=Dsp-Ram-Addr+0x20; 
}
}

在液晶上显示片外二级汉字字库的函数为Write-CC-EX(unsigned int x,unsigned int y,unsigned int Chinese)。x,y分别为液晶的横坐标与纵坐标,Chinese为所要显示具体汉字。其具体函数如下:

voidWrite-CC-EX(unsigned int x,unsigned int y,unsigned int Chinese)
{unsigned int data Dsp-Ram-Addr,para;
unsigned char data i,statu,Hz-Left,Hz-Right,tmp;
unsigned long data Hz-P-Addr,t;
data unsigned char xdata *HZ-PL;
Select62256();
Dsp-Ram-Addr=0x0800+y2 0x20+x2;/*LCD显示缓冲区首地址=0800H+O-Y 20H+O-X*/
/*计算汉字点阵首地址*/
Hz-P-Addr=((Chinese>>16)&0x00FF-0xA1L);/*Chinese实际为汉字的内码,由内码计算汉字点阵首地址*/
Hz-P-Addr=Hz-P-Addr+94L*(Chinese&0x00FF-0xA1L);
Hz-P-Addr*=32L;
for(i=0;i<0x10;i++)
{ P1=(P1&0xF0)|((Hz-P-Addr&0x000FFFFFL)>>16);/*此操作已包含了选通27C4001的功能*/
Hz-PL=(unsigned int)Hz-P-Addr; 
Hz-Left=*Hz-PL;/*取本行左8个像点数据*/ 
Hz-P-Addr=Hz-P-Addr+1;
P1=(P1&0xF0)|((Hz-P-Addr&0x000FFFFF)>>16);/*此操作已包含了选通27C4001的功能*/ 
Hz-PL=(unsigned int)Hz-P-Addr; 
Hz-Right=*Hz-PL; /*取本行右8个像点数据*/ 
Hz-P-Addr=Hz-P-Addr+1;
Check-Lcd-Busy(); 
Para=Dsp-Ram-Addr; 
DataPort=para&0x00FF; 
Check-Lcd-Busy(); 
para=para>>8; 
DataPort=para&0x00FF; 
Check-Lcd-Busy(); 
CmdPort=0x24; 
Check-Lcd-Busy(); 
DataPort=Hz-Left; /*写入本行左8个像点数据*/ 
Check-Lcd-Busy(); 
CmdPort=0xC0; /*且RAM地址自动加一*/ 
Check-Lcd-Busy(); 
DataPort=Hz-Right; /*写入本行右8个像点数据*/ 
Check-Lcd-Busy(); 
CmdPort=0xC0; /*且RAM地址自动加一*/ 
Dsp-Ram-Addr=Dsp-Ram-Addr+0x20;
}
}

在调用Write-CC(unsigned int x,unsigned int y,unsigned int CCcode)时必须自己预先定义好16 16的汉字字模。由于我们使用了P1口对LCD、27C4001、62256进行选通,因此,要特别注意SelectLcd(),Select27C4001()和Select62256()的调用情况。由于调用Write-CC(unsigned int x,unsigned int y,unsigned int CCcode)和Write-CC-EX(unsigned int x,unsigned int y,unsigned int Chinese)包含了函数的参数传递,而传递这些参数必须使用数据存储区62256,所以在调用Write-CC(*,*,*)和Write-CC-EX(*,*,*)之前,必须先调用Select62256()函数以保证选通62256,否则会出现无法预测的错误。

 
 
 
 
 
 
         
版权所有《世界电子元器件》杂志社
地址:北京市海淀区上地东路35号颐泉汇 邮编:100085
电话:010-62985649
E-mail:dongmei@eccn.com