新聞中心

EEPW首頁(yè) > 光電顯示 > 設(shè)計(jì)應(yīng)用 > LCD使用時(shí)需要注意的幾個(gè)小問(wèn)題,AT89C51寫(xiě)入字符LCD點(diǎn)陣源代碼分享

LCD使用時(shí)需要注意的幾個(gè)小問(wèn)題,AT89C51寫(xiě)入字符LCD點(diǎn)陣源代碼分享

作者: 時(shí)間:2017-10-22 來(lái)源:網(wǎng)絡(luò) 收藏

  LCD使用中須關(guān)注的七個(gè)問(wèn)題:

  問(wèn)題一:要避免LCD屏幕工作超負(fù)荷

  使用LCD屏幕要尤其注意其工作時(shí)間。當(dāng)連續(xù)滿負(fù)荷工作96小時(shí)以上,它就會(huì)迅速老化,嚴(yán)重時(shí),甚至?xí)龎模斐墒褂谜呤艿骄薮蟮慕?jīng)濟(jì)損失。這是因?yàn)長(zhǎng)CD屏幕的象素點(diǎn)是有液晶體構(gòu)成,長(zhǎng)時(shí)間工作,很容易使某些像素點(diǎn)(Pixel Dot)過(guò)熱,一旦超過(guò)極限會(huì)導(dǎo)致永久性損壞。這就形成了常說(shuō)的“壞點(diǎn)”(某些媒體稱(chēng)為“黑點(diǎn)”)。所以,如果用戶不得不長(zhǎng)時(shí)間工作時(shí),也一定要讓屏幕得到間歇性的休息,不能長(zhǎng)時(shí)間地顯示同一內(nèi)容。而當(dāng)屏幕處于等待工作狀態(tài)時(shí),就要降低亮度。52硬件論壇上高手就說(shuō)使用屏幕保護(hù)程序是很好的習(xí)慣,這舉手之勞不僅可以延緩液晶屏老化,延長(zhǎng)其使用壽命,而且可以避免發(fā)生硬件損壞。

本文引用地址:http://butianyuan.cn/article/201710/367412.htm

  問(wèn)題二:遇到問(wèn)題不可自行拆卸LCD屏幕

  對(duì)于LCD屏幕,由于它的構(gòu)造非常精密嬌氣,所以無(wú)論使用者的屏幕是出現(xiàn)什么問(wèn)題,都千萬(wàn)不要自行拆卸LCD屏幕。如果您懷疑您的LCD屏幕工作不正常,應(yīng)該找廠商派專(zhuān)業(yè)的工作人眼幫助解決問(wèn)題。LCD背景照明組件中的變壓器在關(guān)機(jī)一定時(shí)間后依然可能帶有1000V高壓(盡管是微電流的),而非專(zhuān)業(yè)人員如果處理不好可能造成組件新的故障,嚴(yán)重時(shí)還可能導(dǎo)致屏幕永久性的不能工作--這實(shí)在的因小失大的不智之舉。

  問(wèn)題三:使用LCD顯示要注意防壓防震

  LCD顯示屏幕十分脆弱嬌貴,抗撞擊能力遠(yuǎn)遠(yuǎn)不及CRT屏幕。一旦受到強(qiáng)烈撞擊,就很可能導(dǎo)致LCD中含有的很多精密玻璃元件和靈敏嬌氣的電氣元件受到損壞。所以一定要避免強(qiáng)烈的沖擊的振蕩。除了防止強(qiáng)烈撞擊,還要注意不要對(duì)LCD屏幕表面施加壓力。有些用戶使用一段時(shí)間會(huì)發(fā)現(xiàn)屏幕上的壞點(diǎn)越來(lái)越多,其中很可能的原因就是使用者經(jīng)常用手指指點(diǎn)屏幕某個(gè)的部位(哪怕是輕微的點(diǎn)擊都可能產(chǎn)生局部壞點(diǎn)嚴(yán)重的可形成一片黑點(diǎn)),遇到這種情況,使用者自己是沒(méi)有辦法進(jìn)行補(bǔ)救的。所以養(yǎng)成良好的使用習(xí)慣非常重要,不要隨便接觸屏幕的屏幕。

  問(wèn)題四:讓LCD屏幕回復(fù)青春的方法

  LCD屏幕中的是唯一自然消耗的零部件,經(jīng)過(guò)了長(zhǎng)時(shí)間的使用,就會(huì)老化,從而導(dǎo)致了屏幕屏幕變暗,亮度下降。如果屏幕變暗是由于老化造成,則只需要更換就可以讓屏幕起死回生,回復(fù)青春。當(dāng)然,最重要的,其實(shí)是平時(shí)注意保養(yǎng),防范在于未然。以我在52硬件論壇上講的多年對(duì)屏幕的保養(yǎng)經(jīng)驗(yàn),使用者可以注意一下一些問(wèn)題:比如亮度(Brightness)不能調(diào)太高,長(zhǎng)期高負(fù)荷工作會(huì)使屏幕加速老化

  而在非工作時(shí)間應(yīng)該使用動(dòng)作屏幕保護(hù)程序等等。如果注意平日保養(yǎng),是可以大大延長(zhǎng)背景的壽命。

  問(wèn)題五:LCD屏幕不同的閃爍方式有不同的含義

  由于模擬信號(hào)輸出界面的影響,比如像素的時(shí)鐘和相位沒(méi)有與模擬信號(hào)輸出同步會(huì)導(dǎo)致閃爍現(xiàn)象,這個(gè)現(xiàn)象通常稱(chēng)作Pixel Jitter(像素抖動(dòng)),它是會(huì)偶爾出現(xiàn)的一種閃爍現(xiàn)象,這是模擬/數(shù)碼轉(zhuǎn)換過(guò)程中不可避免的情況。為了解決這類(lèi)問(wèn)題,有兩種方法??梢?ldquo;自動(dòng)調(diào)節(jié)”在LCD屏幕上都有有“自動(dòng)設(shè)定”功能,其作用是對(duì)輸入信號(hào)進(jìn)行分析后將LCD屏幕調(diào)節(jié)為最佳狀態(tài)。也可以“手動(dòng)調(diào)節(jié)”,經(jīng)通過(guò)相位(Phase),時(shí)鐘(Clock)兩個(gè)功能自行調(diào)節(jié)。

  但是,如果是有規(guī)律的閃爍或是經(jīng)常不明原因的閃爍,那就可能是屏幕真的有問(wèn)題了。先檢查是否有接觸不良,如果不是的話,那就是可能LCD屏幕自身出現(xiàn)故障了。

  問(wèn)題六:潮濕是LCD屏幕的大忌

  使用LCD屏幕,一定要把它放在通風(fēng)干燥的環(huán)境里,避免水汽的入侵。這是由于LCD屏幕內(nèi)部設(shè)計(jì)非常精密,一旦因環(huán)境潮濕產(chǎn)生氧化腐蝕導(dǎo)致出現(xiàn)短路現(xiàn)象等都會(huì)給使用者帶來(lái)巨大經(jīng)濟(jì)損失。如果不慎弄濕了屏幕,千萬(wàn)不要驚慌失措,先把電源關(guān)掉。如果只是屏幕表面有濕氣,就要用軟布輕輕的擦去,然后才能打開(kāi)電源工作。如果說(shuō)濕氣已經(jīng)進(jìn)入LCD屏幕里面了,就必須將LCD放在通風(fēng)條件好或溫暖的地方,讓其水分蒸發(fā)掉。如果情況非常嚴(yán)重,用戶就應(yīng)該請(qǐng)專(zhuān)業(yè)人員幫助解決。千萬(wàn)記住,首先要把電源關(guān)掉,在沒(méi)有驅(qū)除濕氣時(shí)不要讓LCD加電工作,否則容易導(dǎo)致液晶電極被腐蝕,再好的技術(shù)人員也回天乏術(shù)。

  問(wèn)題七:正確清除LCD屏幕屏幕表面污垢的方法

  屏幕使用一段時(shí)間,就必然會(huì)在表面積有灰塵污垢,使用者可以對(duì)其進(jìn)行清潔,但一定要用正確的方法。首先,擦拭使用的介質(zhì)最好是柔軟、非纖維材料,比如脫脂棉、鏡頭紙或柔軟的布等。因?yàn)榇植诘牟蓟蚣堫?lèi)物品容易對(duì)屏幕產(chǎn)生刮痕。然后沾少許玻璃清潔劑(千萬(wàn)不要用酒精一類(lèi)的化學(xué)溶劑)輕輕地將其擦干凈。另外要提醒大家的是,要用布沾上清潔劑再去擦,而不要將清潔濟(jì)直接噴到顯示屏幕表面,因?yàn)檫@樣容易流到屏幕里面導(dǎo)致LCD屏幕內(nèi)部出現(xiàn)短路故障,造成不必要的損失。

  用C51寫(xiě)的1602字符型LCD程序:

  //FileName:delay.h

  #ifndef __LZP_DELAY_H_

  #define __LZP_DELAY_H_

  #define TRUE 1

  #define FALSE 0

  //設(shè)置波特率

  #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_1ms0x00ff);

  TH2=(RCAP2_1ms》》8);;

  TL2=(RCAP2_1ms0x00ff);;

  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_50us0x00ff);

  TH2=(RCAP2_50us》》8);

  TL2=(RCAP2_50us0x00ff);

  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:.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 _write_cmd(unsigned char cmd);

  void _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

  /********************************************************

  **本開(kāi)發(fā)板支持1602 字符型LCD

  **這種LCD的接口資料可以用google找到很多

  **引腳定義:

  * 1---GND

  * 2---VDD

  * 3---VLCD:對(duì)比度調(diào)節(jié)

  * 4---RS:寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器

  * 5---R/W:讀寫(xiě)信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。

  當(dāng)RS和RW共同為低電平時(shí)可以寫(xiě)入指令或者顯示地址,當(dāng)RS為低電平

  RW為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平RW為低電平時(shí)可以寫(xiě)入數(shù)據(jù)。

  * 6---E:使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。

  * 7~14---DB0~DB7、

  * 15---A:背光引腳,“A”接正

  * 16---K:背光引腳,“K”接負(fù)

  ** author:bluehacker《kernelpaniccrash AT gmail.com》

  ** QQ:282074921

  **date :2007-11-15

  *********************************************************/

  #include “lcd.h”

  #include “delay.h”

  #include “intrins.h”

  /*向LCD寫(xiě)入命令*/

  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(status0x80);

  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(status0x80);

  LCDE=“1”;

  }

  void lcd_clear(void)

  {

  lcd_write_cmd(0x01);

  }

  /*顯示屏字符串寫(xiě)入函數(shù)*/

  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《16s!=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);

  }

  //光標(biāo)復(fù)位

  void lcd_reset_cursor(void)

  {

  lcd_write_cmd(0x02);

  }

  //設(shè)置顯示模式

  void lcd_set_mode(unsigned char cursor, unsigned char text)

  {

  unsigned char mode=“0x04”;

  if(cursor){//光標(biāo)右移

  mode|=0x02;

  }

  else{//光標(biāo)左移

  mode|=0x00;

  }

  if(text){//文字移動(dòng)

  mode|=0x01;

  }

  else{//文字不移動(dòng)

  mode|=0;

  }

  lcd_write_cmd(mode);

  }

  void lcd_init(void)

  {

  P0=0;

  LCDE=“1”;

  delay_ms(500);

  lcd_clear();

  lcd_write_cmd(0x38);//設(shè)置lcd功能:8位總線,雙行顯示,5X7點(diǎn)陣字符

  lcd_write_cmd(0x0f);//顯示開(kāi)關(guān)控制:顯示ON,光標(biāo)ON,閃爍ON

  lcd_write_cmd(0x06);//光標(biāo)輸入方式增量移位

  lcd_write_cmd(0x80);

  //lcd_write_cmd(0x0c);

  //lcd_clear();

  }

  //讀取狀態(tài),是否忙

  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)

  {

  }

  }



關(guān)鍵詞: lcd 數(shù)據(jù)線 照明燈

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉