导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→硬件:(LCD)HD44780的编程问题[雪竹]

 *第7144篇: 硬件:(LCD)HD44780的编程问题

  
楼 主:雪竹 2002年12月22日19:12
 硬件:(LCD)HD44780的编程问题
我想用单片机控制LCD显示2*16字符。所用LCD控制器HD44780的,原程序编写如下:
不知什么原因,没有显示任何字符(硬件连接不会有问题)#include<reg51.h>

#define LCD_DB P1

sbit LCD_RS=P3^3;
sbit LCD_WR=P3^4;
sbit LCD_E=P3^5;


void delay(unsigned int time);
void write_code(unsigned char x);
void write_data(unsigned char x);
void read_status(unsigned char x);
unsigned char read_code(void);
unsigned char read_data(void);


main()
{
//---------------------------------------------Initiate
   delay(100);
  write_code(0x30);
   delay(100);
  write_code(0x30); 
   delay(100);
  write_code(0x30);
while((read_code()&0x80)!=0x00);
  write_code(0x38);
while((read_code()&0x80)!=0x00);
  write_code(0x08);
while((read_code()&0x80)!=0x00);
  write_code(0x01);
while((read_code()&0x80)!=0x00);
  write_code(0x06);
while((read_code()&0x80)!=0x00);
  write_code(0x10);
while((read_code()&0x80)!=0x00);
  write_code(0x0c);
while((read_code()&0x80)!=0x00);

//=======================================================
 
  write_code(0x01);                      //Clear display
while((read_code()&0x80)!=0x00);
  write_code(0x38);                     //1 Line 5*7  
while((read_code()&0x80)!=0x00);
  write_code(0x0e);                     //Open display
while((read_code()&0x80)!=0x00);
  write_code(0x06);                     //AC++
while((read_code()&0x80)!=0x00);
  write_data(0x54);                     //"T"
while((read_code()&0x80)!=0x00);
  write_data(0x4d);                     //"M"
 
}
/*-----------Main() The End------------*/


void delay(unsigned int time)
{
 unsigned int i,j;
 for(i=0;i<time;i++)
 {
  for(j=0;j<100;j++); 
 }
}
//==========================================
void write_code(unsigned char x)

 LCD_E=1;
 LCD_DB=0xff; 
 LCD_RS=0;
 LCD_WR=0;
 LCD_E=1;
 LCD_DB=x;
 LCD_E=0;
 LCD_E=1;
  }

/*=====================================================*/


/*======================================================*/
void write_data(unsigned char x)

 LCD_E=1;
 LCD_DB=0xff;
 
 LCD_RS=1;
 LCD_WR=0;
 LCD_E=1;
 LCD_DB=x; 
 LCD_E=0;
 LCD_E=1;
 }
/*======================================================*/
unsigned char read_code(void)/*读"忙"标志子程序*/
{

 unsigned char x,i,j;
 LCD_E=1;
 LCD_RS=0;
 LCD_WR=1;

 LCD_E=1;
 LCD_E=0;
 x=LCD_DB;
 return(x);
}
/*======================================================*/
unsigned char read_data(void)
{
 unsigned char x;
 LCD_E=1;
 LCD_RS=1;
 LCD_WR=1;
 
 LCD_E=1;
 LCD_E=0;
 x=LCD_DB;
 LCD_E=1;
 
 return(x);
}


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:初学者:DS1302走时误差是多少?

[下一篇主题]:硬件:C8051F 在哪个价位上!?