欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 14226|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

Proteus仿真中的lcd1602為什么只亮不顯示?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

sbit LCD_RS = P2^5;    //片選信號(hào)輸入
sbit LCD_RW = P2^6;   //串行數(shù)據(jù)輸入
sbit LCD_E = P2^7;  //串行時(shí)鐘輸入
sbit D0=P0^0;

void delay_nms(uint t)
{
    uint i;
    uchar j;
    for(i=0;i<t;i++)
      for(j=0;j<110;j++);
}
/*********************************************************
*函數(shù)功能:向lcd12864串行輸入一個(gè)字節(jié)
**********************************************************/
void send_byte(uchar Dbyte)
{
    uchar i;
    for(i=0;i<8;i++)
    {
      LCD_E = 0;
      Dbyte = Dbyte<<1;
      LCD_RW = CY;
      LCD_E = 1;
      _nop_();
      LCD_E = 0;
    }   
}
/*********************************************************
*函數(shù)功能:接收l(shuí)cd12864輸出的一個(gè)有效字節(jié)
**********************************************************/
uchar recive_byte()
{
    uchar temp1,temp2,i;
    bit flag;
    temp1 = 0;
    temp2 = 0;
    for(i=0;i<8;i++)//接收有效字節(jié)的高四位
    {
        temp1 = temp1<<1;
        LCD_E = 0;
         LCD_E = 1;
        _nop_();
        LCD_E = 0;
        flag = LCD_RW;
        if(flag==1)
          temp1 = temp1&0x01;  
    }
    for(i=0;i<8;i++)//接收有效字節(jié)的低四位
    {
        temp2 = temp2<<1;
        LCD_E = 0;
         LCD_E= 1;
        _nop_();
        LCD_E = 0;
        flag = LCD_RW;
        if(flag==1)
          temp2 = temp2&0x01;  
    }   
    return ((temp1&0xf0)|(temp2&0x0f));//返回接收到的有效字節(jié)
}
/*********************************************************
*函數(shù)功能:檢測(cè)忙標(biāo)志位
**********************************************************/
void lcd12864_checkbusy()
{
    do
    {
        send_byte(0xfc);//1111 1【1 RW】【0 RS】0
    }while(recive_byte()&0x80==0x80);  //BF(.7)=1 Busy
}

/*********************************************************
*函數(shù)功能:向12864寫(xiě)命令函數(shù)
**********************************************************/
void lcd12864_write_com(uchar com)
{
    LCD_RS = 1;
    lcd12864_checkbusy();//檢測(cè)忙信號(hào)
     send_byte(0xf8);//1111 1[0 rw][0 rs]0   寫(xiě)命令起始指令
    send_byte(com&0xf0);   
    send_byte((com<<4)&0xf0);
    LCD_RS = 0;
}
/*********************************************************
*函數(shù)功能:向12864寫(xiě)數(shù)據(jù)函數(shù)
**********************************************************/
void lcd12864_write_dat(uchar dat)
{
    LCD_RS = 1;
    lcd12864_checkbusy();//檢測(cè)忙信號(hào)
    send_byte(0xfa);//1111 1[0 rw][1 rs]0  寫(xiě)數(shù)據(jù)起始指令
    send_byte(dat&0xf0);
    send_byte((dat<<4)&0xf0);
    LCD_RS = 0;
}
/*********************************************************
*函數(shù)功能:設(shè)置光標(biāo)位置
**********************************************************/
void lcd12864_set_cursor(uchar x,uchar y)
{
    uchar addr;
    switch(x)//確定行
    {
        case 0x00:addr = 0x80;break;//第一行
        case 0x01:addr = 0x90;break;//第二行
        case 0x02:addr = 0x88;break;//第三行
        case 0x03:addr = 0x98;break;//第四行
        default:break;
    }
    addr += y;                      //確定列
    lcd12864_write_com(addr);       //設(shè)置光標(biāo)
}
/*********************************************************
*函數(shù)功能:lcd12864清顯示(顯示漢字、字符模式下的清屏)
**********************************************************/
void lcd12864_clear0(void)
{
    lcd12864_write_com(0x01);
    delay_nms(10);
}
/*********************************************************
*函數(shù)功能:lcd12864清顯示(繪圖模式下的清屏)
**********************************************************/
void lcd12864_clear1(void)
{
    uchar i, j, k ;
    lcd12864_write_com(0x34);//功能設(shè)置:擴(kuò)充指令集動(dòng)作
    lcd12864_write_com(0x36);//開(kāi)繪圖顯示
    for( i = 0 ; i < 2 ; i++ )//分上下兩屏寫(xiě)
    {
        for( j = 0 ; j < 32 ; j++ )
        {
          lcd12864_write_com( 0x80 + j ) ;//寫(xiě)Y坐標(biāo)(行坐標(biāo))
            if( i == 0 )                  //寫(xiě)X坐標(biāo)(列坐標(biāo))
               lcd12864_write_com( 0x80 ) ;
            else
               lcd12864_write_com( 0x88 ) ;
            for( k = 0 ; k < 16 ; k++ )      //寫(xiě)一整行數(shù)據(jù)
                lcd12864_write_dat(0x00) ;
        }
    }
    lcd12864_write_com( 0x30 ) ;//功能設(shè)置:恢復(fù)為基本指令集
                                //          關(guān)繪圖顯示
}
/*********************************************************
*函數(shù)功能:初始化函數(shù)
**********************************************************/
void lcd12864_init()
{
  delay_nms(50);
  //功能設(shè)定
  lcd12864_write_com(0x30);   //設(shè)置為8位并行口,基本指令集
  delay_nms(1);
  lcd12864_write_com(0x30);   //再次設(shè)置為8位并行口,基本指令集
  delay_nms(1);
  lcd12864_write_com(0x0c);   //顯示狀態(tài)設(shè)置:整體顯示ON 游標(biāo)OFF
  delay_nms(10);
  lcd12864_write_com(0x01);   //清除顯示,并且設(shè)定地址指針為00H
  delay_nms(10);
  lcd12864_write_com(0x06);   //設(shè)置為游標(biāo)右移,DDRAM位地址加1,畫(huà)面不移動(dòng)
}

/*********************************************************
*函數(shù)功能:在指定位置 顯示一個(gè)字符
**********************************************************/
void lcd12864_write_char(uchar x,uchar y,uchar chr)
{
  lcd12864_set_cursor(x,y);
  lcd12864_write_dat(chr);
}
/*********************************************************
*函數(shù)功能:在指定位置 顯示一個(gè)字符
**********************************************************/
void lcd12864_write_str(uchar x,uchar y,uchar *string)
{
    uchar *str;
    uchar i=x;
    uchar j=y;
    str = string;
    lcd12864_set_cursor(x,y);
    while(*str!='\0')
    {
      lcd12864_write_dat(*str);
      j++;
      if(j>0x0f)
      {
        i++;
        j=0;
        if(i>4)
          i=0;
        lcd12864_set_cursor(i,j);
      }   
      str++;
    }   
}


//********************************************************
//畫(huà)滿屏圖片
//參數(shù):dat為填充的數(shù)據(jù)
//********************************************************
void draw_full_picture (uchar *dat)
{
    uchar i;                 
    uchar j;
    uchar k;
    uchar bGDRAMAddrX = 0x80;        //GDRAM水平地址
    uchar bGDRAMAddrY = 0x80;        //GDRAM垂直地址
    for(i = 0; i < 2; i++)                                                                                                            
    {
        for(j = 0; j < 32; j++)                                                                 
        {
            for(k = 0; k < 8; k++)                                                         
            {
                lcd12864_write_com(0x34);                //設(shè)置為8位MPU接口,擴(kuò)充指令集
                lcd12864_write_com(bGDRAMAddrY+j);        //垂直地址Y                                                                        
                lcd12864_write_com(bGDRAMAddrX+k);        //水平地址X
                lcd12864_write_dat(*dat++);
                lcd12864_write_dat(*dat++);
            }
        }
        bGDRAMAddrX = 0x88;                    //寫(xiě)下半屏幕
    }
    lcd12864_write_com(0x36);                            //打開(kāi)繪圖模式
    lcd12864_write_com(0x30);                            //恢復(fù)基本指令集,關(guān)閉繪圖模式   
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:35873 發(fā)表于 2019-4-18 00:24 | 只看該作者
給你個(gè)顯示自己看吧

1602.PNG (57.83 KB, 下載次數(shù): 47)

1602.PNG

ds18b20和1602顯示.rar

66.31 KB, 下載次數(shù): 254

回復(fù)

使用道具 舉報(bào)

板凳
ID:96682 發(fā)表于 2019-4-18 00:38 | 只看該作者
這文不對(duì)題的無(wú)解
回復(fù)

使用道具 舉報(bào)

地板
ID:213173 發(fā)表于 2019-4-18 05:25 | 只看該作者
你的程序用的是12864,仿真用的是1602,讓它怎么顯示?
回復(fù)

使用道具 舉報(bào)

5#
ID:515099 發(fā)表于 2019-4-18 11:29 | 只看該作者
wulin 發(fā)表于 2019-4-18 05:25
你的程序用的是12864,仿真用的是1602,讓它怎么顯示?

那換啦LCD12864,要怎么改才能顯示數(shù)據(jù)?

sbit LCD_CS = P0^0;    //片選信號(hào)輸入
sbit LCD_STD = P0^1;   //串行數(shù)據(jù)輸入
sbit LCD_SCLK = P0^2;  //串行時(shí)鐘輸入

void delay_nms(uint t)
{
    uint i;
    uchar j;
    for(i=0;i<t;i++)
      for(j=0;j<110;j++);
}

/*函數(shù)功能:向lcd12864串行輸入一個(gè)字節(jié)*/
void send_byte(uchar Dbyte)
{
    uchar i;
    for(i=0;i<8;i++)
    {
      LCD_SCLK = 0;
      Dbyte = Dbyte<<1;
      LCD_STD = CY;
      LCD_SCLK = 1;
      _nop_();
      LCD_SCLK = 0;
    }   
}
/*函數(shù)功能:接收l(shuí)cd12864輸出的一個(gè)有效字節(jié)*/
uchar recive_byte()
{
    uchar temp1,temp2,i;
    bit flag;
    temp1 = 0;
    temp2 = 0;
    for(i=0;i<8;i++)//接收有效字節(jié)的高四位
    {
        temp1 = temp1<<1;
        LCD_SCLK = 0;
         LCD_SCLK = 1;
        _nop_();
        LCD_SCLK = 0;
        flag = LCD_STD;
        if(flag==1)
          temp1 = temp1&0x01;  
    }
    for(i=0;i<8;i++)//接收有效字節(jié)的低四位
    {
        temp2 = temp2<<1;
        LCD_SCLK = 0;
         LCD_SCLK = 1;
        _nop_();
        LCD_SCLK = 0;
        flag = LCD_STD;
        if(flag==1)
          temp2 = temp2&0x01;  
    }   
    return ((temp1&0xf0)|(temp2&0x0f));//返回接收到的有效字節(jié)
}
/*函數(shù)功能:檢測(cè)忙標(biāo)志位*/
void lcd12864_checkbusy()
{
    do
    {
        send_byte(0xfc);//1111 1【1 RW】【0 RS】0
    }while(recive_byte()&0x80==0x80);  //BF(.7)=1 Busy
}

/*函數(shù)功能:向12864寫(xiě)命令函數(shù)*/
void lcd12864_write_com(uchar com)
{
    LCD_CS = 1;
    lcd12864_checkbusy();//檢測(cè)忙信號(hào)
     send_byte(0xf8);//1111 1[0 rw][0 rs]0   寫(xiě)命令起始指令
    send_byte(com&0xf0);   
    send_byte((com<<4)&0xf0);
    LCD_CS = 0;
}
/*函數(shù)功能:向12864寫(xiě)數(shù)據(jù)函數(shù)*/
void lcd12864_write_dat(uchar dat)
{
    LCD_CS = 1;
    lcd12864_checkbusy();//檢測(cè)忙信號(hào)
    send_byte(0xfa);//1111 1[0 rw][1 rs]0  寫(xiě)數(shù)據(jù)起始指令
    send_byte(dat&0xf0);
    send_byte((dat<<4)&0xf0);
    LCD_CS = 0;
}

void lcd12864_set_cursor(uchar x,uchar y)
{
    uchar addr;
    switch(x)//確定行
    {
        case 0x00:addr = 0x80;break;//第一行
        case 0x01:addr = 0x90;break;//第二行
        case 0x02:addr = 0x88;break;//第三行
        case 0x03:addr = 0x98;break;//第四行
        default:break;
    }
    addr += y;                      //確定列
    lcd12864_write_com(addr);       //設(shè)置光標(biāo)
}
/*函數(shù)功能:lcd12864清顯示(顯示漢字、字符模式下的清屏)*/
void lcd12864_clear0(void)
{
    lcd12864_write_com(0x01);
    delay_nms(10);
}
/*函數(shù)功能:lcd12864清顯示(繪圖模式下的清屏)*/
void lcd12864_clear1(void)
{
    uchar i, j, k ;
    lcd12864_write_com(0x34);//功能設(shè)置:擴(kuò)充指令集動(dòng)作
    lcd12864_write_com(0x36);//開(kāi)繪圖顯示
    for( i = 0 ; i < 2 ; i++ )//分上下兩屏寫(xiě)
    {
        for( j = 0 ; j < 32 ; j++ )
        {
          lcd12864_write_com( 0x80 + j ) ;//寫(xiě)Y坐標(biāo)(行坐標(biāo))
            if( i == 0 )                  //寫(xiě)X坐標(biāo)(列坐標(biāo))
               lcd12864_write_com( 0x80 ) ;
            else
               lcd12864_write_com( 0x88 ) ;
            for( k = 0 ; k < 16 ; k++ )      //寫(xiě)一整行數(shù)據(jù)
                lcd12864_write_dat(0x00) ;
        }
    }
    lcd12864_write_com( 0x30 ) ;//功能設(shè)置:恢復(fù)為基本指令集
                                //          關(guān)繪圖顯示
}
/*函數(shù)功能:初始化函數(shù)*/
void lcd12864_init()
{
  delay_nms(50);
  //功能設(shè)定
  lcd12864_write_com(0x30);   //設(shè)置為8位并行口,基本指令集
  delay_nms(1);
  lcd12864_write_com(0x30);   //再次設(shè)置為8位并行口,基本指令集
  delay_nms(1);
  lcd12864_write_com(0x0c);   //顯示狀態(tài)設(shè)置:整體顯示ON 游標(biāo)OFF
  delay_nms(10);
  lcd12864_write_com(0x01);   //清除顯示,并且設(shè)定地址指針為00H
  delay_nms(10);
  lcd12864_write_com(0x06);   //設(shè)置為游標(biāo)右移,DDRAM位地址加1,畫(huà)面不移動(dòng)
}

/*函數(shù)功能:在指定位置 顯示一個(gè)字符*/
void lcd12864_write_char(uchar x,uchar y,uchar chr)
{
  lcd12864_set_cursor(x,y);
  lcd12864_write_dat(chr);
}
/*函數(shù)功能:在指定位置 顯示一個(gè)字符*/
void lcd12864_write_str(uchar x,uchar y,uchar *string)
{
    uchar *str;
    uchar i=x;
    uchar j=y;
    str = string;
    lcd12864_set_cursor(x,y);
    while(*str!='\0')
    {
      lcd12864_write_dat(*str);
      j++;
      if(j>0x0f)
      {
        i++;
        j=0;
        if(i>4)
          i=0;
        lcd12864_set_cursor(i,j);
      }   
      str++;
    }   
}


//畫(huà)滿屏圖片
//參數(shù):dat為填充的數(shù)據(jù)
void draw_full_picture (uchar *dat)
{
    uchar i;                 
    uchar j;
    uchar k;
    uchar bGDRAMAddrX = 0x80;        //GDRAM水平地址
    uchar bGDRAMAddrY = 0x80;        //GDRAM垂直地址
    for(i = 0; i < 2; i++)                                                                                                            
    {
        for(j = 0; j < 32; j++)                                                                 
        {
            for(k = 0; k < 8; k++)                                                         
            {
                lcd12864_write_com(0x34);                //設(shè)置為8位MPU接口,擴(kuò)充指令集
                lcd12864_write_com(bGDRAMAddrY+j);        //垂直地址Y                                                                        
                lcd12864_write_com(bGDRAMAddrX+k);        //水平地址X
                lcd12864_write_dat(*dat++);
                lcd12864_write_dat(*dat++);
            }
        }
        bGDRAMAddrX = 0x88;                    //寫(xiě)下半屏幕
    }
    lcd12864_write_com(0x36);                            //打開(kāi)繪圖模式
    lcd12864_write_com(0x30);                            //恢復(fù)基本指令集,關(guān)閉繪圖模式   
}


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表