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