大家好,上期和大家介紹了點(diǎn)亮一個(gè)LED燈來順便說明了一下Keil編程軟件和仿真軟件Proteus的使用,今天給大家解釋一下其中的一些小知識(shí)點(diǎn),歡迎大家評論轉(zhuǎn)發(fā)點(diǎn)贊關(guān)注! 下面是上一期的程序界面,在輸入下面的程序時(shí), Keil會(huì)自動(dòng)識(shí)別關(guān)鍵字,并以不同的顏色提示用戶加以注意,這樣會(huì)使用戶少犯錯(cuò)誤,有利于提高編程效率。若新建立的文件沒有事先保存的話, Keil是不會(huì)自動(dòng)識(shí)別關(guān)鍵字的,也不會(huì)有不同顏色出現(xiàn)。 知識(shí)點(diǎn)1: reg52.h頭文件的作用在代碼中引用頭文件,其實(shí)際意義就是將這個(gè)頭文件中的全部內(nèi)容放到引用頭文件的位置處,免去我們每次編寫同類程序都要將頭文件中的語句重復(fù)編寫。在代碼中加入頭文件有兩種書寫方法,分別為#include <reg52.h>和#include'reg52.h', 包含頭文件時(shí)都不需要在后面加分號。兩種寫法區(qū)別如下:當(dāng)使用包含頭文件時(shí),編譯器先進(jìn)入到軟件安裝文件夾處開始搜索這個(gè)頭文件,也就是KeiNC51INC這個(gè)文件夾下,如果這個(gè)文件夾下沒有引用的頭文件,編譯器將會(huì)報(bào)錯(cuò).當(dāng)使用雙撇號'“包含頭文件時(shí),編譯器先進(jìn)入到當(dāng)前工程所在文件夾處開始搜索該頭文件,如果當(dāng)前工程所在文件夾下沒有該頭文件,編譯器將繼續(xù)回到軟件安裝文件夾處搜索這個(gè)頭文件,若找不到該頭文件,編譯器將報(bào)錯(cuò)。reg52.h在軟件安裝文件夾處存在,所以我們一般寫成#include <reg52.h>打開該頭文件查看其內(nèi)容,將鼠標(biāo)移動(dòng)到reg52.h上,單擊右鍵,選擇【Open document <reg52.h>】,即可打開該頭文件,以后若需打開工程中的其他頭文件,也可以采用這種方式。 從上面代碼中可以看到,該頭文件中定義了52系列單片機(jī)內(nèi)部所有的功能寄存器,用到!了前面講到的sfr和sbit這兩個(gè)關(guān)鍵字, 'sfr P0=0x80;'語句的意義是,把單片機(jī)內(nèi)部地址0x80處的這個(gè)寄存器重新起名叫P0,以后我們在程序中可直接操作P0,就相當(dāng)于直接對單片機(jī)內(nèi)部的0x80地址處的寄存器進(jìn)行操作。說通俗點(diǎn),也就是說,通過sfr這個(gè)關(guān)鍵字,讓Keil編譯器在單片機(jī)與人之間搭建一條可以進(jìn)行溝通的橋梁,我們操作的是P0口,而單片機(jī)本身并!不知道什么是P0口,但是它知道它的內(nèi)部地址0x80是什么東西。說到這里我想大家應(yīng)該已經(jīng)明白了,以后凡是編寫51內(nèi)核單片機(jī)程序時(shí),我們在源代碼的第一行就可直接包含該頭文件。 知識(shí)點(diǎn)2:C語言中注釋的寫法,在C語言中,注釋有兩種寫法:(1) //.....個(gè)斜科扛后面跟著的為注釋語句。這種寫法只能注釋一行,當(dāng)換行時(shí),又必須在新行上重新寫兩個(gè)斜扛。(2) /* ../,斜扛與星號結(jié)合使用,這種寫法可以注釋任意行,即斜扛星號與星號斜扛之間的所有文字都作為注釋。所有注釋都不參與程序編譯,編譯器在編譯過程會(huì)自動(dòng)刪去注釋,注釋的目的是為了我們讀程序方便,一般在編寫較大的程序時(shí),分段加入注釋,這樣當(dāng)我們回過頭來再次讀程序時(shí),因?yàn)橛辛俗⑨?其代碼的意義便一目了然了。若無注釋,我們不得不特別費(fèi)力地將程序重新閱讀一遍方可知道代碼含義。養(yǎng)成良好的書寫代碼格式的習(xí)慣,經(jīng)常為自己編寫的代碼加入注釋,以后定能方便許多。 程序中接著往下看, 'sbit LED=P1^0,'語句的含義是,將單片機(jī)PO口的最低位定義為led1。在實(shí)驗(yàn)電路上發(fā)光二極管的陰極連接至單片機(jī)的P1.0口,若要控制發(fā)光二極管,也就是要控制單片機(jī)P1.0口,必定要聲明這一位,否則單片機(jī)肯定不知道我們要操作的是什么東東。需要注意的是,這里的P1不可隨意寫, P是大寫,若寫成p,編譯程序時(shí)將報(bào)錯(cuò),因?yàn)榫幾g器并不認(rèn)識(shí)pl,而它只認(rèn)識(shí)PI,這是因?yàn)槲覀冊陬^文件中定義的是'sfr Pl- 0x90;',這也是大多初學(xué)者編寫第一個(gè)程序愛出的錯(cuò)誤。 知識(shí)點(diǎn)3:主函數(shù)的寫法 main()函數(shù)。格式: void main()注意:后面沒有分號。特點(diǎn):無返回值,無參數(shù),無返回值表示該函數(shù)執(zhí)行完后不返回任何值,上面main前面的void表示“空”,即不返回值的意思,后面我們會(huì)講到有返回值的函數(shù),到時(shí)大家一對比便會(huì)更加明白無參數(shù)表示該函數(shù)不帶任何參數(shù),即main后面的括號中沒有任何參數(shù),我們只寫'()'就可以了,也可以在括號里寫上void,表示“空”的意思,如void main(void).任何一個(gè)單片機(jī)C程序有且僅有一個(gè)main函數(shù),它是整個(gè)程序開始執(zhí)行的入口。大家注意看,在寫完main()之后,在下面有兩個(gè)花括號,這是C語言中函數(shù)寫法的基本要求之一,即在一個(gè)函數(shù)中,所有的代碼都寫在這個(gè)函數(shù)的兩個(gè)大括號內(nèi),每條語句結(jié)束后都要加上分號。 程序中接下來我們看LED=0語句,也就是該程序中最核心的語句。在數(shù)字電路中,電平只有兩種狀態(tài):高電平, 1;低電平, 0。顯然,該語句的意思是,讓P1口的最低位清0。由于沒有操作其他口,所以其余口均保持原來狀態(tài)不變。那么為什么P1口的最低位清0,板上的第一個(gè)發(fā)光二極管就會(huì)亮,結(jié)合上面的電路圖我們知道P1.0如果是低電平,LED燈就會(huì)亮,這句語句就能完成這個(gè)操作。 今天的分享就到這里了,下期給大家分享任意點(diǎn)亮8個(gè)LED燈,做到流水燈的狀態(tài),歡迎大家評論點(diǎn)贊關(guān)注。 |
|