您的位置 首页 解答

LCD使用时需求留意的几个小问题,AT89C51写入字符LCD点阵源代码共享

LCD使用时需要注意的几个小问题,AT89C51写入字符LCD点阵源代码分享-但是,如果是有规律的闪烁或是经常不明原因的闪烁,那就可能是屏幕真的有问题了。先检查是否有接触不良,如果不是的话,那就是可能

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

  **这种LCD的接口材料能够用google找到许多

  **引脚界说:

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

  }

  /*显现屏字符串写入函数*/

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

  }

  //光标复位

  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)

  {

  }

  }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/171538.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部