8051微控制器接口一个4位LCD

时间:2015-01-08 18:05:13

标签: c microcontroller lcd

我正在研究将4位LCD与8051微控制器连接,但到目前为止,我还是不成功。我得到了这个示例代码

/*
developed by S4silver
license type - open source
created on - 11/12/2014
modified on - 11/14/2014
modification details - refactored
developer - Frank Hust Jincson
contact mail id - silverembeddedsolutions@gmail.com
web link - http://s4silver.blogspot.in/p/programmers-colony.html
*/

#include<reg51.h>

//#include"delay1s.h"

void Init_LCD(void);
void cmd_LCD(char cmd);
void display_LCD(char );
void write_LCD(char );

#define LCD P0

sbit RS=P0^0;
sbit RW=P0^1;
sbit EN=P0^2;

void delay()
{
    int i;
    TMOD=0X01;

    for(i=0;i<=16;i++)
    {
        TR0=1;
        while(!TF0);
        TF0=0;
        TR0=0;
    }
}

main()
{
    Init_LCD();
    display_LCD('A');
}

void Init_LCD()
{
    cmd_LCD(0x28);
    cmd_LCD(0x0e);
    cmd_LCD(0x01);
    cmd_LCD(0x06);
    cmd_LCD(0x80);
}

void cmd_LCD(char cmd)
{
    LCD=(cmd&0xf0)|0x04; //0x20,en=1,rs=0
    delay();
    EN=0;
    LCD=(cmd<<4)|0x04;  //0x80,en=1,rs=0
    delay();
    EN=0;
}

void display_LCD(char c)
{
    LCD=(c&0xf0)|0x05; //en=1,rs=1
    delay();
    EN=0;
    LCD=(c<<4)|0x05; //en=1,rs=1
    delay();
    EN=0;
}

但它对我不起作用,我不知道它有什么问题。

1 个答案:

答案 0 :(得分:2)

我使用了以下C语言代码

#include<reg51.h>
#define lcdport P2
sbit rs=P3^0;
sbit rw=P3^1;
sbit en=P3^2;
void lcdcmd(char);
void lcdint();
void lcddata(char);
void lcdstring(char *);
void delay(unsigned int);

void main()
{
lcdport=0x00;               // output port
 while(1)
  {
   lcdint();
   delay(500);
   lcdstring("hello welcome to");
   lcdcmd(0xc0);
   delay(500000);
   lcdstring("projectguru.net");
   delay(500000);
   }
}         
void delay(unsigned int x)
{
 unsigned int i;
 for(i=0;i<x;i++);
}
void lcdint()               // lcd initializing
{
  lcdcmd(0x38);
  delay(500);
  lcdcmd(0x01);
  delay(500);
  lcdcmd(0x0c);
  delay(500);
  lcdcmd(0x80);
  delay(500);
  lcdcmd(0x0e);
  delay(500);
}
void lcdcmd(char value)        //  lcd command
{
  lcdport = value;
  rw=0;
  rs=0;
  en=1;
  delay(500);
  en=0;
}
void lcdstring(char *p)      
{
  while(*p!='\0')
   {
     lcddata(*p);
     delay(2000);
     p++;
   }
}
void lcddata(char value)   // print data on lcd
{
  lcdport = value;
  rs=1;
  rw=0;
  en=1; 
  delay(500);
  en=0;
}

此处提供完整的教程和视频http://www.mechaterrain.com/lcd-interfacing-8051