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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5011|回復: 11
收起左側

關于proteus仿真失敗——很簡單,你肯定會

[復制鏈接]
ID:988502 發表于 2021-12-6 12:39 | 顯示全部樓層 |閱讀模式
學校里設計做了一個單詞記憶測試器
我是現在單片機上實現的,然后再做仿真
然后神奇的事來了,同一個hex單片機上可以實現的仿真里實現不了。
W@OZ1X`YW)O8U6QO7LCK3SI.png
@1DI$G@395$KR~P@KFAME]Q.png


更離譜的是我有一個室友用匯編寫的編譯了hex可以仿真,弄了幾天真的很心累。
H)(RFV2XM]ZTTS%Z~BIS}}9.png
]2KWFPDCLSZF(Q1)1XV%YBG.png
各位說說可能的原因,我自己也嘗試了很多了,再看看大伙兒的想法。


回復

使用道具 舉報

ID:342822 發表于 2021-12-6 15:17 | 顯示全部樓層
看了兩個圖區別是不同的文件夾
回復

使用道具 舉報

ID:102963 發表于 2021-12-6 16:48 | 顯示全部樓層
可能都原因:你的1602驅動程序有問題
回復

使用道具 舉報

ID:161164 發表于 2021-12-6 17:58 | 顯示全部樓層
你不貼代我只能亂猜
請把Readdata和WriteData函數中的CheckBusy注釋掉
回復

使用道具 舉報

ID:96682 發表于 2021-12-7 06:34 來自觸屏版 | 顯示全部樓層
應該是放錯程序了吧
回復

使用道具 舉報

ID:420836 發表于 2021-12-7 09:08 | 顯示全部樓層
有沒有可能是芯片配置不正確? 還是單片機的機器頻率設置不正確?
回復

使用道具 舉報

ID:988502 發表于 2021-12-7 12:46 | 顯示全部樓層
songxia8013 發表于 2021-12-6 16:48
可能都原因:你的1602驅動程序有問題

是的,我對著網上一個驅動改了就行,正在詳細看
回復

使用道具 舉報

ID:401564 發表于 2021-12-7 13:25 | 顯示全部樓層
逛這個論壇三年,我一直很慶幸,我到現在還不會用proteus仿真
回復

使用道具 舉報

ID:624769 發表于 2021-12-7 13:44 | 顯示全部樓層
Y_G_G 發表于 2021-12-7 13:25
逛這個論壇三年,我一直很慶幸,我到現在還不會用proteus仿真

我也不會,同喜同喜。
回復

使用道具 舉報

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:989630 發表于 2021-12-8 15:35 | 顯示全部樓層
你把排阻連接到lcd1602上看看
回復

使用道具 舉報

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,果然此時仿真有顯示了。然而實際單片機則顯示錯誤。
這說明硬件與軟件在數據讀取速度上的不同,影響了實現。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表