标题: Proteus仿真单片机+LCD1602仿真异常 [打印本页]

作者: zmcbhbzclb    时间: 2022-11-20 22:23
标题: Proteus仿真单片机+LCD1602仿真异常
源码
#include <reg51.h>

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

void delay(int n)    //延时函数                           
{
        int x,y;
        for(x=n;x>0;x--)
                for(y=999;y>0;y--);
}

void lcd_wcom(char com)    //指令写入函数               
{
        rs=0; //输入指令
        rw=0;
        P0=com;
        delay(15);
        en=1;
        en=0;
}

void lcd_wdat(char dat)  //数据写入函数        
{
        rs=1;  //输入数据
        rw=0;
        P0=dat;
        delay(15);
        en=1;
        delay(15);
        en=0;
}

void lcd_init()    //1602lcd初始化函数                 
{
        P0=0X00;
        lcd_wcom(0x38);  //功能设定指令:1.数据总线8位  2.显示两行  3. 5*8总线字符           
        lcd_wcom(0x0c);   //控制整体显示并且关闭光标        
        lcd_wcom(0x06);   //屏幕上的文字左移或者右移无效         
        lcd_wcom(0x01);  //清显示,光标复位到地址00H位置           
}


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

        }
}

有没有大佬帮忙看一下问题出在哪里

1.png (10.02 KB, 下载次数: 110)

原理图

原理图

2.png (11.84 KB, 下载次数: 108)

然后他运行起来是这样的,P2口是灰色的,我百度了一下说是电压不稳?

然后他运行起来是这样的,P2口是灰色的,我百度了一下说是电压不稳?

作者: taotie    时间: 2022-11-20 23:23
VEE??????
作者: zhxiufan    时间: 2022-11-21 08:58
你自己程序有问题呀,IO口与电路不符。仔细检查吧,EN错了。

作者: zmcbhbzclb    时间: 2022-11-21 21:29
zhxiufan 发表于 2022-11-21 08:58
你自己程序有问题呀,IO口与电路不符。仔细检查吧,EN错了。

没错呀,我把P0口全部换成P3口就可以正常运行了
作者: wulin    时间: 2022-11-22 06:44
zmcbhbzclb 发表于 2022-11-21 21:29
没错呀,我把P0口全部换成P3口就可以正常运行了

电路没错,程序没有大问题,延时时间不妥。


  1. #include <reg51.h>

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

  5. void delay(int n)    //延时函数                           
  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)    //指令写入函数               
  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)  //数据写入函数        
  22. {
  23.         rs=1;  //输入数据
  24.         rw=0;
  25.         P0=dat;
  26.         delay(1);
  27.         en=1;
  28.         delay(1);
  29.         en=0;
  30. }

  31. void lcd_init()    //1602lcd初始化函数                 
  32. {
  33.         P0=0X00;
  34.         lcd_wcom(0x38);  //功能设定指令:1.数据总线8位  2.显示两行  3. 5*8总线字符           
  35.         lcd_wcom(0x0c);   //控制整体显示并且关闭光标        
  36.         lcd_wcom(0x06);   //屏幕上的文字左移或者右移无效         
  37.         lcd_wcom(0x01);  //清显示,光标复位到地址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. }
复制代码








欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1