標(biāo)題: Proteus仿真單片機(jī)+LCD1602仿真異常 [打印本頁]

作者: zmcbhbzclb    時(shí)間: 2022-11-20 22:23
標(biāo)題: Proteus仿真單片機(jī)+LCD1602仿真異常
源碼
#include <reg51.h>

sbit rs=P2^0;
sbit rw=P2^1;
sbit en=P2^2;

void delay(int n)    //延時(shí)函數(shù)                           
{
        int x,y;
        for(x=n;x>0;x--)
                for(y=999;y>0;y--);
}

void lcd_wcom(char com)    //指令寫入函數(shù)               
{
        rs=0; //輸入指令
        rw=0;
        P0=com;
        delay(15);
        en=1;
        en=0;
}

void lcd_wdat(char dat)  //數(shù)據(jù)寫入函數(shù)        
{
        rs=1;  //輸入數(shù)據(jù)
        rw=0;
        P0=dat;
        delay(15);
        en=1;
        delay(15);
        en=0;
}

void lcd_init()    //1602lcd初始化函數(shù)                 
{
        P0=0X00;
        lcd_wcom(0x38);  //功能設(shè)定指令:1.數(shù)據(jù)總線8位  2.顯示兩行  3. 5*8總線字符           
        lcd_wcom(0x0c);   //控制整體顯示并且關(guān)閉光標(biāo)        
        lcd_wcom(0x06);   //屏幕上的文字左移或者右移無效         
        lcd_wcom(0x01);  //清顯示,光標(biāo)復(fù)位到地址00H位置           
}


void main()
{
        lcd_init();  //初始化lcd
        while(1){
                lcd_wcom(0x86);//指定顯示位置      
                lcd_wdat(0x33);//3

        }
}

有沒有大佬幫忙看一下問題出在哪里

1.png (10.02 KB, 下載次數(shù): 110)

原理圖

原理圖

2.png (11.84 KB, 下載次數(shù): 108)

然后他運(yùn)行起來是這樣的,P2口是灰色的,我百度了一下說是電壓不穩(wěn)?

然后他運(yùn)行起來是這樣的,P2口是灰色的,我百度了一下說是電壓不穩(wěn)?

作者: taotie    時(shí)間: 2022-11-20 23:23
VEE??????
作者: zhxiufan    時(shí)間: 2022-11-21 08:58
你自己程序有問題呀,IO口與電路不符。仔細(xì)檢查吧,EN錯(cuò)了。

作者: zmcbhbzclb    時(shí)間: 2022-11-21 21:29
zhxiufan 發(fā)表于 2022-11-21 08:58
你自己程序有問題呀,IO口與電路不符。仔細(xì)檢查吧,EN錯(cuò)了。

沒錯(cuò)呀,我把P0口全部換成P3口就可以正常運(yùn)行了
作者: wulin    時(shí)間: 2022-11-22 06:44
zmcbhbzclb 發(fā)表于 2022-11-21 21:29
沒錯(cuò)呀,我把P0口全部換成P3口就可以正常運(yùn)行了

電路沒錯(cuò),程序沒有大問題,延時(shí)時(shí)間不妥。


  1. #include <reg51.h>

  2. sbit rs=P2^0;
  3. sbit rw=P2^1;
  4. sbit en=P2^2;

  5. void delay(int n)    //延時(shí)函數(shù)                           
  6. {
  7.         int x,y;
  8.         for(x=n;x>0;x--)
  9.                 for(y=120;y>0;y--);
  10. }

  11. void lcd_wcom(char com)    //指令寫入函數(shù)               
  12. {
  13.         rs=0; //輸入指令
  14.         rw=0;
  15.         P0=com;
  16.         delay(1);
  17.         en=1;
  18.         delay(1);
  19.         en=0;
  20. }

  21. void lcd_wdat(char dat)  //數(shù)據(jù)寫入函數(shù)        
  22. {
  23.         rs=1;  //輸入數(shù)據(jù)
  24.         rw=0;
  25.         P0=dat;
  26.         delay(1);
  27.         en=1;
  28.         delay(1);
  29.         en=0;
  30. }

  31. void lcd_init()    //1602lcd初始化函數(shù)                 
  32. {
  33.         P0=0X00;
  34.         lcd_wcom(0x38);  //功能設(shè)定指令:1.數(shù)據(jù)總線8位  2.顯示兩行  3. 5*8總線字符           
  35.         lcd_wcom(0x0c);   //控制整體顯示并且關(guān)閉光標(biāo)        
  36.         lcd_wcom(0x06);   //屏幕上的文字左移或者右移無效         
  37.         lcd_wcom(0x01);  //清顯示,光標(biāo)復(fù)位到地址00H位置           
  38. }


  39. void main()
  40. {
  41.         char i;
  42.         lcd_init();  //初始化lcd
  43.         while(1)
  44.         {
  45.                 lcd_wcom(0x83);//指定顯示位置      
  46.                 for(i=0;i<10;i++)
  47.                         lcd_wdat(i+'0');//3
  48.         }
  49. }
復(fù)制代碼








歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1