LCD使用中須關注的七個問題:
問題一:要避免LCD屏幕工作超負荷
使用LCD屏幕要尤其注意其工作時間。當連續滿負荷工作96小時以上,它就會迅速老化,嚴重時,甚至會燒壞,造成使用者受到巨大的經濟損失。這是因為LCD屏幕的象素點是有液晶體構成,長時間工作,很容易使某些像素點(Pixel Dot)過熱,一旦超過極限會導致永久性損壞。這就形成了常說的“壞點”(某些媒體稱為“黑點”)。所以,如果用戶不得不長時間工作時,也一定要讓屏幕得到間歇性的休息,不能長時間地顯示同一內容。而當屏幕處于等待工作狀態時,就要降低亮度。52硬件論壇上高手就說使用屏幕保護程序是很好的習慣,這舉手之勞不僅可以延緩液晶屏老化,延長其使用壽命,而且可以避免發生硬件損壞。
問題二:遇到問題不可自行拆卸LCD屏幕
對于LCD屏幕,由于它的構造非常精密嬌氣,所以無論使用者的屏幕是出現什么問題,都千萬不要自行拆卸LCD屏幕。如果您懷疑您的LCD屏幕工作不正常,應該找廠商派專業的工作人眼幫助解決問題。LCD背景照明組件中的變壓器在關機一定時間后依然可能帶有1000V高壓(盡管是微電流的),而非專業人員如果處理不好可能造成組件新的故障,嚴重時還可能導致屏幕永久性的不能工作--這實在的因小失大的不智之舉。
問題三:使用LCD顯示要注意防壓防震
LCD顯示屏幕十分脆弱嬌貴,抗撞擊能力遠遠不及CRT屏幕。一旦受到強烈撞擊,就很可能導致LCD中含有的很多精密玻璃元件和靈敏嬌氣的電氣元件受到損壞。所以一定要避免強烈的沖擊的振蕩。除了防止強烈撞擊,還要注意不要對LCD屏幕表面施加壓力。有些用戶使用一段時間會發現屏幕上的壞點越來越多,其中很可能的原因就是使用者經常用手指指點屏幕某個的部位(哪怕是輕微的點擊都可能產生局部壞點嚴重的可形成一片黑點),遇到這種情況,使用者自己是沒有辦法進行補救的。所以養成良好的使用習慣非常重要,不要隨便接觸屏幕的屏幕。
問題四:讓LCD屏幕回復青春的方法
LCD屏幕中的照明燈是唯一自然消耗的零部件,經過了長時間的使用,就會老化,從而導致了屏幕屏幕變暗,亮度下降。如果屏幕變暗是由于老化造成,則只需要更換照明燈就可以讓屏幕起死回生,回復青春。當然,最重要的,其實是平時注意保養,防范在于未然。以我在52硬件論壇上講的多年對屏幕的保養經驗,使用者可以注意一下一些問題:比如亮度(Brightness)不能調太高,長期高負荷工作會使屏幕加速老化
而在非工作時間應該使用動作屏幕保護程序等等。如果注意平日保養,是可以大大延長背景照明燈的壽命。
問題五:LCD屏幕不同的閃爍方式有不同的含義
由于模擬信號輸出界面的影響,比如像素的時鐘和相位沒有與模擬信號輸出同步會導致閃爍現象,這個現象通常稱作Pixel Jitter(像素抖動),它是會偶爾出現的一種閃爍現象,這是模擬/數碼轉換過程中不可避免的情況。為了解決這類問題,有兩種方法。可以“自動調節”在LCD屏幕上都有有“自動設定”功能,其作用是對輸入信號進行分析后將LCD屏幕調節為最佳狀態。也可以“手動調節”,經通過相位(Phase),時鐘(Clock)兩個功能自行調節。
但是,如果是有規律的閃爍或是經常不明原因的閃爍,那就可能是屏幕真的有問題了。先檢查是否有接觸不良,如果不是的話,那就是可能LCD屏幕自身出現故障了。
問題六:潮濕是LCD屏幕的大忌
使用LCD屏幕,一定要把它放在通風干燥的環境里,避免水汽的入侵。這是由于LCD屏幕內部設計非常精密,一旦因環境潮濕產生氧化腐蝕導致出現短路現象等都會給使用者帶來巨大經濟損失。如果不慎弄濕了屏幕,千萬不要驚慌失措,先把電源關掉。如果只是屏幕表面有濕氣,就要用軟布輕輕的擦去,然后才能打開電源工作。如果說濕氣已經進入LCD屏幕里面了,就必須將LCD放在通風條件好或溫暖的地方,讓其水分蒸發掉。如果情況非常嚴重,用戶就應該請專業人員幫助解決。千萬記住,首先要把電源關掉,在沒有驅除濕氣時不要讓LCD加電工作,否則容易導致液晶電極被腐蝕,再好的技術人員也回天乏術。
問題七:正確清除LCD屏幕屏幕表面污垢的方法
屏幕使用一段時間,就必然會在表面積有灰塵污垢,使用者可以對其進行清潔,但一定要用正確的方法。首先,擦拭使用的介質最好是柔軟、非纖維材料,比如脫脂棉、鏡頭紙或柔軟的布等。因為粗糙的布或紙類物品容易對屏幕產生刮痕。然后沾少許玻璃清潔劑(千萬不要用酒精一類的化學溶劑)輕輕地將其擦干凈。另外要提醒大家的是,要用布沾上清潔劑再去擦,而不要將清潔濟直接噴到顯示屏幕表面,因為這樣容易流到屏幕里面導致LCD屏幕內部出現短路故障,造成不必要的損失。
用C51寫的1602字符型LCD程序:
//FileName:delay.h
#ifndef __LZP_DELAY_H_
#define __LZP_DELAY_H_
#define TRUE 1
#define FALSE 0
//設置波特率
#define OSC_FREQ 11059200L
#define BAUD_115200 256 - (OSC_FREQ/192L)/115200L // 255
#define BAUD_57600 256 - (OSC_FREQ/192L)/57600L // 254
#define BAUD_38400 256 - (OSC_FREQ/192L)/38400L // 253
#define BAUD_28800 256 - (OSC_FREQ/192L)/28800L // 252
#define BAUD_19200 256 - (OSC_FREQ/192L)/19200L // 250
#define BAUD_14400 256 - (OSC_FREQ/192L)/14400L // 248
#define BAUD_9600 256 - (OSC_FREQ/192L)/9600L // 244
// Timer2
#define RCAP2_50us 65536L - OSC_FREQ/240417L
#define RCAP2_1ms 65536L - OSC_FREQ/12021L
void delay_ms(unsigned int num);
void delay_50us(unsigned char num);
void delay_us(unsigned char num);
#endif
//FileName:delay.c
/********************************************
** start51 study board
** delay function implementation
** author:bluehacker《kernelpaniccrash At gmail.com》
** QQ:282074921
**********************************************/
#include “delay.h”
#include “reg52.h”
void delay_ms(unsigned int num)
{
RCAP2H = (RCAP2_1ms》》8);
RCAP2L=(RCAP2_1ms&0x00ff);
TH2=(RCAP2_1ms》》8);;
TL2=(RCAP2_1ms&0x00ff);;
ET2 = 0; // Disable timer2 interrupt
T2CON = 0x04; // 16-bit auto-reload, clear TF2, start timer
while (num--)
{
while (!TF2);
TF2 = FALSE;
}
TR2 = FALSE;
}
void delay_50us(unsigned char num)
{
RCAP2H=(RCAP2_50us》》8);
RCAP2L=(RCAP2_50us&0x00ff);
TH2=(RCAP2_50us》》8);
TL2=(RCAP2_50us&0x00ff);
ET2=0;
T2CON=0x04;
while(num--)
{
while(!TF2)
TF2=FALSE;
}
TR2=FALSE;
}
void delay_us(unsigned char num)
{
unsigned char i;
for (i=0;i《num;i++)
{
}
}
//FileName:lcd.h
#ifndef __LZP_LCD_H_
#define __LZP_LCD_H_
#include “reg52.h”
/////////////////////////////
//定義LCD控制引腳
////////////////////////////
sbit LCDRS=“P2”^0;
sbit LCDRW=“P2”^1;
sbit LCDE=“P2”^2;
void lcd_write_cmd(unsigned char cmd);
void lcd_write_data(unsigned char dat);
void lcd_clear(void);
void lcd_init(void);
unsigned char lcd_status(void);
void lcd_set_mode(unsigned char cursor, unsigned char text);
void lcd_write_str(unsigned char x,unsigned char y,unsigned char *s);
void lcd_write_char(unsigned char x,unsigned char y, unsigned char d);
#endif
//FileName:lcd.c
/********************************************************
**本開發板支持1602 字符型LCD
**引腳定義:
* 1---GND
* 2---VDD
* 3---VLCD:對比度調節
* 4---RS:寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器
* 5---R/W:讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。
當RS和RW共同為低電平時可以寫入指令或者顯示地址,當RS為低電平
RW為高電平時可以讀忙信號,當RS為高電平RW為低電平時可以寫入數據。
* 6---E:使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。
* 7~14---DB0~DB7數據線、
* 15---A:背光引腳,“A”接正
* 16---K:背光引腳,“K”接負
** author:bluehacker《kernelpaniccrash AT gmail.com》
** QQ:282074921
**date :2007-11-15
*********************************************************/
#include “lcd.h”
#include “delay.h”
#include “intrins.h”
/*向LCD寫入命令*/
void lcd_write_cmd(unsigned char cmd)
{
unsigned char status;
P0=cmd;
LCDRS=“0”;
LCDRW=“0”;
LCDE=“0”;
delay_us(5);
do{
status=“lcd”_status();
}while(status&0x80);
LCDE=“1”;
}
void lcd_write_data(unsigned char dat)
{
unsigned char status;
P0=dat;
LCDRS=“1”;
LCDRW=“0”;
LCDE=“0”;
delay_us(5);
do{
status=“lcd”_status();
}while(status&0x80);
LCDE=“1”;
}
void lcd_clear(void)
{
lcd_write_cmd(0x01);
}
/*顯示屏字符串寫入函數*/
void lcd_write_str(unsigned char x,unsigned char y,unsigned char *s)
{
if (y == 0) {
lcd_write_cmd(0x80 + x);
}
else {
lcd_write_cmd(0xC0 + x);
}
while (*s) {
lcd_write_data( *s);
s ++;
}
/*
unsigned char i;
for(i=0;i《16&&s!=0;i++)
{
lcd_write_char(x+i,y,s);
}
*/
}
void lcd_write_char(unsigned char x,unsigned char y, unsigned char d)
{
if(y==0)
{
lcd_write_cmd(0x80+x);
}
else
{
lcd_write_cmd(0xc0+x);
}
lcd_write_data(d);
}
//光標復位
void lcd_reset_cursor(void)
{
lcd_write_cmd(0x02);
}
//設置顯示模式
void lcd_set_mode(unsigned char cursor, unsigned char text)
{
unsigned char mode=“0x04”;
if(cursor){//光標右移
mode|=0x02;
}
else{//光標左移
mode|=0x00;
}
if(text){//文字移動
mode|=0x01;
}
else{//文字不移動
mode|=0;
}
lcd_write_cmd(mode);
}
void lcd_init(void)
{
P0=0;
LCDE=“1”;
delay_ms(500);
lcd_clear();
lcd_write_cmd(0x38);//設置lcd功能:8位總線,雙行顯示,5X7點陣字符
lcd_write_cmd(0x0f);//顯示開關控制:顯示ON,光標ON,閃爍ON
lcd_write_cmd(0x06);//光標輸入方式增量移位
lcd_write_cmd(0x80);
//lcd_write_cmd(0x0c);
//lcd_clear();
}
//讀取狀態,是否忙
unsigned char lcd_status(void)
{
unsigned char tmp=“0”;
P0=0xff;
LCDRS=“0”;
LCDRW=“1”;
LCDE=“0”;
_nop_();
LCDE=“1”;
//_nop_();
tmp=“P0”;
return tmp;
}
//FileName:test.c
/*******************************
** Start51 study board test software
** test 1602LCD
** author: bluehacker《kernelpaniccrash AT gmail.com》
** QQ:282074921
***********************************/
#include “lcd.h”
#include “delay.h”
#include “intrins.h”
void main(void)
{
//初始化串口
SCON=“0x50”;/*mode 1,1 start bit ,8 data bit ,1 stop bit,enable receive*/
PCON=“0x80”;/*SMOD=1, Baud Rate twice*/
TMOD=“0x21”;/*timer 0--mode 1 and timer 1 ---mode2*/
//set baud rate,use timer 1 as baud rate generator
TH1=BAUD_19200;
TL1=TH1;
TR1=TRUE;
ET1=FALSE;//disable timer 1 interrupt
EA=“0”;
//delay_ms(400);
lcd_init();
// lcd_set_mode(1,0);
//lcd_reset_cursor();
// lcd_write_char(3,1,‘c’);
lcd_write_str(2,0,“bluehacker”);
lcd_write_str(2,1,“QQ:282074921”);
while(1)
{
}
}
評論
查看更多