天天看點

單片機快速入門51單片機

原創

快速入門51單片機

2018-05-09 09:08:55 shenlong1356 閱讀數 2681 文章标簽: 51單片機 更多 分類專欄: stm32 版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協定,轉載請附上原文出處連結和本聲明。 本文連結: https://blog.csdn.net/shenlong1356/article/details/80248635

有些學生覺得單片機很難學其實掌握入門方法也不難

開發環境搭建,不用多說,看網上教程

拿到51單片機該如何做?

首先打開看51單片機的管腳分布,51單片機是8個引腳一組,為什麼是8個一組呢?

因為它是8位單片機,正好一個位元組8位可以控制它

51單片機有4組(P1,P2,P3,P4)通用管腳,是以51單片機有4*8=32個通用管腳

管腳有那麼可怕嗎?

其實通用管腳不就類似于開關,初學者先當開關用

點燈也不難

看下原理圖,看開發闆上的LED接到了哪個管腳,也就類似于接到了哪個開關

例如LED接到了P1.0腳

怎麼點亮呢?

家裡面點燈不就是把開關打上嗎?

單片機也一樣啊,給相應管腳輸出高(1),或者(0)不就相當于把開關打上了嗎

隻是這裡的開關打上是相對而言的,看自己的原理圖上的LED燈是怎麼接線的

如果LED燈一段接了正(VCC),那麼另一端(管腳)輸出(0)低電平,這樣一高一低不就導通了嗎

反之,管腳輸出(1)導通

程式怎麼寫

如果按純粹的c語言來寫

#include "stdio.h"
void main()    //void沒有傳回值  是以不用return
{
    int LED;
	 LED=0;   //假設(低電平)導通
}
           
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

以上程式看似正确,大家有沒有想過LED代表什麼?

有的人可能會不假思索的說,不就是開關嘛,(管腳)

的确沒錯,但是LED在這裡隻是一個普通變量哦

問題:怎麼辦呢?

答案 :這就是單片機c語言和普通c語言的不同,sbit 位定義##

單片機c語言多了一個位定義:sbit LED=P1^0

這樣LED不再是普通變量了,它就可以代表一個管腳

問題:P1^0哪裡來的?

答案:P1^0來自一個頭檔案 reg51.h或者reg52.h(差別不大)

這樣就出來了一個完整的LED單片機程式

#include "stdio.h"
#include "reg52.h"
sbit  LED=p1^0;
void main()    //void沒有傳回值  是以不用return
{
    LED=0;   //假設(低電平)導通
    while(1);
}
           
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

問題:為什麼要加while(1)?

答案:因為,我們是要燈一直點亮,是以要死循環,

有的會說:我不加死循環也是一直亮啊

答案:那是你的程式又再次重新開機了一遍,為了讓程式一直執行就加上死循環

問題:如果我要點亮多個LED燈,一個一個定義那不要累死嗎

答案:不會累死的,因為剛開始是一位一位操作,我們還可以用一個位元組直接控制一組LED(8)個燈

因為單片機不是8位的嗎,是以直接給LED=00000000; 這樣就可以控制8個燈了,沒有8個燈也沒關系,隻要找到對應的管腳(對應的位輸出(0或者1))
#include "stdio.h"
#include "reg52.h"
#define LED p1 //這裡不再是位定義  P1包含在了reg52.h裡面,其實P1就是一個位址而已,以後對位址有概念了再去深究
void main()    //void沒有傳回值  是以不用return
{
    LED=00000000;   //假設(低電平)導通 如果8位二進制麻煩,可以把它轉換成十六進制
    while(1);
}
           
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

如果要燈流動(花樣流水)怎麼辦

答案:其實不就是把相應的燈打開關閉而已嘛

為了流水友善,程式好寫一點,可以看看(邏輯運算)(例如:移位,按位與(或)) 等知識##

最後建議:

1、先拿着例程燒錄的開發闆上去,建立自信

2、看接線原理圖分析例程,不懂可以看 視訊教程,

2、建議可以買一本郭天祥的51單片機書籍看看(視訊别看,不咋地)

3、看懂之後修改例程,按位元組了解的思路寫程式,搞點與例程不同的

4、學了一段時期(兩三周)後,制定小目标:做個小作品(交通路燈)啥的

5、多問個究竟(為什麼是這樣的),網上找原因,比如(csdn,電子發燒友,51黑電子什麼的)

5、學會做筆記(寫部落格),把自己了解的寫上去,便于以後檢視

</div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-526ced5128.css" target="_blank" rel="external nofollow"  rel="stylesheet">
                </div>
</article>
<div class="postTime"> 
    <div class="article-bar-bottom">
        <span class="time">
            文章最後釋出于: 2018-05-09 09:08:55            </span>
    </div>
</div>
           

有些學生覺得單片機很難學其實掌握入門方法也不難

開發環境搭建,不用多說,看網上教程

拿到51單片機該如何做?

首先打開看51單片機的管腳分布,51單片機是8個引腳一組,為什麼是8個一組呢?

因為它是8位單片機,正好一個位元組8位可以控制它

51單片機有4組(P1,P2,P3,P4)通用管腳,是以51單片機有4*8=32個通用管腳

管腳有那麼可怕嗎?

其實通用管腳不就類似于開關,初學者先當開關用

點燈也不難

看下原理圖,看開發闆上的LED接到了哪個管腳,也就類似于接到了哪個開關

例如LED接到了P1.0腳

怎麼點亮呢?

家裡面點燈不就是把開關打上嗎?

單片機也一樣啊,給相應管腳輸出高(1),或者(0)不就相當于把開關打上了嗎

隻是這裡的開關打上是相對而言的,看自己的原理圖上的LED燈是怎麼接線的

如果LED燈一段接了正(VCC),那麼另一端(管腳)輸出(0)低電平,這樣一高一低不就導通了嗎

反之,管腳輸出(1)導通

程式怎麼寫

如果按純粹的c語言來寫

#include "stdio.h"
void main()    //void沒有傳回值  是以不用return
{
    int LED;
	 LED=0;   //假設(低電平)導通
}
           
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

以上程式看似正确,大家有沒有想過LED代表什麼?

有的人可能會不假思索的說,不就是開關嘛,(管腳)

的确沒錯,但是LED在這裡隻是一個普通變量哦

問題:怎麼辦呢?

答案 :這就是單片機c語言和普通c語言的不同,sbit 位定義##

單片機c語言多了一個位定義:sbit LED=P1^0

這樣LED不再是普通變量了,它就可以代表一個管腳

問題:P1^0哪裡來的?

答案:P1^0來自一個頭檔案 reg51.h或者reg52.h(差別不大)

這樣就出來了一個完整的LED單片機程式

#include "stdio.h"
#include "reg52.h"
sbit  LED=p1^0;
void main()    //void沒有傳回值  是以不用return
{
    LED=0;   //假設(低電平)導通
    while(1);
}
           
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

問題:為什麼要加while(1)?

答案:因為,我們是要燈一直點亮,是以要死循環,

有的會說:我不加死循環也是一直亮啊

答案:那是你的程式又再次重新開機了一遍,為了讓程式一直執行就加上死循環

問題:如果我要點亮多個LED燈,一個一個定義那不要累死嗎

答案:不會累死的,因為剛開始是一位一位操作,我們還可以用一個位元組直接控制一組LED(8)個燈

因為單片機不是8位的嗎,是以直接給LED=00000000; 這樣就可以控制8個燈了,沒有8個燈也沒關系,隻要找到對應的管腳(對應的位輸出(0或者1))
#include "stdio.h"
#include "reg52.h"
#define LED p1 //這裡不再是位定義  P1包含在了reg52.h裡面,其實P1就是一個位址而已,以後對位址有概念了再去深究
void main()    //void沒有傳回值  是以不用return
{
    LED=00000000;   //假設(低電平)導通 如果8位二進制麻煩,可以把它轉換成十六進制
    while(1);
}
           
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

如果要燈流動(花樣流水)怎麼辦

答案:其實不就是把相應的燈打開關閉而已嘛

為了流水友善,程式好寫一點,可以看看(邏輯運算)(例如:移位,按位與(或)) 等知識##

最後建議:

1、先拿着例程燒錄的開發闆上去,建立自信

2、看接線原理圖分析例程,不懂可以看 視訊教程,

2、建議可以買一本郭天祥的51單片機書籍看看(視訊别看,不咋地)

3、看懂之後修改例程,按位元組了解的思路寫程式,搞點與例程不同的

4、學了一段時期(兩三周)後,制定小目标:做個小作品(交通路燈)啥的

5、多問個究竟(為什麼是這樣的),網上找原因,比如(csdn,電子發燒友,51黑電子什麼的)

5、學會做筆記(寫部落格),把自己了解的寫上去,便于以後檢視

</div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-526ced5128.css" target="_blank" rel="external nofollow"  rel="stylesheet">
                </div>
</article>
<div class="postTime"> 
    <div class="article-bar-bottom">
        <span class="time">
            文章最後釋出于: 2018-05-09 09:08:55            </span>
    </div>
</div>
           

繼續閱讀