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