找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2310|回复: 4
打印 上一主题 下一主题
收起左侧

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口是灰色的,我百度了一下说是电压不稳?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:342822 发表于 2022-11-20 23:23 | 只看该作者
VEE??????
回复

使用道具 举报

板凳
ID:121859 发表于 2022-11-21 08:58 | 只看该作者
你自己程序有问题呀,IO口与电路不符。仔细检查吧,EN错了。
回复

使用道具 举报

地板
ID:1053046 发表于 2022-11-21 21:29 | 只看该作者
zhxiufan 发表于 2022-11-21 08:58
你自己程序有问题呀,IO口与电路不符。仔细检查吧,EN错了。

没错呀,我把P0口全部换成P3口就可以正常运行了
回复

使用道具 举报

5#
ID:213173 发表于 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. }
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表