第一次接触51单片机,就直接按照附赠的学习手册自己学一学,做个笔记。
一、点亮LED
LED即发光二极管,具有单向导电性,通过一定电流时就能发光。单片机开发板上的LED采用共阳接法,即所有LED阳极管脚接电源VCC,阴极管脚通过470欧限流电阻接到P2口上。使LED发光的方法是让对应阴极管脚变成低电平,熄灭则为高电平。
用51单片机控制LED的方法就是让单片机设定管脚在P2口上输出低电平。
在main.c内先包含51单片机头文件,使用sbit关键字定义P2.0管脚叫做LED1,再让LED1=0,最后进入while死循环。
#include "reg52.h"sbit LED1=P2^0;void main(){ LED1=0; while(1);}
设定P2.0管脚为低电平即可让连接在P2.0的LED发光。
二、延时函数
如果要让LED闪烁则需要编写程序使其延时开启关闭,手册里给了一个延时函数。
void delay_10us(u16 ten_us) { while(ten_us--); }
用while循环强行拖时间,执行一次指令大约10微秒。参数类型u16是为了方便使用而重定义的,更方便判断数据范围。
typedef unsigned int u16; typedef unsigned char u8;
令ten_10us=50000可以延时大约450毫秒。使用延时函数可以让LED在肉眼辨识范围内变化。
三、Keil C51的移位库函数
开发板上有8个LED灯,分别对应8个比特,可以用一个8位字节来控制。流水灯则是8个比特不断变化,流水效果在字节的数据如下:
01111111→10111111→11011111→11101111→11110111→11111011→11111101→11111110
用移位操作和循环语句可以实现不断循环。
但是Keil C51软件有对应移位库函数,包含头文件intrins.h,左移函数是_crol_(),右移函数是_cror_()。函数有两个参数,分别是被移位的变量和移位个数。返回值是移位结果。C语言的移位操作会使最高位消失,最低位用0或1填充,但是移位库函数的功能相当于队列内循环移动,最高位会被移到最低位,所以移位库函数比C语言移位操作方便。