如何學習單片機——單片機學習的感悟——以簡單的外設蜂鳴器爲例介紹單片機學習方法

   本文主要介紹如何學習單片機,分享一下我學單片機的一些感悟,以常見簡單的外設蜂鳴器爲例介紹單片機學習方法。

    大家有沒有遇到這種情況,單片機學着學着就迷茫了,或者說學過的東西,過段時間就忘了,學着學着就沒興趣了,沒勁了,大家學單片機一開始買的應該是開發板,也就是學習板,上面附帶了一些外設,51系列單片機還好,外設不是很多,32系列呢,外設會多一點,買單片機一般會送教學視頻,那麼我是否需要從頭到尾,去全部學一遍呢?

    這些問題吧我也遇到過,我也迷茫過,記得我是大一的寒假自己按照例程學的51單片機,剛開始學的時候,很興奮,很感興趣,當成功點亮第一個LED時,還有一定的成就感,就自主嘗試着寫了LED流水燈,看了半天很滿意。慢慢的學到串口通信、IIC通信、溫度傳感器、紅外通信等的時候就感覺有點枯燥,但是當時還是強迫自己耐心的學完了,後來呢在大二假期的時候,又開始自學32單片機,有段時間越學越煩,過段時間對前面學的也沒什麼印象了,感覺很難受,接下來就,就我近期對學單片機以來的感悟反思,和學習方法跟大家交流一下。

     附:當時我學習時用過了兩個學習版圖片,都是普中科技的,上面的是51系列的,下面的是32系列的

在這裏插入圖片描述
在這裏插入圖片描述

  正文:

   學單片機首先要明白了一個問題,學單片機學的是什麼?學的是各種外設或者I/0口 通信協議。這一部分是相通的各種,單片機大同小異,還有的就是學習使用你所用呢個單片機的庫函數(當然51單片機是直接訪問寄存器的,沒有此部分)

   我們在學習單片機的時候,不要光機械的去看視頻 ,照着寫程序,學了也很容易忘,而且單片機五花八門的,學也學不完,再說了就算是同一個類型的單片機,不是一個公司出的,程序也不一樣, 不管是學習單片機上的外設,還是學通信協議, 比如常用的外設:LED、蜂鳴器、數碼管、按鍵等等(當然這是比較簡單的幾個) 不管是什麼樣的單片機,外設的原理基本上是一樣的, 我們要學的應該是外設或者通信的工作原理,原理明白了,給你一個新的單片機,再使用這個外設的時候,無非就是利用程序去控制這個外設工作。

   比如說我想讓蜂鳴器發出聲音,一般來說單片機上的蜂鳴器是無源蜂鳴器,原理是啥,我需要學到什麼程度?

   先看一個詳細的解釋:

   壓電式蜂鳴器主要由多諧振盪器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。多諧振盪器由晶體管或集成電路構成,當接通電源後(1.5~15V直流工作電壓),多諧振盪器起振,輸出1.5~2.5kHZ的音頻信號,阻抗匹配器推動壓電蜂鳴片發聲。無源蜂鳴器利用電磁感應現象,爲音圈接入交變電流後形成的電磁鐵與永磁鐵相吸或相斥而推動振膜發聲,接入直流電只能持續推動振膜而無法產生聲音,只能在接通或斷開時產生聲音。無源蜂鳴器的工作原理與揚聲器相同。在使用方波信號源驅動的應反向並聯一個二極管,防止突然斷電時產生的高壓反向電動勢擊穿其他元件以及使用壽命縮短。

在這裏插入圖片描述

   那我們在學的時候需不需要把上面這一大段話都理解呢? 在我看來對於絕大部分人完全不需要,你只要知道(一般的無源蜂鳴器有PWM控制,I/O口控制,由於I/O口控制較簡單本文以I/O口控制爲例)給無源蜂鳴器一個持續的脈衝他就能發出聲音 ,也就是蜂鳴器管腳(I/O口)不斷地進行高低電平的切換蜂鳴器就能發出聲音,高低電平切換頻率高音調就高知,聽起來就是高音,頻率低就是低音,聽起來就是低音。當然頻率要在1.5~2.5kHZ之間,對於大多數人知道這些就足夠了,不需要學的很細,就像這個這個無源蜂鳴器一樣,單片機外設的工作原理不管是哪一個單片機上都是一樣的。

   那麼對於不同的單片機,不一樣的是啥? 第一 蜂鳴器的管腳接在那個I/O口上 這就要求我們學會看單片機的原理圖(這是我們拿到一個新的單片機很重要的資料) 比如接在了P52口上 那麼下一步我只需要寫程序讓 P52口的不斷進行高低電平切換就行了,這就到了第二個不同,對於51來說 ,只需要 sbit beef=P5^2; while(1) { beef=~beef; delay();} 就可以了。詳細的代碼如下(對於只想瞭解如何學單片機的讀者,自行跳過):

#include "reg52.h"			 //此文件中定義了單片機的一些特殊功能寄存器
#include<intrins.h>
sbit beep=P5^2;	//具體連在那個管腳上,大家自行查看自己單片機的原理圖,本例假設接在P52口上
void delay(u16 i)    //簡單的延時函數
{
	while(i--);	
}
void main()
{	
	while(1)
	{	
		beep=~beep;
		delay(10); //通過修改此延時時間,也就修改了高低電平切換頻率,達到不同的發聲效果	
	}
}

   但是如果是32單片機呢? 32單片機不支持sbit操作 ,他會給你一個寫好了的庫函數,調用這個這個庫函數可以對某個寄存器或者i/o口進行置1或者置0操作 ,比如這個庫函數GPIO_ResetBits( , ) GPIO_SetBits( , ) 那麼我只要把P52口按照這個函數的格式傳給他,就能對P52進行置1,置0的操作,不斷地調用這兩個函數就能讓蜂鳴器發聲,這是利用庫函數實現的(由於不同的單片機,庫函數可能不同就不附詳細代碼了),32單片機呢還能利用位帶操作直接控制I/0口,如#define beep PBout(5) beep=!beep; 這種方法就跟51裏的sbit類似了 。詳細代碼如下(對於只想瞭解如何學單片機的讀者,自行跳過)

#define beep PBout(5)    //具體連在那個管腳上,大家自行查看自己單片機的原理圖上

int main()
{
	u16 i=0;
	SysTick_Init(72);  //系統時鐘初始化函數,由於不同的單片機,庫函數可能不同就不展開詳細代碼了
	BEEP_Init();     // 蜂鳴器初始化,由於不同的單片機,庫函數可能不同就不展開詳細代碼了
	while(1)
	{
		i++;
		if(i%10==0)
		{
			beep=!beep;
		}
		delay_us(10);  
	}
}

    總體來說不管是什麼單片機都是讓P52口(本文假設的管腳)不斷進行高低電平的切換,但是不同的單片機,他的實現方法可能不同,這就要求我們具備閱讀單片機的參考手冊的能力(或者要求低一點,人家給了參考代碼,能據一反三,可以按照自己的意願讓它工作)

    總結一下,學單片機就是學外設和I/0口,通信協議,沒有必要把所有的外設學個遍,可以挑能用到的,常用的去學,學呢要學工作原理,明白的他是怎麼工作的,就可以嘗試着去用程序實現,雖然不同的單片機實現的方法可能不同,但是要乾的事是一樣的,比如上面例子中都是讓蜂鳴器對應的管腳不斷進行高低電平切換。

    學單片機要培養看原理圖和參考手冊的能力,對於庫函數不一定要會寫,但是呢,要會用,舉一反三的用。

    建議大家在學了一段時間學習板後,自己嘗試着去買一個單片機最小系統,買幾個傳感器,自己做點小東西,這樣會增加你學習的興趣和成就感,學了就要用,這樣才能記得牢,不易忘,學和用相輔相成。

    附幾個之前在大一大二做過部分小東西圖片:

    (這是一個明火報警裝置,利用火焰傳感器,繼電器,蜂鳴器,單片機組成,遇到明火,蜂鳴器發出報警聲)在這裏插入圖片描述
    (下面是做過的幾個小車,最後一幅是學校實驗室買的整套零件,幾個同學和我一起拼起來的)

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

    每個人的學習習慣都是不同的,本文得內容僅供參考。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章