Proteus仿真與實(shí)際的差別
弄了幾天的Proteus仿真,終于覺(jué)得自己想做的東西,已經(jīng)全部用Proteus仿真過(guò)了,應(yīng)該可以動(dòng)手做了。于是先用Proteus畫(huà)好原理圖,再用ARES畫(huà)好PCB板圖——雖然我只是用洞洞板焊接,但是有個(gè)PCB板圖做參照,連線會(huì)容易很多?;藘蓚€(gè)小時(shí),去中關(guān)村買(mǎi)了必要的原件,開(kāi)始動(dòng)手。
單片機(jī)用的是STC89C552RC,原因除了價(jià)廉物美之外,最大的原因是,STC的單片機(jī)可以直接使用串口往里面下程序,這樣我可以直接焊接好板子,然后連接好串口,一邊寫(xiě)一邊調(diào)試,不用把單片機(jī)拿來(lái)拿去了。為了焊的好看些,把線基本都布在了反面,前前后后,修修改改,共焊了3天才弄好,搞得眼睛一閉上都是洞洞板的圈圈。
不過(guò)通過(guò)這次的實(shí)際制作,還真發(fā)現(xiàn)了不少Proteus仿真中不會(huì)想到的問(wèn)題,現(xiàn)記錄如下,希望以后再碰到時(shí),可以作為參考。
碰到的第一個(gè)問(wèn)題,就是程序怎么也下載不到單片機(jī)中去。在Proteus仿真的時(shí)候,并不需要往單片機(jī)中寫(xiě)程序,編譯好后,程序就已經(jīng)在單片機(jī)中了,但是實(shí)際制作時(shí),就得編譯一次程序,下載一次。結(jié)果我在下載時(shí),發(fā)現(xiàn)提示“不能連接到串口”,讓我實(shí)在是頭疼不已。試著用“串口助手”往單片機(jī)發(fā)數(shù)據(jù)時(shí),發(fā)現(xiàn)數(shù)據(jù)指示類(lèi)會(huì)閃爍,說(shuō)明線路是通了。百思不得其解之下,同事提醒我說(shuō),是不是你這兩個(gè)數(shù)據(jù)傳送指示燈有問(wèn)題?雖然我覺(jué)得成分的不可能,可是試著把兩個(gè)LED燈去掉之后,還真可以了……
這是先前的電路圖(省略MAX232芯片)
結(jié)果串口在給單片機(jī)發(fā)數(shù)據(jù)的時(shí)候,燈是會(huì)閃爍的,讓我堅(jiān)定的以為,串口的通路是沒(méi)問(wèn)題的。后來(lái)把電路改成這樣,串口不能通信,不能下載程序的問(wèn)題就好了
終于把串口弄好了,程序下載到了單片機(jī)上,結(jié)果效果和proteus上模擬的完全不一樣。Proteus上的話,1602顯示器直接就顯示數(shù)據(jù)了,結(jié)果到了現(xiàn)實(shí),什么都沒(méi)有……死命的調(diào)節(jié)對(duì)比度電阻,也還是什么都沒(méi)有,真的感覺(jué)無(wú)從下手了。后來(lái)去群里問(wèn),群里的老大給了一個(gè)示例程序,用上去也還是不行,這讓我真的是感覺(jué)要崩潰了。不過(guò)想想焊了這么多天,放棄實(shí)在是不甘心,于是把所有和液晶顯示不相關(guān)的代碼全注釋掉了,突然發(fā)現(xiàn)莫名其妙的,液晶出現(xiàn)了色塊——當(dāng)時(shí)感覺(jué)是太開(kāi)心了,一天了,終于液晶上有顯示了!不過(guò)此時(shí)仍然不能設(shè)置顯示字符,不過(guò)相比沒(méi)有任何顯示已經(jīng)好太多了。
同樣的代碼,為什么這次可以了呢?仔細(xì)的分析了代碼,發(fā)現(xiàn)這次的代碼,唯一的不同,就是我為了少寫(xiě)幾個(gè)字,延時(shí)函數(shù)用的是群里老大給的。這是唯一的不同之處。比對(duì)一下兩個(gè)延時(shí)1毫秒的函數(shù)。
我自己的:
?
1
2
3
4
5
6
voiddelay(unsignedcharms)
{
unsignedchari,j;
for(i=0; i for(j=0; j<120; j++); } 群里老大給的: ? 1 2 3 4 5 6 voiddelay(intms) { inti,j; for(i=0; i for(j=0; j<120; j++); } 沒(méi)錯(cuò),兩個(gè)函數(shù)唯一的區(qū)別,就是變量的類(lèi)型,我寫(xiě)的時(shí)候,看變量都不會(huì)超過(guò)255,為了省點(diǎn)空間,定義的都是unsigned char,而一般的延時(shí)函數(shù),用的是int類(lèi)型,就是這兩個(gè)變量類(lèi)型的不同,導(dǎo)致了延時(shí)的不同,同樣是想延時(shí)1毫秒,我的函數(shù)實(shí)際上只能延時(shí)0.4到0.5毫秒左右,就是這個(gè)的區(qū)別,讓我在操作液晶時(shí),各個(gè)時(shí)序的延時(shí)不夠,給液晶的命令不能到達(dá)。后來(lái)修改后,再修改了一下程序其他地方,終于讓液晶正確的顯示了。 再說(shuō)一個(gè)比較郁悶的事情,在Proteus里面,1602是這樣顯示的 買(mǎi)來(lái)實(shí)物后,我也理所當(dāng)然的認(rèn)為,有焊點(diǎn)的是下方(事實(shí)上我確實(shí)認(rèn)為這樣比較符合心理,哈哈)。結(jié)果程序?qū)懞蠛茫伙@示出來(lái),全倒過(guò)來(lái)了………… 不管怎么說(shuō),今天總算讓板子上的元件都工作正常了。明天開(kāi)始改程序,實(shí)現(xiàn)具體功能。





