51单片机学习笔记(1)
1. 环境配置
要使用单片机,需要下载下面两个软件:
Keil5用来编写程序,然后生成单片机可以识别的二进制文件,其后缀为.hex;
STC-ISP则是用来下载程序:打开生成的程序文件,然后通过数据线将程序下载到单片机上。
2.单片机
1.单片机介绍
ROM:只读存储器(Read-Only Memory),相当于电脑的硬盘,存储的数据也不会丢失。
RAM:随机存取存储器(Random Access Memory),相当于电脑的内存条,与CPU直接交换数据,断电后数据就会消失。
2.单片机管脚
3. LED
LED是发光二极管。LED省电而且亮度高,应用很广泛。
LED原理图:
1. 点亮LED
要点亮LED,就需要给P2寄存器特定数字,但C语言程序不能直接识别二进制,所以需要写成十六进制(前面要加上0x)。
#include <at89c51RC2.h> void main() { P2=0xFE;//1111 1110 while (1)//如果不加上while循环,会导致不断地跑上面那行代码 { } }
2. LED闪烁
要让LED闪烁,需要让LED不断重复亮灭的操作。但是如果亮了之后立马熄灭会因为视觉暂留导致看起来是一直亮。所以需要在每次操作执行完后加入一个延时操作。
#include <at89c51RC2.h> #include <INTRINS.H> //包含_nop_()函数的头文件 void Delay500ms() //@11.0592MHz { unsigned char i, j, k; _nop_(); i = 4; j = 129; k = 119; do { do { while (--k); } while (--j); } while (--i); } void main() { while (1) { P2=0xFE; //亮灯 Delay500ms(); P2=0xFF; //全灭 Delay500ms(); } }
3. LED流水灯
流水灯的操作通过让LED逐个亮起,同时每次操作后进行延时来实现。
为了能方便控制流水灯变化的速度,可以改变一毫秒延时函数:
void Delay1ms(unsigned int xms) //定义参数为我们需要的时间xms { unsigned char i, j; while(xms--){ //将一毫秒延时函数套入循环,循环次数为xms的大小 _nop_(); //这样就实现了xms的延时 i = 2; j = 199; do { while (--j); } while (--i); } }
流水灯的具体代码如下:
#include <at89c51RC2.h> #include <intrins.h> void Delay1ms(unsigned int xms) //@11.