大家都用過(guò)計(jì)算器谅猾,有沒(méi)有想過(guò)它是怎么實(shí)現(xiàn)的呢?這里我不詳述計(jì)算器的原理鳍悠,而只對(duì)思路進(jìn)行簡(jiǎn)單介紹税娜。等我們學(xué)會(huì)了單片機(jī),也可以親手制作一個(gè)計(jì)算器藏研。
用電路進(jìn)行數(shù)學(xué)計(jì)算
通過(guò)電路進(jìn)行數(shù)學(xué)計(jì)算敬矩,應(yīng)該怎么做呢?為了便于理解蠢挡,下面我舉個(gè)很簡(jiǎn)單的例子弧岳。
在這個(gè)電路中,電阻R1=R2业踏,我給A禽炬、B兩點(diǎn)分別接入3V和5V電壓,這個(gè)時(shí)候勤家,C點(diǎn)的電壓則為(5+3)/2=4V腹尖。這個(gè)電路完成了一個(gè)求平均值的操作,如果我們用1V表示數(shù)字1伐脖,它計(jì)算出來(lái)3和5的平均值是4热幔;如果我們定義1mV表示數(shù)字1,這個(gè)電路就計(jì)算出了3000和5000的平均值是4000讼庇。
如果我能通過(guò)巧妙的方法绎巨,利用電阻電容乃至晶體管等元器件的特性,設(shè)計(jì)出很多類似這樣的電路蠕啄,它就可以完成很復(fù)雜的四則運(yùn)算认烁,以及平方、開(kāi)方介汹、對(duì)數(shù)等運(yùn)算却嗡。這就是通過(guò)電路來(lái)幫助我們進(jìn)行數(shù)學(xué)計(jì)算的簡(jiǎn)單例子。在這個(gè)例子中嘹承,并不見(jiàn)得能體現(xiàn)到電路計(jì)算相比于我們用筆紙計(jì)算的優(yōu)勢(shì)窗价。但是如果我們把電路做的足夠復(fù)雜,它的計(jì)算速度是相當(dāng)快的叹卷,并且只要有電能供應(yīng)撼港,它就永遠(yuǎn)不知疲倦的計(jì)算,而且不容易出錯(cuò)骤竹。
上面我們?cè)O(shè)計(jì)了一個(gè)簡(jiǎn)單的模擬電路計(jì)算器帝牡,它能計(jì)算兩個(gè)數(shù)的平均值,我們用電壓值直接表示數(shù)字蒙揣。但是這個(gè)電路在實(shí)際中工作并沒(méi)有那么理想靶溜。做基本電學(xué)實(shí)驗(yàn)測(cè)量電壓的時(shí)候,大家會(huì)發(fā)現(xiàn)懒震,電壓的測(cè)量總是有誤差的罩息,電壓表有誤差,讀數(shù)也有誤差个扰,并且基本上無(wú)法避免瓷炮。自然界中很多東西都是有誤差的。在這里除了電壓表測(cè)出來(lái)的值和實(shí)際值不同递宅,實(shí)際C點(diǎn)電壓值也并不完全等于AB電壓值的平均娘香,因?yàn)槲覀兒茈y保證R1和R2阻值完全一致,并且導(dǎo)線也有電阻办龄。于是我們計(jì)算出來(lái)的結(jié)果烘绽,更可能是3.99或者4.01而不是精確的4.00,這就導(dǎo)致我們的計(jì)算出了誤差土榴。如果電路復(fù)雜了诀姚,誤差會(huì)逐步累積,越來(lái)越大玷禽,最后導(dǎo)致計(jì)算結(jié)果完全沒(méi)有意義赫段,而減小電路的誤差也是相當(dāng)不容易的。
模擬電路與數(shù)字電路矢赁、十進(jìn)制與二進(jìn)制
于是數(shù)字電路誕生了糯笙。相較于模擬電路的不精確,數(shù)字電路就有很大優(yōu)勢(shì)了撩银。注意给涕,數(shù)字電路是相對(duì)于模擬電路而言的,數(shù)字電路的本質(zhì)也是模擬電路。通常我們所說(shuō)的模擬電路够庙,指的是除數(shù)字電路以外的電路恭应。
我們?nèi)祟愑檬M(jìn)制計(jì)數(shù)法表示數(shù)字,原因是我們有十個(gè)手指耘眨。而數(shù)字電路中使用二進(jìn)制數(shù)字來(lái)進(jìn)行運(yùn)算昼榛,因?yàn)楹芏嚯娮悠骷鶗?huì)有兩種很確定的狀態(tài),比如開(kāi)關(guān)的“開(kāi)”和“關(guān)”剔难,燈的“亮”和“滅”胆屿。
二進(jìn)制數(shù)其實(shí)比十進(jìn)制數(shù)簡(jiǎn)單多了。十進(jìn)制中偶宫,從0到9非迹,滿10就向高位進(jìn)位,即9+1=10纯趋;而二進(jìn)制滿二進(jìn)一憎兽,所以二進(jìn)制中1+1=10。一開(kāi)始我們會(huì)感覺(jué)這樣很別扭结闸,實(shí)際上并非二進(jìn)制有多難唇兑,只是我們習(xí)慣了十進(jìn)制而已。二進(jìn)制與十進(jìn)制的轉(zhuǎn)換等更多知識(shí)可以自行學(xué)習(xí)桦锄。
數(shù)字電路中扎附,我們使用的比較多的一種用電壓表示二進(jìn)制數(shù)字的方式,稱為TTL電平(TTL = Transistor-Transistor Logic结耀,原意為邏輯門電路)留夜。它規(guī)定+5V電壓為高電平,表示數(shù)字“1”图甜,0V電壓為低電平碍粥,表示數(shù)字“0”。由于電路自身特點(diǎn)黑毅,實(shí)際上這種TTL電平電路輸出的電壓嚼摩,并非絕對(duì)準(zhǔn)確的5V和0V,而是規(guī)定將>2.4V的電壓視為高電平矿瘦, 電壓<0.4V則視為低電平枕面。也正是因?yàn)檫@樣的特點(diǎn),我們根本不需要將電壓控制的很準(zhǔn)確缚去,就能很準(zhǔn)確的表示出我們想要表示的數(shù)字潮秘。和前面的模擬平均數(shù)計(jì)算電路相比,明顯很有優(yōu)勢(shì)易结。而這也正是數(shù)字電路得以廣泛應(yīng)用的根本原因枕荞。
傳統(tǒng)數(shù)字電路和單片機(jī)
數(shù)字電路的介紹就到此為止柜候,在原理篇中會(huì)有更詳細(xì)的介紹。事實(shí)上躏精,單片機(jī)的本質(zhì)也是數(shù)字電路渣刷。下面我們要說(shuō)的傳統(tǒng)數(shù)字電路,指的是除單片機(jī)這類可編程器件以外的數(shù)字電路玉控。下面我們來(lái)看看單片機(jī)和傳統(tǒng)數(shù)字電路的區(qū)別飞主。
利用一些常用的傳統(tǒng)數(shù)字電路器件(一般都是集成電路芯片),我們可以設(shè)計(jì)出如下圖的電路高诺。它是一個(gè)電子表,有六個(gè)數(shù)碼管顯示時(shí)間碾篡,圖中正顯示的就是00:00:18虱而。可以看出來(lái)這個(gè)電路還是挺復(fù)雜的开泽,設(shè)計(jì)起來(lái)也是很費(fèi)時(shí)間的牡拇。
但是單片機(jī)的出現(xiàn),使得實(shí)現(xiàn)相同功能的電路設(shè)計(jì)難度大大降低穆律。下圖就是使用單片機(jī)設(shè)計(jì)的電路惠呼。同樣是電子表,不僅顯示效果比前面的那個(gè)要好峦耘,而且功能更強(qiáng)大了剔蹋,兩個(gè)按鍵可以像市面上常見(jiàn)的兩個(gè)按鍵的手表一樣調(diào)整時(shí)間和日期;而電路卻簡(jiǎn)單了很多辅髓。我們只需要給單片機(jī)寫進(jìn)去特定的程序泣崩,就可以讓它按照我們?cè)O(shè)計(jì)好的方式工作。
如果某天洛口,我們想要給這個(gè)電子表增加馬表計(jì)時(shí)的功能矫付,對(duì)于前面的那個(gè)數(shù)字電路,恐怕整個(gè)電路都得重新設(shè)計(jì)制作第焰;但是對(duì)于單片機(jī)制作的這個(gè)電路买优,我們只需要修改程序代碼,然后重新寫進(jìn)去就可以了挺举,就像在電腦上安裝軟件一樣杀赢,根本不需要修改電路,十分方便豹悬。
傳統(tǒng)數(shù)字電路和單片機(jī)的關(guān)系就像非智能手機(jī)和智能手機(jī)的關(guān)系一樣葵陵,智能手機(jī)最大的優(yōu)勢(shì)在于它可以安裝各種軟件游戲,而非智能手機(jī)就沒(méi)有這么強(qiáng)大的功能瞻佛。單片機(jī)也是如此脱篙,同樣的電路娇钱,你可以給它下載各種程序,讓它按照你的想法去工作绊困。對(duì)于單片機(jī)來(lái)說(shuō)文搂,硬件電路是單片機(jī)的軀體,而程序才是它的靈魂秤朗,而寫程序的你煤蹭,就是它的上帝。