LCD液晶顯示模塊功耗的測量方法
一 測量原理圖
說明K1 K2 K3 是LCD 模塊的設(shè)置開關(guān)K1 是WDT 選擇開關(guān)閉合時打開WDT 否則關(guān)閉
WDT K2 是TONE 選擇開關(guān)閉合時打開音頻輸出否則關(guān)閉K3 是LCD 模塊振蕩器選擇開關(guān)K3 閉
合時是選擇外部32.768K 晶振否則選擇內(nèi)部RC 振蕩器256K KEY 是確認(rèn)鍵用于循環(huán)測量流
程LED 是測量值可讀數(shù)指示燈當(dāng)MCU 對LCD 模塊設(shè)置完后將把接口的IO 口P0.1 P0.3 P0.5 置
為高阻態(tài)再點亮LED 指示測量值可讀
測量方法通過對K1 K2 K3 選擇LCD模塊的工作方式然后按一下KEY 鍵等LED 點亮?xí)r觀
察LCD 若LCD 全顯則此時電流表測出的電流就是當(dāng)前設(shè)置工作方式全顯的電流再按一下KEY 鍵
LCD 則全滅此時電流測量值就是掉電方式下的電流
二 源程序
/***********************************************************
DLCD.c
本程序是對本公司水表LCD 模塊進(jìn)行調(diào)試及參數(shù)測量,可對LCD 模塊的全顯時的
功耗掉電模工下的功耗WDT及音頻輸出時的功耗進(jìn)行測量.........
**********************************************************/
#include
#define uint unsigned int
/*為SPI.h 設(shè)置LCD 模塊接口端口參數(shù)*/
sbit CS_PORT=P0^1; /*CS 端口*/
sbit CLK_PORT=P0^3; /*WR 端口*/
sbit SDA_PORT=P0^5; /*DATA端口*/
#include
/*模式選擇開關(guān)定義*/
sbit K1=P0^0; /*WDT打開關(guān)閉選擇*/
sbit K2=P1^6; /*音頻輸出打開關(guān)閉選擇*/
sbit K3=P1^4; /*內(nèi)外部晶振選擇*/
sbit KEY=P1^1; /*'確認(rèn)'按鍵*/
sbit LED=P0^7; /*可讀數(shù)指示燈*/
/*命令字定義命令字是'命令模式'的低8 位數(shù)據(jù)*/
#define BIAS 0X52 /*定義1 3 偏壓4 背極*/
#define XTAL32 0X28 /*使用外部晶振*/
#define RC256 0X30 /*使用內(nèi)部256KRC 振蕩器*/
#define SYSEN 0X02 /*打開振蕩發(fā)生器*/
#define LCDON 0X06 /*打開LCD*/
#define SYSDIS 0X00 /*關(guān)閉振蕩發(fā)生器*/
#define LCDOFF 0X04 /*顯示關(guān)閉*/
#define TONE4 0X80 /*設(shè)置BZ 輸出頻率為4K*/
#define TONEON 0X12 /*打開BZ 音頻輸出*/
#define TONEOFF 0X10 /*關(guān)閉BZ 音頻輸出*/
#define CLRWDT 0X1c /*清零WDT*/
#define F1 0X40 /*WDT設(shè)置為4 秒溢出*/
#define IRQEN 0X10 /*IRQ 輸出禁止*/
#define IRQDIS 0X00 /*IRQ 輸出允許*/
#define WDTEN 0X0e /*打開WDT*/
#define WDTDIS 0X0a /*關(guān)閉WDT*/
#define TIMERDIS 0X08 /*關(guān)閉時基輸出*/
/************************************************************
延時函數(shù)
函數(shù)原型: void Delay()
使用: SPI 操作的延時
**********************************************************/
void Delay()
{
uchar i;
for(i=0;i<10;i++); /*用于調(diào)整CLK 脈沖寬度*/
}
/*****************************************************
長延時函數(shù)
函數(shù)原型: void Delay1s()
使用: 長延時.....
******************************************************/
void Delay1s()
{
uchar i;
uint j;
for(i=0;i<10;i++)
for(j=0;j<1300;j++);
}
/*****************************************************
發(fā)送命令函數(shù)A類
函數(shù)原型: void SENDCOMA(uchar com)
使用: 發(fā)送還HT1621 命令時要先發(fā)送ID 值,及命令字用于設(shè)置HT1621.
*********************************************************/
void SENDCOMA(uchar com)
{
Start_spi();
SendBit(0X80,4); /*發(fā)送設(shè)置命令I(lǐng)D=100 0*/
SendByte(com); /*發(fā)送命令字*/
}
/******************************************************
發(fā)送命令函數(shù)B 類
函數(shù)原型: void SENDCOMB(uchar adr)
使用: 發(fā)送還HT1621 命令時要先發(fā)送ID 值,后發(fā)送要寫入數(shù)據(jù)起始地址,
用于對RAM 寫操作(調(diào)用此函數(shù)后即可發(fā)送數(shù)據(jù)) adr 是高5 位有效
*******************************************************/
void SENDCOMB(uchar adr)
{
Start_spi();
SendBit(0XA0,4); /*發(fā)送寫顯示RAM 命令I(lǐng)D=101 0*/
SendBit(adr,5); /*指定寫入地址*/
}
/********************************************************
發(fā)送命令函數(shù)(C 類)
函數(shù)原型: void SENDCOMC(uchar com)
使用: 發(fā)送還HT1621 命令時要先發(fā)送ID 值.然后發(fā)送C 類的命令字
*******************************************************/
void SENDCOMC(uchar com)
{
Start_spi();
SendBit(0X90,4); /*發(fā)送命令I(lǐng)D=100 1*/
SendByte(com); /*發(fā)送命令字*/
}
/********************************************************
向顯示緩沖區(qū)填充
原型: void disp(ucahr dat)
功能: 向顯示緩沖區(qū)填充,以最簡便的形式顯示數(shù)據(jù)
***********************************************************/
void disp(uchar dat)
{
uchar i;
SENDCOMB(0x00); /*把數(shù)據(jù)指針指回0 接著寫入數(shù)據(jù)*/
for(i=0;i<16;i++) /*寫入16 字節(jié)數(shù)據(jù)*/
{
SendByte(dat); /*寫入數(shù)據(jù)*/
}
}
/******************************************************
全顯示的電流測量
可選擇部件WDT 音頻輸出內(nèi)部RC 外部晶振選擇
時基輸出關(guān)閉
******************************************************/
void DISP_ALL()
{
/*顯示芯片初始化同時也是LCD 模塊掉電喚醒程序*/
SENDCOMA(BIAS); /*設(shè)置偏壓,背極數(shù)*/
/*選擇晶振類型*/
K3=1;
if(K3==1)SENDCOMA(RC256); /*設(shè)為內(nèi)晶振256K*/
else SENDCOMA(XTAL32);
/*啟動LCD 振蕩器*/
SENDCOMA(SYSEN); /*啟動振蕩器*/
Delay1s();
SENDCOMA(LCDON); /*顯示使能*/
SENDCOMA(TIMERDIS); /*禁止時基輸出*/
/*看門狗選擇*/
K1=1;
if(K1==0)
{
SENDCOMC(F1); /*WDT設(shè)置為4S*/
SENDCOMA(WDTEN); /*打開WDT*/
SENDCOMA(CLRWDT); /*清零WDT*/
SENDCOMC(IRQEN); /*打開IRQ*/
}
else
{
SENDCOMC(IRQDIS); /*禁止IRQ*/
SENDCOMA(WDTDIS); /*禁止WDT溢出標(biāo)志輸出*/
}
/*音頻輸出選擇*/
K2=1;
if(K2==0)
{
SENDCOMA(TONE4); /*音頻輸出設(shè)為4KHz*/
SENDCOMA(TONEON); /*打開音頻輸出*/
}
else SENDCOMA(TONEOFF); /*否則關(guān)閉音頻輸出*/
disp(0xff); /*輸出全顯數(shù)據(jù)*/
PT0AD=0x3e; /*SPI 接口數(shù)字輸入功能禁止*/
P0M1=P0M1|0x3e; /*設(shè)SPI 口為僅為輸入P0M2 對應(yīng)位已經(jīng)是0*/
LED=1; /*指示測量值可讀*/
KEY=1; /*等待'確認(rèn)'按鍵*/
while(KEY==1);
P0M1=P0M1&0xc1; /*設(shè)SPI 口為雙向口*/
PT0AD=0x00;
LED=0; /*關(guān)LED 指示*/
while(KEY==0);
}
/*********************************************************
掉電測量部分
先把音頻輸出關(guān)閉再進(jìn)入掉電方式
掉電后LCD 接口置為高阻態(tài)I O 口沒有高阻態(tài)方式時應(yīng)置為1
********************************************************/
void DISP_OFF()
{
SENDCOMA(TONEOFF); /*音頻輸出禁止*/
Delay1s();
SENDCOMA(LCDOFF); /*顯示禁能*/
Delay1s();
SENDCOMA(SYSDIS); /*停止振蕩器*/
P0M1=P0M1|0x3e; /*設(shè)SPI 口為僅為輸入*/
PT0AD=0x3e; /*SPI 接口數(shù)字輸入功能禁止*/
LED=1; /*指示掉電電流測量值可讀*/
KEY=1;
while(KEY==1);
P0M1=P0M1&0xc1; /*設(shè)SPI 口為雙向口*/
PT0AD=0x00;
LED=0;
while(KEY==0);
}
/****************************************************
主函數(shù)
原型: void main()
功能: 對KEY 不斷查詢?nèi)粲邪存I則進(jìn)行全顯測量狀態(tài)若再次按鍵則進(jìn)入
掉電測量狀態(tài)依次循環(huán)測量
**********************************************************/
void main()
{
P0M1=P0M1&0x7f; /*設(shè)LED 口為上拉輸出*/
P0M2=P0M2|0x80;
while(1)
{
LED=0; /*關(guān)指示燈*/
DISP_ALL(); /*全顯示測量*/
DISP_OFF(); /*掉電測量*/
}
}
頭文件SPI.h
/****************************************************************
SPI.h
此頭文件是對SPI 進(jìn)行讀寫的一些基本函數(shù)用于對本公司水表等LCD 模塊
驅(qū)動調(diào)試
************************************************************/
#define uchar unsigned char
extern void Delay(); /*器件驅(qū)動程序的延時程序*/
/*************************************************************/
名稱: 發(fā)送數(shù)據(jù)位
原型: void SendBit(uchar dat,uchar bitcnt)
用途: 向SPI 發(fā)送dat 的bitcnt 位數(shù)據(jù)由高位開始.(bitcnt 不能大于8)
/***************************************************************/
void SendBit(uchar dat,uchar bitcnt)
{
uchar i;
for(i=0;i
if(( dat & 0X80 ) == 0)
SDA_PORT = 0;
else
SDA_PORT = 1; /*發(fā)送數(shù)據(jù)由高位到低位傳送*/
Delay();
CLK_PORT = 1; /*置時鐘線為高通知被控器開始接收數(shù)位*/
Delay();
CLK_PORT = 0; /*鉗住總線準(zhǔn)備下一個數(shù)據(jù)位*/
dat=dat<<1; /*發(fā)送數(shù)據(jù)左移一位*/
}
}
/*************************************************************
起動spi
原型: void Start_spi()
作用: 起動spi,以便進(jìn)行器件操作
************************************************************/
void Start_spi()
{
CS_PORT=1;
CLK_PORT=1;
SDA_PORT=1;
Delay();
CS_PORT=0; CS_PORT=0;
CLK_PORT=0; CLK_PORT=0;
}
/***************************************************************/
名稱: 發(fā)送字節(jié)函數(shù)
原型: void SendByte(uchar dat)
用途: 向SPI 發(fā)送字節(jié)數(shù)據(jù)數(shù)據(jù)單元dat
/***************************************************************/
void SendByte(uchar dat)
{
SendBit(dat,8); /*發(fā)送字節(jié)*/
}
三測量數(shù)據(jù)
測量條件VDD 3.6V,測量時與LCD 接口的IO 口為高阻態(tài)電流表是Agilent 6 1/2(LCD模塊的RD 及
IRQ 腳懸空) P87LPC764 采用片內(nèi)振蕩12 clock 內(nèi)部上電復(fù)位看門狗禁止復(fù)位IO 口
為高電平掉電檢測2.5V
注意事項與LCD 模塊接口的IO CS WR DATA 平時應(yīng)設(shè)置為高阻態(tài)若所用的單片機(jī)IO 沒
有高阻態(tài)方式則應(yīng)置為高電平狀態(tài)若置為低電平LCD 模塊電流會增加120uA 左右
(VDD=3.6V) 音頻輸出時功耗很大主要是蜂鳴器訊響器驅(qū)動電流應(yīng)避免長時間輸出
且進(jìn)入掉電模式前一定要關(guān)掉音頻輸出退出掉電模式只要打開系統(tǒng)振蕩器打開LCD 偏置
發(fā)生器即可但最好再次設(shè)置其工作方式由于要測量的電流值較小LCD 模塊接口上VDD
和VSS 及其它各點焊接要注意焊錫不要態(tài)多盡量防止松香開成漏電回路
部分水表LCD 模塊在各工作方式下的電流測量表
LCD模塊數(shù)據(jù)表
評論
查看更多