找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于proteus仿真失败——很简单,你肯定会

查看数: 4421 | 评论数: 11 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-12-6 12:39

正文摘要:

学校里设计做了一个单词记忆测试器 我是现在单片机上实现的,然后再做仿真 然后神奇的事来了,同一个hex单片机上可以实现的仿真里实现不了。 各位说说可能的原因,我自己也尝试了很多了,再看看大伙儿的想 ...

回复

ID:988502 发表于 2021-12-10 12:14
ccyyer 发表于 2021-12-7 17:07
有一下几种驱动;
忙检测的:

第一种:r  单片机可以,仿真不行;
#include <reg52.h>
...
void Busy()
{
···
}

第二种:源代码中的:单片机可以仿真不行。
#include <AT89X52.h>
...
void LCD1602_busy(void)
{
···
}

以上两种不能仿真是因为在驱动忙检测里在对P0口赋值后马上忙检测,此时检测的还是对P0赋值的1,所以一直为忙,只有在while忙检测之前加一段延时就行。
例如这样。
void Busy()
{
                P0= 0xFF;//必要的否则会干扰读写信号
                delay_nms(5);
                RW=1;
                RS=0;
                EN=1;
                while(P0 & 0x80);
                EN=0;       
}

为了验证这一猜想,我将P0赋值为0F,果然此时仿真有显示了。然而实际单片机则显示错误。
这说明硬件与软件在数据读取速度上的不同,影响了实现。
ID:989630 发表于 2021-12-8 15:35
你把排阻连接到lcd1602上看看
ID:988502 发表于 2021-12-7 17:07
有一下几种驱动;
忙检测的:

第一种:r  单片机可以仿真不行;
#include <reg52.h>
...
void Busy()
{
                P0= 0xFF;//必要的否则会干扰读写信号
                RW=1;
                RS=0;
                EN=1;
                while(P0 & 0x80);
                EN=0;       
}
第二种:源代码中的:单片机可以仿真不行。
#include <AT89X52.h>
...
void LCD1602_busy(void)
{
     P0_7=1;              //将P0.7置1,为读状态做准备
     RS=0;                //RS=0、RW=1、E=1时,忙信号输出到DB7,由P0.7读入
     RW=1;                //RS=0、RW=1、E=1时,忙信号输出到DB7,由P0.7读入
     E=1;                 //RS=0、RW=1、E=1时,忙信号输出到DB7,由P0.7读入
     while(P0_7==1);      //由P0.7读入1,表示1602液晶忙,需要等待
     E=0;                 //读完以后,恢复E的电平
}


第三种:也是唯一成功的,读入忙信号后不将while循环放在忙检测函数中,这似乎也是影响到仿真的因素,while循环是否在忙检测函数内部。
//BUSY   CHECK
bit test()
{
        bit busy;
        RS=0;
        RW=1;
        EN=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        busy=BF;
        EN=0;
        return busy;
}
我要顶不住了兄弟们
ID:624769 发表于 2021-12-7 13:44
Y_G_G 发表于 2021-12-7 13:25
逛这个论坛三年,我一直很庆幸,我到现在还不会用proteus仿真

我也不会,同喜同喜。
ID:401564 发表于 2021-12-7 13:25
逛这个论坛三年,我一直很庆幸,我到现在还不会用proteus仿真
ID:988502 发表于 2021-12-7 12:46
songxia8013 发表于 2021-12-6 16:48
可能都原因:你的1602驱动程序有问题

是的,我对着网上一个驱动改了就行,正在详细看
ID:420836 发表于 2021-12-7 09:08
有没有可能是芯片配置不正确? 还是单片机的机器频率设置不正确?
ID:96682 发表于 2021-12-7 06:34
应该是放错程序了吧
ID:161164 发表于 2021-12-6 17:58
你不贴代我只能乱猜
请把Readdata和WriteData函数中的CheckBusy注释掉
ID:102963 发表于 2021-12-6 16:48
可能都原因:你的1602驱动程序有问题
ID:342822 发表于 2021-12-6 15:17
看了两个图区别是不同的文件夹

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

Powered by 单片机教程网

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