[原创] 凔海笔记之单片机(二):初识单片机

凔海   2016-3-3 15:20 楼主
      何为单片机?网上有云:“单片机是在一片硅片上集成了CPU、存储器(RAM、ROM、EPROM)和各种I/O接口(定时器、计数器、并行I/O口等)具有一台计算机功能的设备,又称单板机、单片微型计算机、微控制器、嵌入式控制器”。我觉得这句话说得很好,不过在这里我更想说
1-130FR356442Z.jpg
不懂/(ㄒoㄒ)/~~
       所以,先说一下单片机并记住一句话,单片机的引脚可以接收或发出高低电平。人家的原则貌似是“不求规模大,力求小而全”。n(*≧▽≦*)n
   QQ截图20160303150017.png
      左图是51单片机实物图,右图是引脚图,引脚什么鬼?引脚,又叫管脚,英文叫Pin。就是从集成电路(芯片)内部电路引出与外围电路的接线。即左图白色的短小矩形,我们先要用意念控制住自己,不要想这黑块内部是什么,只需要知道这些引脚可以接收或发出高低电平,接收的电平或可影响着输出,输出的也可左右着输入,如要里二者的相互影响的奥秘,就是知道这个黑块的原理。对于刚接触单片机的在下来说,还是简单的认识一下能看得见的东西吧。
      引脚。20接负极,40接正极,这家伙是供电, 5V电压最好。P1、P2口共16个,它们是一样的,都是输出或接收所谓的高低电平。P3脚比较勤劳,不仅有与P1、P2相同的功能,而且还兼职,也就是第二功能,这个先不说。P0口则有些先天不足,需要给它提供驱动力,才能与P1口一样,这个驱动力叫做上拉电阻。当然,这样的设计,是有人家的目的的,具体为什么,也先不说了吧。我们现在主要用的就是这些P口。
      学习C语言Java什么的,第一件事是说“hello world”,那么,学习单片机首先要亮一个灯,我们初中就知道怎么亮了,拿一两块电池,把灯的一头接在负极,一头接在正极,他就亮了。就像这样
QQ截图20160303150033.png
      现在我们要用单片机来点亮一个灯,先说这个灯,我们管它叫led,即是发光二极管(我记得当初并不知道led就是发光二极管(⊙﹏⊙))。
      二极管想必都知道,具有单项导通性,如下图
QQ截图20160303150044.png
A接正极,B接负极,它是导通的,如果反过来就不管用了,当然,你可以暴力的击穿它,让它与世长辞。那么发光二极管呢?顾名思义,当A接正极,B接负极时,导通灯亮,反之不会亮。而在这里,我们又有了新的词汇来形容正极和负极。这就是高电平和低电平。物理解释中,正极指电源中电位(电势)较高的一端,负极与之相对。高电平对应正极,负极与低电平相对应。我们说的“水平”,词典中解释与水平面平行、或在某方面达到一定高度,引申指事物在同等条件下的比较结论。
QQ截图20160303150103.png
      看这幅图,水从高的地势下泄,水从高水平面向低水平面溜达。现在再想想高电平和低电平也就了然了,电荷从高电平溜达到低电平,就是从正极流窜到负极。就是这个道理。在数字系统中,我们用1来表示表示高电平,用0来表示低电平,为什么呢?用0表示高电平当然也可以,不过,0比1大有没有觉得很别扭,接下来就说说发光二极管,看下图
QQ截图20160303150110.png
      A高电平,B低电平就亮了。那么这和单片机有什么关系呢?还记得开头怎么说没?单片机的引脚可以接收或发出高低电平。所以,当把A接的高电平用单片机来提供,B接到负极,灯就亮了,若将A外接高电平,B接单片机发出的低电平,灯也亮了。其实这俩种接法又称共阳、共阴,这以后再谈。那么如何让单片机发出高低电平呢?这就需要软件来实现。我用的是在keil3,软件如何应用,就不赘述了~( ̄0 ̄)/。
我觉得不得不说一句,任何不看电路图所写的程序都是瞎扯淡,所以这里假设led连接在P1.1角上。
#include
要想知道这个头文件干什么很简单,选中头文件,右键,选中open  document #include就可以看到一些内容。
QQ截图20160303150121.png
      document 是文件的意思。include是包含,reg52.h是针对51/52单片机定义的头文件,主要包括寄存器定义。所以也就大概理解了这个头文件的意思了。SFR = special funtion register //特殊功能寄存器。举例来说,如果你写P0=0x01烧写软件会给0x80这个地址赋0x01,就是这样,打起来了C语言与单片机的桥梁。如果学了汇编,相信会对这些内容很熟悉的。如果不太清楚我想也不必要纠结,写程序的时候写上这些也就可以了,以后会懂得。要知道,程序的本质是寄存器之间的数据传递。
#include
sbit led = P1^1;// 定义特殊功能寄存器的位变量。在函数中不允许对P0~P3                    //口进行为位操作的,故使用前要先进行位定义。
main()
{
        while(1)
        {
                led=1;     
        }
}
        QQ截图20160303150233.png
     那为什么写while(1)嘞?main是主程序, while(1)是无线循环的意思。学过C语言的知道,让led=1;一直保持下去。为什么非要加while(1)来保持下去呢?引脚输出1他不就亮了么?确实是这样,可是我们先要清楚一点,单片机是顺序执行,led=1;不是它的最后一句,如果不加while(1),led=1确实是最后一句啊,是的,对于C语言是这样,但汇编不是这样,对于单片机。并不是传递了led=1就停止工作了,这需要我们探索内部结构才能知晓,现在知道这样一个概念吧。再补充一句,忘了加限流电阻了 。
一节流水犹未尽,下节接着说废话,学识浅薄出拙文,如察错误望赐教,小弟在此感涕零。
5861e1c3e839c2b0d1ca2.jpg


回复评论 (15)

太可爱了~~谢谢楼主给我们分享经验~~
玩板看这里: https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
点赞  2016-3-3 15:33
文非常棒!
玩板看这里: https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
点赞  2016-3-3 15:33
好形象啊
点赞  2016-3-3 15:36
写的真好!等更!谢谢楼主!
我是初学者,本来觉得单片机好难学的,看了之后重燃兴趣!
点赞  2016-3-3 18:56
不一样的单片机支持楼主的分享,学习学习了!!!
期待更精彩的
点赞  2016-3-3 18:59
熙熙攘攘的世界,我们不懈前行......
点赞  2016-3-4 14:48
引用: okhxyyo 发表于 2016-3-3 15:33
文非常棒!

谢谢夸奖
点赞  2016-3-8 14:09
引用: 浅丘之上 发表于 2016-3-3 18:56
写的真好!等更!谢谢楼主!
我是初学者,本来觉得单片机好难学的,看了之后重燃兴趣!
{:1_102 ...

很荣幸呀,咱一起学习吧
点赞  2016-3-8 14:10
文章很生动,形象,初学者,看看这些东西,更容易产生学习的兴趣。不错啊。
点赞  2016-3-10 00:22
支持楼主的分享,学习学习了!!!
点赞  2016-3-10 07:43
引用: ienglgge 发表于 2016-3-10 00:22
文章很生动,形象,初学者,看看这些东西,更容易产生学习的兴趣。不错啊。

谢谢鼓励,我继续
点赞  2016-3-10 18:22
引用: power3 发表于 2016-3-10 07:43
支持楼主的分享,学习学习了!!!

谢谢你的支持
点赞  2016-3-10 18:22


楼主高才,功德啊!!!
熙熙攘攘的世界,我们不懈前行......
点赞  2016-3-26 11:52
生动啊!牛逼
点赞  2016-4-12 20:01
写的不错
点赞  2017-7-1 18:06
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复