首先呢,點(diǎn)進(jìn)來(lái)的一定有像我一樣是個(gè)單片機(jī)新手,也一定有高手們來(lái)看看這里面這有什么花樣,嘻嘻,不管怎么樣,同志們來(lái)看帖子的不會(huì)失望的,因?yàn)槲冶緛?lái)是個(gè)新手,所以寫的東西也一定是好理解的,這里呢,鄙人還有一個(gè)不情之請(qǐng),就是請(qǐng)大家?guī)兔貜?fù)幾條唄,畢竟拿獎(jiǎng)品實(shí)在誘人,而我最近有在物色開(kāi)發(fā)板,每每看到一個(gè)相中的,心里就抽搐一下,畢竟作為學(xué)生經(jīng)濟(jì)來(lái)源靠父母,所以想買開(kāi)發(fā)板,只有勒緊褲腰帶過(guò)日子了。再次謝謝各位了。
好了言歸正傳,關(guān)于單片機(jī)大家多多少少有些理解,還有結(jié)構(gòu)什么的大家只要問(wèn)一下度娘,各種資料就都有了,而我如果只是copy一下也沒(méi)什么意思,所以我就說(shuō)點(diǎn)別的。大家都知道單片機(jī)一般來(lái)說(shuō)包括以下幾個(gè)部分,中央處理器,就是CPU,他就像人的大腦一樣控制著整個(gè)系統(tǒng)的運(yùn)行,還有存儲(chǔ)器,存儲(chǔ)器包括ROM和RAM,所謂ROM學(xué)名只讀存儲(chǔ)器,他通常用來(lái)存儲(chǔ)永久性的數(shù)據(jù),所以又被叫做,程序存儲(chǔ)器。而RAM是用來(lái)存放程序執(zhí)行時(shí)產(chǎn)生的數(shù)據(jù)的,成為數(shù)據(jù)存儲(chǔ)器。但是這兩者有什么區(qū)別呢?一般的ROM就像你電腦的硬盤一樣,用來(lái)存放文件等,存儲(chǔ)量較大,而RAM就像你電腦的內(nèi)存一樣,存儲(chǔ)量較小。CPU讀取數(shù)據(jù)并不是直接從硬盤讀取的,而是從內(nèi)存中讀取的,因?yàn)閮?nèi)存的讀寫速度比硬盤要快。這樣就可以理解為什么電腦有硬盤,單片機(jī)有ROM和RAM 了吧,另外ROM在斷電后數(shù)據(jù)并不會(huì)消失,而RAM的數(shù)據(jù)則會(huì)隨著斷電而消失。單片機(jī)還有輸入輸出單元就是高手們口中的I/O接口,可以類比的想象成你電腦的外接?xùn)|西,比如鍵盤鼠標(biāo)顯示器等等,而單片機(jī)的外接只要是,電子元器件,比如開(kāi)關(guān),LED等,數(shù)碼管等等。所以說(shuō)單片機(jī)相當(dāng)于一種小小小電腦,雖然可以處理的數(shù)據(jù)很小,但是在許多領(lǐng)域已經(jīng)夠用了。
好了,我們開(kāi)始做點(diǎn)小東西吧,流水燈,雖然簡(jiǎn)單,但是卻是許多人入門單片機(jī)行業(yè)的第一個(gè)小制作,我們的也不例外,從小的東西一點(diǎn)點(diǎn)擴(kuò)展到大的復(fù)雜的東西。
這次我們需要兩大軟件, proteus和 Keil uVision4。前者主要是做仿真用的,就是在沒(méi)向單片機(jī)燒寫程序之前,先用這個(gè)軟件進(jìn)行仿真操作,如果仿真成功那么在板子上的實(shí)驗(yàn)也多半會(huì)成功,如果在仿真上都通不過(guò)的話,那么即使把程序燒寫進(jìn)單片機(jī)也一定不會(huì)成功,這就是為什么電子開(kāi)發(fā)者都喜歡這款軟件的原因了。后者是單片機(jī)開(kāi)發(fā)的集成環(huán)境,目前用的最多性能最穩(wěn)定的是uVision2,我們學(xué)校實(shí)驗(yàn)室用的也是2,但是我的電腦里用的是4,但這不是主要問(wèn)題,因?yàn)榇篌w上他們的操作是一樣的。終于可以開(kāi)始操作了!
首先呢,我們?cè)?span> proteus中制作實(shí)驗(yàn)流水燈用的原理圖
打開(kāi)軟甲后,點(diǎn)一下我用紅圈圈住的P,這時(shí)候會(huì)彈出一個(gè)對(duì)話框,這里面可以選擇你所需要的元器件,雙擊,他就會(huì)存在于你的調(diào)用區(qū)內(nèi),把所有的原件選進(jìn)調(diào)用區(qū)內(nèi),到時(shí)候便于畫電路圖,調(diào)用區(qū),就是那個(gè)P下面的框框,你可以看到我的調(diào)用區(qū)里已經(jīng)有了幾個(gè)原件了,我們用的單片機(jī)是AT89C51,按圖選擇就行了,這些都是實(shí)驗(yàn)要用的原件,一一加載完。
開(kāi)始畫圖,學(xué)過(guò)Altium Designer的人對(duì)于畫電路圖應(yīng)該并不陌生,就是布原件,連線,按照合理的位置布好原件之后就是連線,看上一個(gè)圖吧,在最左邊有各種快捷工具箱,從上往下數(shù)第六個(gè)就是劃線用的,點(diǎn)一下后就可以連接各個(gè)元器件了。這里我們用到了總線,就是那根很粗的藍(lán)色線,這樣,在空白處單擊右鍵,選擇place->bus就可以了,總線的畫法,在起點(diǎn)處單擊,在終點(diǎn)處單擊,在按esc鍵退出劃線狀態(tài),連完線之后我們還需要給這塊單片機(jī)加載程序,這里我們就要用到下一個(gè)軟件了,keil。
下面就是keil的主界面,選擇project->new,新建一個(gè)工程,命好名就行了,然后,再點(diǎn)文件,也就是file,new,寫代碼,然后保存,保存時(shí)注意,要自己加上后綴名,就是(.c)
這樣系統(tǒng)會(huì)自動(dòng)保存為C程序文件,然后需要點(diǎn)擊我圈住的幾個(gè)圖標(biāo),來(lái)編譯生成可執(zhí)行的文件,這里需要注意的是,要點(diǎn)擊我圈住的想魔術(shù)棒一樣的東西,然后選擇output選項(xiàng),勾選,created?。龋牛亍。妫椋欤?,這個(gè)HEX文件就是待會(huì)能夠加載進(jìn),剛剛我們畫好的單片機(jī)里面進(jìn)行仿真。
這里點(diǎn)擊我畫的三個(gè)圖標(biāo)中間那個(gè),然后看看沒(méi)錯(cuò),說(shuō)明成功了,然后再切換至protues里,雙擊單片機(jī),看第二欄,選擇文件,把剛才生成的HEX文件加進(jìn)去,OK,可以執(zhí)行了,
在protues的左下角有控制開(kāi)關(guān),點(diǎn)擊小三角就可以看到你的燈在像流水一樣,亮起!效果就像圖一樣,但是圖不會(huì)動(dòng),大家就想像著吧!
如果你有單片機(jī),想在板子上看效果就要在keil中點(diǎn)一下這個(gè)圖標(biāo),把程序燒寫進(jìn)單片機(jī)里就行了,執(zhí)行起來(lái),非常有成就感,因?yàn)槲覜](méi)有板子,而我在實(shí)驗(yàn)室做的效果也忘記拍照片了,實(shí)在是不好意思了。
下面我們來(lái)分析下代碼,
#include
//定義一個(gè)數(shù)據(jù)表格unsigned char code TAB[16]=
{ //定義表格一定要使用code,這樣會(huì)做到程序存儲(chǔ)區(qū)中
0xFE, //表格第1 步數(shù)據(jù)0b111111100
xFD,//表格第2 步數(shù)據(jù)0b11111101
0xFB, //表格第3 步數(shù)據(jù)0b11111010
0xF7, //表格第4 步數(shù)據(jù)0b11110111
0xEF, //表格第5 步數(shù)據(jù)0b11101111
0xDF, //表格第6 步數(shù)據(jù)0b11011111
0xBF, //表格第7 步數(shù)據(jù)0b10111111
0x7F, //表格第8 步數(shù)據(jù)0b01111111
0x3F, //表格第9 步數(shù)據(jù)0b00111111
0x1F, //表格第10 步數(shù)據(jù)0b00011111
0x0F, //表格第11 步數(shù)據(jù)0b00001111
0x07, //表格第12 步數(shù)據(jù)0b00000111
0x03, //表格第13 步數(shù)據(jù)0b00000011
0x01, //表格第14 步數(shù)據(jù)0b00000001
0x00, //表格第15 步數(shù)據(jù)0b00000000
0xFF, //表格第16 步數(shù)據(jù)0b11111111};
//---------------------------------------//名稱: 主函數(shù)//---------------------------------------
void main(void) //主函數(shù),單片機(jī)開(kāi)機(jī)后就是從這個(gè)函數(shù)開(kāi)始運(yùn)行
{ unsigned int a=0; //定義一個(gè)int 型變量,做延時(shí)用
unsigned char b=15; //定義一個(gè)char 型變量,顯示內(nèi)容用
while(1) //死循環(huán),單片機(jī)初始化后,將一直運(yùn)行這個(gè)死循環(huán)
{ for(a=0;a<20000;a++); //延時(shí)若干時(shí)間
if(++b>15) b=0; //b 做加1 操作,并限制在0-15 以內(nèi)
P0=TAB[b]; //將TAB[b]的值送入PO 口輸出
}
}
稍微有點(diǎn)C語(yǔ)言基礎(chǔ)的人應(yīng)該都能看懂,如果看不懂,就應(yīng)該惡補(bǔ)一下嘍!
看剛開(kāi)始我們定義了一串?dāng)?shù)組,他們?nèi)怯茫保哆M(jìn)制表示的,這個(gè)可以表示燈的狀態(tài),看2進(jìn)制,1代表燈亮,0代表燈滅,所以我們只要改變下1和0,就可以實(shí)現(xiàn)不同的亮的狀態(tài)了,下面有幾張圖,實(shí)際上是我們的作業(yè),看黑的代表亮,白的代表滅,所以我們只要在相應(yīng)的位置上把1,0換一換就行了,然后再把它們換成十六進(jìn)制寫進(jìn)代碼里,在執(zhí)行上面的步驟,就可以實(shí)現(xiàn)不同的燈亮法了,
大概就是這樣,作為入門我們先從左東西開(kāi)始,慢慢的在把相應(yīng)的單片機(jī)的知識(shí)補(bǔ)上來(lái),要不直接 學(xué)什么引腳什么的一來(lái)枯燥,二來(lái)容易忘記,因?yàn)椴⒉皇敲總€(gè)引腳都會(huì)經(jīng)常用的,既然是做工程的,就沒(méi)必要做那么多的無(wú)用功,只學(xué)對(duì)自己有用的,慢慢的自己的知識(shí)就積累起來(lái)了。各位加油!