wzhenhua 发表于 2013-9-13 06:58:49

JHD801 不显示

现在可以将数据写入显示器并可以读出来,就是不显示。在程序中也打开了显示。JHD801的控制芯片是KS0066,单行8字符


#include <iom16.h>
#include<inavr.h>
#include<ina90.h>
#include<avr_macros.h>
#include<comp_a90.h>
#include"lcd1602.h"


#define   RS   PORTB_Bit0
#define   RW   PORTB_Bit1
#define   E    PORTB_Bit2

   
unsigned char r_data;   
unsigned char count;
unsigned char ReVal;
char dispch={0,0,0,0,0,0,0,0};               //存放显示值数据   

//延时子程序   
void delay(long time)   
{   
    unsigned char i;   
      long j;   
    for(j=time;j>0;j--)   
      for(i=20;i>0;i--);   
}   
   
void delay_us(long time)   
{   
    while(time--);
}   

void delay_ms(long time)   
{
unsigned int i;
while(time--)for(i=0;i<550;i++);

}   


///////////////显示部分////////////////////////   
   
//用于输入命令   
void disp_cmd(unsigned char cmd)   
{   
    DDRA=0XfF;
//RW=1;   
//RS=0;   
//E = 1;   
//delay(10);   
//   E = 0;   
//   while(PINA_Bit7);
    PORTA=cmd;
    RS=0;
    RW=0;   
    E = 1;
    delay_us(500);   
    E = 0;   
    delay_us(500);   
}   

unsigned char Read_Lcd(void)
{
unsigned dat;
DDRA=0X00;
delay_us(10);
RW=1;   
RS=1;
E = 1;
// delay_us(1);

delay_us(5);   
E = 0;
dat=PINA;
dat=PINA;
DDRA=0XfF;
return dat;
}



   
//用于显示字符内容   
void disp_char(unsigned char dat)   
{
   DDRA=0X7F;
    RW=1;   
    RS=0;   
   E = 1;   
    delay(10);   
    E = 0;
   while(PINA_Bit7);
   
   
    PORTA=dat;
    RS=1;
    RW=0;   
    E = 1;            // 发送信号,E下降沿触发   
   delay_us(500);   
    E = 0;   
   delay_us(500);   
   
}   
   
//初始化显示   
void initial_disp(void)   
{   

    RS=0;   
    RW=0;   

//disp_cmd(0x80); disp_char('0');delay_ms(2);
   // disp_cmd(0x80); disp_char('0');delay_ms(2);
   //disp_cmd(0x80); disp_char('0');delay_ms(2);
   //disp_cmd(0x80); disp_char(0x20);delay_ms(2);
   
   
    disp_cmd(0x34);//设置工作方式,两行字符,8位地址
    delay_ms(10);
    disp_cmd(0x34);//设置工作方式,两行字符,8位地址
    delay_ms(10);
    disp_cmd(0x34);//设置工作方式,两行字符,8位地址      
    delay_ms(10);
   // disp_cmd(0x0c);//显示状态,无光标无闪烁
   disp_cmd(0x0f);
    delay_ms(10);
    disp_cmd(0x06);//输入方式   
    delay_ms(10);
    disp_cmd(0x01);//清屏
    delay_ms(10);
    disp_cmd(0x02);//归零
    delay_ms(10);
}   
   
//显示方位角,仰角,一本振频率,AGC控制码   
void dispchar(unsigned char pos ,char str)   
{   
    disp_cmd(pos);          //行地址1
    delay_ms(5);
    disp_char(str);//方位角显示值
    delay_ms(5);   
}   

   
void main(void)   
   
{   
DDRD_Bit2=1;
   delay_ms(1000);
   DDRA=0XfF;
   DDRB_Bit0=1;
   DDRB_Bit1=1;
   DDRB_Bit2=1;
//E=1;   
//delay(20);   
//E=0;   
    initial_disp(); //初始化屏幕
      initial_disp(); //初始化屏幕
      initial_disp(); //初始化屏幕
   disp_cmd(0x84);
    disp_char('1');delay_ms(5);
    disp_char('2');delay_ms(5);
    disp_char('3');delay_ms(5);
// disp_cmd(0x84);
// ReVal=Read_Lcd(); delay_ms(5);
// ReVal=Read_Lcd(); delay_ms(5);
   //ReVal=Read_Lcd(); delay_ms(5);

    while (1)   
      {   
            PORTD_Bit2=0;
             delay_ms(500);
            PORTD_Bit2=1;
            initial_disp();
             delay_ms(500);
            
    disp_cmd(0x84);
    disp_char('1');delay_ms(5);
    disp_char('2');delay_ms(5);
    disp_char('3');delay_ms(5);
          // disp_cmd(0x01);   
                   //dispstat(1);   
                   //dispchar(dispch);   
          }   
}

lxa0 发表于 2013-9-13 21:58:20

我前2天正在玩 0802A
也是不能正确显示
楼主的应该是0801吧?
难道 08XX系列的都是这味????

wzhenhua 发表于 2013-9-14 10:56:23

问题解决了。你把VO脚接地就可以了。调解一下对比度

wzhenhua 发表于 2013-9-14 10:56:54

程序没有问题
页: [1]
查看完整版本: JHD801 不显示