![]() |
發布時間: 2021-12-6 12:39
正文摘要:學校里設計做了一個單詞記憶測試器 我是現在單片機上實現的,然后再做仿真 然后神奇的事來了,同一個hex單片機上可以實現的仿真里實現不了。 各位說說可能的原因,我自己也嘗試了很多了,再看看大伙兒的想 ... |
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,果然此時仿真有顯示了。然而實際單片機則顯示錯誤。 這說明硬件與軟件在數據讀取速度上的不同,影響了實現。 |
你把排阻連接到lcd1602上看看 |
有一下幾種驅動; 忙檢測的: 第一種: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; } 我要頂不住了兄弟們 |
Y_G_G 發表于 2021-12-7 13:25 我也不會,同喜同喜。 |
逛這個論壇三年,我一直很慶幸,我到現在還不會用proteus仿真 |
songxia8013 發表于 2021-12-6 16:48 是的,我對著網上一個驅動改了就行,正在詳細看 |
有沒有可能是芯片配置不正確? 還是單片機的機器頻率設置不正確? |
應該是放錯程序了吧 |
你不貼代我只能亂猜 請把Readdata和WriteData函數中的CheckBusy注釋掉 |
可能都原因:你的1602驅動程序有問題 |
看了兩個圖區別是不同的文件夾![]() |