点亮LED,LED闪烁
点亮LED
第一个内容是关于LED灯的,首先就是如何让他亮。那么我们先看一下这块实验版的LED模块的电路图:
(其实图上是有一点错误的,图中的二极管标号从上到下依次是D1 D2 D3….)
图中可以看出,当左端是低电位的时候,二极管导通,LED灯亮。在单片机中,0表示低电位,1表示高电位,所以我们只需要将端口参数置零,LED就会亮。
端口参数志玲,端口又是什么呢?我们还是看电路图。我们可以看到,这图里的8个二极管左侧有棕红色的标号P20 P21 P22……这些表示的是处理器的引脚,89C52一共有4组共32个引脚,我们编程控制的就是这些引脚。所以我们将端口置零就是将引脚参数设置为0。在程序中,我们一般这么写:
1 | #include<reg52.h> //51单片机的头文件 |
写好后,和C语言类似,我们得先调试,按F7或者点这个
调试没有错误以后,我们要将程序拷录进单片机,就要用到 ,具体步骤如下:
上次忘了写一个步骤,就是生成.hex文件,这个在keil里面是默认不生成的,但是拷录时必须是.hex格式的文件。生成步骤如下:
拷录好后,我们再打开单片机,就是这个程序。
LED闪烁
到此,我们已经解决了灯亮的问题,如何让灯会闪呢?
我们只需要加一个循环,让端口参数从1到0周期变换,就像下面:
1 | #include<reg52.h> |
跑马灯
只让一个灯闪那不够土,为了够土,我们要让他循环闪。那么最容易想到的就是依次给端口赋值,这样未免太麻烦,我们可以直接这么写
写法1
1 | #include<reg52.h> |
0x01是一个十六进制数,表示的是0000 0001,也就是端口P2的值依次为00000001。<< 左移一位后变成了0000 0010。
写法2
我们也可以换一种写法,将端口值变为11111110就是0xfe然后循环位变换,这里引进一个函数,_crol_(char,int),效果看程序和结果
1 | #include<reg52.h> |