导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→Can you help me?

* 58466: Can you help me?

   wolf4000 
wolf4000发表的帖子 

 Can you help me?
请大家帮忙浏览一下这个显示程序。程序是要在字符型液晶体模块(2*24,5*7点阵)上显
示两行字符,我反复检查了输入的显示地址都 没错,但是程序运行只能在第一行显示,我
找不出问题,请高手指点。(89s51控制芯片,控制驱动电路HD44780) 
 #include   <reg51.h>  
 #include   <absacc.h>  
 /*LCD*/

 #define LCD_Data_Port P0
 #define LINE1_ADDR 0x00
 #define LINE2_ADDR 0x40
 

 static void LCD_goxy(unsigned char x,unsigned char y);//LCD
 static void LCD_clr(void);//clear display
 static void LCD_CMD_Write(unsigned char pass_value);//write command 
 static void LCD_DAT_Write(unsigned char pass_value);//Write data
 static void LCD_DAT_Write1(unsigned char pass_value);
 static void LCD_CMD_Write1(unsigned char pass_value);
 static unsigned char LCD_RAM_Read(void);
 static void LCD_DAT_Read(void);
 void LCD_init(void);
 void LCD_Delay(void);
 static void LCD_light();
 sbit LCD_black_ligh=P2^7;
 sbit LCD_E=P3^3;
 sbit LCD_RS=P3^4;
 sbit LCD_RW=P3^5;
 sbit ALARM=P3^6;
 sbit STATUS=P3^7;
 sbit bflag=ACC^7;  


void main(void)
{
 int j=0,k=0;
  unsigned char m,n;
  unsigned char code Table_1[15]=
{0x31,0x2e,0x30,0x20,0x56,0x49,0x45,0x57,0x20,0x41,0x4c,0x41,0x52,0x4d,0x53};
  unsigned char code Table_2[17]=
{0x41,0x4c,0x41,0x52,0x4d,0x53,0x20,0x4c,0x49,0x53,0x54,0x20,0x45,0x4d,0x50,0x54
,0x59};
  
  LCD_light();
  LCD_clr();         
  LCD_init();            
  LCD_goxy(0,1);            
   for(m=0;m  <15;m++)         

 LCD_DAT_Write(Table_1[j++]);
  LCD_E=0;
 LCD_Data_Port=0xff;
  }
 LCD_goxy(1,2);              
    for(n=0;n  <17;n++)
  {
   LCD_DAT_Write(Table_2[k++]);
   LCD_E=0;
   LCD_Data_Port=0xff;
  }                    
 
}

/* 子函数 *

/*灯*/
 void LCD_light()
{
 P2=0xff;
 LCD_black_ligh=0;
}

/*读LCD的忙标志*/
void LCD_busy(void)
{

 LCD_RS=0;          
 LCD_RW=1;
 LCD_E=1;
 
 do
  {
 ACC=LCD_Data_Port;
   }while(bflag==1);
 LCD_E=0;
}

/*显示的位置*/

/*清屏*/
static void LCD_clr(void)
{
 LCD_busy();
 LCD_CMD_Write(0x01);
}


/*初始化 LCD*/
void LCD_init(void)
{
 unsigned char pass;
 int i=3;
do
  {
    pass=0x38;//功能设置,8位数据,两行显示,5*7点阵字符
    LCD_RS=0;     
    LCD_RW=0;   
    LCD_Data_Port=pass;      
    LCD_Delay();           
    LCD_E=1;
    LCD_E=0;
  }while(i--);
    pass=0x01;
    LCD_CMD_Write(pass);//清屏
    pass=0x06;
    LCD_CMD_Write(pass);//输入方式设置,数据操作后,AC加一
    pass=0x0c;
    LCD_CMD_Write(pass);//LCD显示开,光标,闪烁关
    }

/*延时子程序*/
void LCD_Delay(void)
{
 int t;
 t=5000;
 while(t) t--;
}

static void LCD_goxy(unsigned char x,unsigned char y)
{
    unsigned char tmp;
    tmp=x&0xf;
    switch(y)   
    { 
      case 0:
      tmp|=LINE1_ADDR;
      LCD_CMD_Write(tmp);
      break;
      case 1:
      tmp|=LINE2_ADDR;
      LCD_CMD_Write(tmp);
      break;
    }
 }
/*写指令到 LCD*/
void LCD_CMD_Write(unsigned char pass_value)
{
 LCD_busy();
 LCD_RS=0;
 LCD_RW=0;
 LCD_E=1;
 LCD_E=0;
 LCD_Data_Port=pass_value;
 LCD_busy();
 LCD_E=1;
 LCD_E=0;
 }

/*写数据到LCD*/
void LCD_DAT_Write(unsigned char pass_value)
{
 LCD_busy();
 LCD_RS=1;
 LCD_RW=0;
 LCD_Data_Port=pass_value;
 LCD_E=1;
 LCD_E=0;
 LCD_Data_Port=0xff;




发表时间:2004年7月19日14:09:34

  
回复该帖

本主题共有 2 帖,分页:>>>>>该主题的所有内容[2]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  58636.[详细]LCD是双屏结构的。可再检查你的初始化和显示地址设置
摘要:LCD是双屏结构的。可再检查你的初始化和显示地址设置......(49字)
- [hui_peng][906次] 2004年7月21日

[上一篇帖子]:请问S1D13506驱动IC在那里采购的,能告诉我采购联系信息吗? 您要是能告诉我购买信息,
[下一篇帖子]:给我发一份吧,我的邮箱是liulu8382@tom.com