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