单片机交流
直播中

往事只能回首

12年用户 553经验值
私信 关注
[问答]

如何入门51单片机?如何利用51单片机点亮第一个led小灯?

如何入门51单片机?如何利用51单片机点亮第一个led小灯?

回帖(1)

李淳鑫

2021-10-20 11:34:40
概述

如果我们对数字电路和模拟电路没有任何基础,但是我们还是很想学单片机怎么办?
密密麻麻的电路以及一些不知道什么的线和焊针,可能直接把你劝退。
本文是我的第一篇博客,以下是我对单片机的总结,我初学单片机的时候跟大家是一样的,什么都不懂,就会一点点C语言。我经过一个月的学习,把单片机(开发板)的硬件资源全部整了一遍,到现在差不多可以灵活运用上面的所有硬件资源了以及外接资源。
以下是我入门的经历,以及解决办法。
预备知识




  • 计算机只识别0和1
  • 1B=8bit;
  • 1bit 代表一个0或1
  • 会二进制十六进制转化

点亮第一个小灯


  我入门开发板为普中51 A2开发板
点亮第一个小灯,是我们有单片机之后的一个任务。
首先请保证你已经会C语言到循环语句之前了。
第一个可能让你产生不适的概念 :高电平、低电平。
这里高电平代表的是1,低电平代表的是0。
这里我们将高电平和低电平可以当作正负极。
这里看以下原理图:




通过这个图我们可以看到所有的LED灯的一边都接在了vcc上面,(这里vcc指高电平,也就是正极),而右边则是分别对应接在了P20、P21等上面了。
现在我们需要知道第一个概念:寄存器
其实P2就是一个8bit的寄存器,这里我们可以这样理解:




我们可以将P2寄存器看作一个可以存储8个bit的盒子,也就是说,从最低位到最高位分别是从P20到P27这八个可以存储0和1的小盒子组成了一个寄存器,这个寄存器的名字叫做P2.
我们可以通过C语言来控制每个小盒子让他变换0和1,注意0和1分别是低电平和高电平,也就是负极和正极。
比如我们让P20这个小盒子变成0也就是负极,这个 LED0就可以亮了,因为另一端都都连接着正极。
程序如下:
#include ***it LED0 = P2^0;        //此处***it就是单片机中用于定义一个寄存器中一个bit用的变量void main(){        LED0 = 0;        //这边我们让LED0也就是P20这个小盒子等于0,也就是负极} 这样一个小灯就成功点亮了。
我们也可以不定义LED0,直接用P2=0xfe,代表的也是P20=0,而其他盒子都是1.
流水灯实验

据说流水灯困扰了一些人很长时间。
教程中的流水灯是如何实现的。
有些书上还有一些入门视频引入了一个库函数:
intrins.h这个头文件中的_crol_(unsigned char c,unsigned char b)这个函数。
这个函数有两个参数,第一个参数是要循环移动的变量。第二个参数是移动几位
例子:
#include #include #define uint unsigned int#define uchar unsigned charvoid delayms(uint z){        uint i,j;        for(i=z;i>0;i--)                for(j=110;j>0;j--);//延时函数,大约为ms级}void main(){        uchar aa = 0xfe;        //这里指最低位的盒子为0,其他为1。        while(1)        {                P2 = aa;                delayms(500);   //延时500ms左右一次移位                aa = _crol_(aa,1);  //这里指让最低位为0的盒子往左循环移动一位        }} 左移的情况大概是这个样子:




(图画的有点丑不好意思)
总之就是这个循环的样子,让这8个盒子循环移动
这段代码中用到了一个延时函数,说一下延时函数的原理。
延时函数

其实上面用的延时函数就是拖单片机运行的时间,在51单片机中运行一条指令大概要用19微秒,

  就是说运行一个i++,或者P2=0xfe 耗时19微秒
可以记住上面用的延时函数,经过测试大概令z=1,用时1毫秒左右。
大概先了解这么多应该就可以明白单片机的大概原理了,其实就是通过对寄存器的控制,从而控制单片机上面的硬件资源(先写这么多!)
下一篇中断介绍
举报

更多回帖

发帖
×
20
完善资料,
赚取积分