JHD801 不显示

2020-01-26 13:07发布

现在可以将数据写入显示器并可以读出来,就是不显示。在程序中也打开了显示。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[8]={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);   
          }   
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
lxa0
1楼-- · 2020-01-26 14:15
我前2天正在玩 0802A
也是不能正确显示
楼主的应该是0801吧?
难道 08XX系列的都是这味????
wzhenhua
2楼-- · 2020-01-26 14:31
问题解决了。你把VO脚接地就可以了。调解一下对比度
wzhenhua
3楼-- · 2020-01-26 20:24
程序没有问题

一周热门 更多>