如何学习单片机——单片机学习的感悟——以简单的外设蜂鸣器为例介绍单片机学习方法

   本文主要介绍如何学习单片机,分享一下我学单片机的一些感悟,以常见简单的外设蜂鸣器为例介绍单片机学习方法。

    大家有没有遇到这种情况,单片机学着学着就迷茫了,或者说学过的东西,过段时间就忘了,学着学着就没兴趣了,没劲了,大家学单片机一开始买的应该是开发板,也就是学习板,上面附带了一些外设,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口,通信协议,没有必要把所有的外设学个遍,可以挑能用到的,常用的去学,学呢要学工作原理,明白的他是怎么工作的,就可以尝试着去用程序实现,虽然不同的单片机实现的方法可能不同,但是要干的事是一样的,比如上面例子中都是让蜂鸣器对应的管脚不断进行高低电平切换。

    学单片机要培养看原理图和参考手册的能力,对于库函数不一定要会写,但是呢,要会用,举一反三的用。

    建议大家在学了一段时间学习板后,自己尝试着去买一个单片机最小系统,买几个传感器,自己做点小东西,这样会增加你学习的兴趣和成就感,学了就要用,这样才能记得牢,不易忘,学和用相辅相成。

    附几个之前在大一大二做过部分小东西图片:

    (这是一个明火报警装置,利用火焰传感器,继电器,蜂鸣器,单片机组成,遇到明火,蜂鸣器发出报警声)在这里插入图片描述
    (下面是做过的几个小车,最后一幅是学校实验室买的整套零件,几个同学和我一起拼起来的)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

    每个人的学习习惯都是不同的,本文得内容仅供参考。

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