我們即将進入51單片機的程式設計學習,咱們今天就來講解一下單片機中的C語言(你可以稱作C51)
在說程式設計之前,要先說一些别的東西:
- 二進制,八進制,十六進制
- 二進制中隻有數字0和1,在二進制中1+1為10,我們常說十進制逢十進一,那二進制就是逢二進一,那為什麼我會在這裡說二進制呢,因為我們的51單片機的io口是可以接受發送低電平和高電平的,意思就是輸入輸出的口隻有0和1兩個狀态,是以如果我們了解了二進制,那麼對于單片機的輸入和輸出就會十分明了了
- 八進制,學過C語言,咱們都知道,在C語言中其實是不能直接寫二進制的數的,但是是可以直接寫八進制的數和十六進制的數,是以,在這裡,八進制和十六進制還是為二進制服務的,可以說是二進制的兩種表達形式,我們先來說八進制,八進制和二進制的互轉是非常快捷,我們可以用這個方法完成二進制和八進制的互相轉換:把二進制從低位開始,每三位一組,然後把每組轉成八進制的數,這樣得到的新的數就是我們二進制所對應的的八進制,舉個例子:有這樣一個二進制數1101010101010101010,我們把它從低位開始分成每三個一組,就是001 101 010 101 010 101 010,然後我們将每一組都轉成八進制的數1 5 2 5 2 5 2,合起來就是1525252,我們就這樣得到了八進制的數(在這裡先說方法,原因一會兒會說)
- 十六進制,同樣的,十六進制也是為二進制服務的,那麼十六進制和二進制怎麼轉換呢,是這樣的:把二進制從低位開始,每四位一組,然後把每組轉成十六進制的數,這樣得到的新的數就是我們二進制所對應的的十六進制,還是舉個例子,還是那個二進制數1101010101010101010,我們把它從低位開始分成每四個一組,就是0110 1010 1010 1010 1010,然後我們将每一組都轉成十六進制的數6 a a a a,合起來就是6aaaa,我們呢也就得到了十六進制的數
略微的解釋:對于上述方法,可能有人會比較懵逼,不知道為什麼要這樣做,我們就來看一下:
- 二進制3位一組,我們可以有這麼八個數:000,001,010,011,100,101,110,111,這八個數正好就是從0到7,正好可以完完整整的表示我們的八進制,一個不多一個不少
- 二進制4位一組,我們可以有這麼十六個數:0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111,而這十六個數正好就是從0到15,用十六進制表示就是從0到F,也是正正好好可以表示我們的十六進制,是以方法是這樣的來的
- 對于二進制數的計算,可能有些人不大了解,我們就以上面十六進制的例子來詳細說一下:0110 1010 1010 1010 1010,我們算0110,0*8+1*4+1*2+0*1=6,然後我們再算1010,1*8+0*4+1*2+0*1=10,十六進制中10是a,是以結果是a,剩下的一樣,是以我們就得到了6 a a a a
- 在C語言中,八進制的數要在數字前面加一個0,比如017,但是是不能寫018的,原因你自己斟酌一下,十六進制的數前面要加一個0x或者0X
位運算
為什麼我要說位運算呢,因為位運算在我們的51中也有非常大的作用,然後另一個原因是有一些學校教學的進度可能會慢,一個學期沒有學到這裡,而我們卻要用到位運算,怕出現這種尴尬的局面,我就把位運算也一同寫了進來,在之後的學習生活當中,你會用到很多位運算的,特别是在單片機中,它不僅直覺,而且還高效
- &--按位與
首先要申明的一點,所有的位運算都是對二進制進行處理的,我們的按位與是一個雙目運算符,是将兩個數的二進制相對應的每一位進行邏輯與的操作,舉個例子12&7,12的二進制為1100,7的二進制為111(也就是0111),我們就将每一位進行邏輯與的操作,得到了每個位上的結果0 1 0 0,就是二進制數100,而100轉為十進制為4,是以我們得到了12&7的結果為4
- |--按位或
有了之前計算按位與的操作,按位或就很好了解了,就是對每一位進行邏輯或的操作
同樣的還有按位異或,左移,右移,按位取反等等,你可以點選這裡擷取相應的計算,在這裡重複隻會顯得贅餘,等之後需要用到的時候你就知道作用了
在說完這些之後,我們就可以進入單片機的學習了,我們下個文章見
程式燒錄軟體