|
接上篇帖子,單片機(jī)這種東西,如果是用來(lái)考試,翻翻書(shū)大概就可以了,如果是拿來(lái)開(kāi)發(fā)一些小的作品,自學(xué)2個(gè)月,也不會(huì)太難,因?yàn)楝F(xiàn)在開(kāi)發(fā)板也是很多的,資料也很豐富,如果你是想找工作,想獨(dú)立開(kāi)發(fā)產(chǎn)品,這個(gè),對(duì)于一個(gè)剛畢業(yè)的人來(lái)說(shuō),就比較難了,很大的原因,是走了彎路,而且沿著彎路一直走了下去。我們希望分享一些有用的東西,實(shí)用的東西,讓新手少走些彎路,如果每個(gè)坑都重踩一遍,這得浪費(fèi)多少時(shí)間啊。
言歸正傳,單片機(jī)是必須要親自動(dòng)手敲代碼才能學(xué)會(huì)的,所以從這一章節(jié)開(kāi)始,我們會(huì)分享一些例程,并詳細(xì)解析,希望能給新手帶來(lái)幫助,還是那句話(huà),本人水平有限,老手輕拍,有錯(cuò)誤請(qǐng)指出,有事請(qǐng)留言。
一個(gè)經(jīng)典的例程,點(diǎn)亮你的LED
我以手里的這塊STC15W1K16PWM芯片為例來(lái)寫(xiě)例子,這塊芯片至少還有一些人用來(lái)開(kāi)發(fā)產(chǎn)品,學(xué)習(xí)了至少還有一定實(shí)用價(jià)值,如果你手里有同類(lèi)型的芯片,那就更方便學(xué)習(xí)了,不管干什么,都是從簡(jiǎn)單到復(fù)雜的,比如學(xué)計(jì)算機(jī),第一句就是“HELLO WORLD”,那么學(xué)習(xí)單片機(jī),就是點(diǎn)亮你的LED了{:lol:}。先把原理圖上傳,單片機(jī)是軟硬結(jié)合的東西,硬件為主,軟件為輔,所以需要看原理圖編程。,
新建一個(gè)KEIL4工程,把下面代碼敲進(jìn)去,就可以實(shí)現(xiàn)LED的閃爍了,但是還是需要解釋下一下代碼。
頭文件 #include "config.h"這個(gè)頭文件是我們新建的,這里面是STC15W系列的寄存器地址定義等等,就好比學(xué)STC89C52RC那樣,先包含頭文件#include "reg52.h"一樣,因?yàn)镾TC15W系列的不是標(biāo)準(zhǔn)的51,所以不能用REG52.H這個(gè)頭文件,需要我們自己去新建一個(gè),然后把官網(wǎng)的頭文件復(fù)制過(guò)來(lái)就好了。
typedef 的作用
typedef是用來(lái)聲明新類(lèi)型名的,也即是說(shuō)我覺(jué)得unsigned char 太長(zhǎng)了,記不住,或者每次都寫(xiě)很繁瑣怎么辦?另外起一個(gè)名字,typedef就是起到這個(gè)作用,而且用typedef定義過(guò)的是可以參與系統(tǒng)編譯的,如果編譯錯(cuò)誤,那么編譯器是提醒你的,如果你是用#define來(lái)定義,也可以,除非你保證自己的程序沒(méi)有錯(cuò)誤,如果出錯(cuò),不小心把unsigned char寫(xiě)unsigned charr也是會(huì)通過(guò)的,因?yàn)?define知識(shí)簡(jiǎn)單的替換,并不參與系統(tǒng)編譯。typedef的詳細(xì)用法請(qǐng)參考C語(yǔ)言第四版326頁(yè),非常詳細(xì)。
00004.jpg (58.78 KB, 下載次數(shù): 150)
下載附件
2018-10-13 08:35 上傳
關(guān)于無(wú)符號(hào)字符型的定義,無(wú)符號(hào)字符型占1個(gè)字節(jié),取值范圍在0-255之間,無(wú)符號(hào)基本整型占2個(gè)字節(jié),取值范圍是0-65535,但是在STM32上,我記得是unsigned short ,即無(wú)符號(hào)短整型,一直混用,當(dāng)時(shí)搞得好混,后來(lái)看C語(yǔ)言,發(fā)現(xiàn)可以同時(shí)用,unsigned long,即無(wú)符號(hào)長(zhǎng)整型,取值范圍是0-4294967295,我們暫時(shí)就用到這3種類(lèi)型的數(shù)據(jù)變量,至于更具體的請(qǐng)翻閱C語(yǔ)言第44頁(yè)。
關(guān)于函數(shù)前置聲明
函數(shù)如果在MAIN函數(shù)前面定義,是不要函數(shù)前置聲明的,但是如果在MAIN后面定義,那就一定需要了,不然會(huì)報(bào)錯(cuò)的。
用sbit定義引腳
比如sbit LED0 = P1^0;,P1^0必須要大寫(xiě)而且必須要加一個(gè)分號(hào),sbit定義是51單片機(jī)獨(dú)有的,STM32就沒(méi)有這個(gè)東西,直接初始化用就好了。
main入口函數(shù)
統(tǒng)一規(guī)定的,就這么個(gè)寫(xiě)法,第一個(gè)void指的是函數(shù)沒(méi)有返回值,第二個(gè)void指的是函數(shù)沒(méi)有形參調(diào)用,在STM32里面,就不是這樣的,int main(void),是一個(gè)基本整型的變量作為返回值的。里面是一個(gè)while(1)的大循環(huán),這沒(méi)啥好說(shuō)的。
關(guān)于端口配置
如果是用STC89C52的話(huà),不需要端口配置的,除了P0是開(kāi)漏輸出,其他普通IO都是準(zhǔn)雙向口,直接賦值即可,但是STC89C52的IO驅(qū)動(dòng)能力是有限的,LED小燈是一個(gè)耗電大戶(hù),必須要加一個(gè)三極管才可以,STC15W則不需要,IO可以配置位4種模式,準(zhǔn)雙向口,開(kāi)漏輸出,推挽輸出,高阻輸入4種模式,前2個(gè)沒(méi)什么分別,推挽輸出是大電流,可以直接驅(qū)動(dòng)LED,最大可以達(dá)到20MA,但是根據(jù)使用經(jīng)驗(yàn),最好是灌入電流,也就是IO是0的時(shí)候,點(diǎn)亮LED,至于拉電流,IO上拉15MA可能就極限了。
00005.jpg (123.92 KB, 下載次數(shù): 150)
下載附件
2018-10-13 08:35 上傳
程序中的寄存器定義P0M0 P0M1的配置,就是參照這個(gè)表格配置出來(lái)的,因?yàn)楹枚嘁_還用在了別的上面,實(shí)現(xiàn)別的功能。請(qǐng)注意,P0M0和P0M1只是設(shè)定IO端口的工作類(lèi)型,至于輸出IO是低電平還是高電平,仍然是需要你自己決定的 ,不然達(dá)不到你要實(shí)現(xiàn)的效果。我們只是想點(diǎn)亮第一組LED的第一個(gè)燈,那么選擇LED = 1;就可以了,然后在主循環(huán)中延時(shí)閃爍就好了。
關(guān)于二進(jìn)制和16進(jìn)制
我們?cè)谘h(huán)中,寫(xiě)P2 = 0XFE,這兒是將P2端口的最低位清零,換算成二進(jìn)制也就是1111_1110,這個(gè)0就代表了P2口的最低位,也就是原理圖中的DB0,如果我們不想并口操作IO,可以用sbit DB0 = P2^0;這樣定義就可以將P2 = 0XFE,替換成DB = 0;P2 = 0XFF;替換DB0 = 1;就可以實(shí)現(xiàn)同樣的效果,我們稱(chēng)這樣的叫做可位操作,隨著以后的學(xué)習(xí)深入,你會(huì)發(fā)現(xiàn)有很多寄存器不支持位操作,這就要想辦法了。二進(jìn)制怎么轉(zhuǎn)換成16進(jìn)制?16進(jìn)制怎么轉(zhuǎn)換成二進(jìn)制呢?答案很簡(jiǎn)單,用計(jì)算器{:titter:},如下圖WINDOWS自帶的非常好用,還有就是自己算,也比較簡(jiǎn)單,0XFF 換成二級(jí)制也就是1111_1111,
16進(jìn)制最大計(jì)數(shù)到F,從0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,共計(jì)16個(gè)數(shù),比如一個(gè)0XFE,是一個(gè)8位數(shù),1111是高4位 ,1110看成低四位,從左到右,依次看過(guò)去的1對(duì)應(yīng)的是8421,低四位也一樣,也是8421,8*1+4*1+2*1+1*1 = 15,也就是16進(jìn)制的F,8*1+4*1+2*1+1*0 = 14,也就是16進(jìn)制的E,就是這樣算,當(dāng)然我覺(jué)得還是計(jì)算器最好用。{:lol:}
00006.jpg (30.38 KB, 下載次數(shù): 143)
下載附件
2018-10-13 08:35 上傳
關(guān)于delay延時(shí)函數(shù)
還記得我剛開(kāi)始學(xué)的時(shí)候,就是不知道這個(gè)DELAY函數(shù)是怎么來(lái)的,在那里苦思冥想,也得不到結(jié)果。如果你是一個(gè)剛?cè)腴T(mén)的新手,那么這個(gè)DELAY函數(shù)也不要去研究了,直接用STC的客戶(hù)端配置好就完事了,注意選擇好對(duì)應(yīng)的內(nèi)核就好了。這樣的函數(shù),沒(méi)有參考的價(jià)值,沒(méi)有研究意義。要定時(shí)精準(zhǔn),還是要用定時(shí)器來(lái)做。
00007.jpg (38.02 KB, 下載次數(shù): 150)
下載附件
2018-10-13 08:36 上傳
好了,就到這里吧,未完待續(xù)。。。
|
評(píng)分
-
查看全部評(píng)分
|