51单片机学习
准备工作
1.下载好51单片机所需要的软件:
下载KEIL:KEIL官网链接
下载stc-isp
2.创建51单片机工程(方便后续直接使用)
实验一:点亮第一个LED
LED的相关知识
1.LED是什么:
LED既发光二极管,是一种半导体固体发光器件。(有插片和贴片两种)
2.LED的工作原理:
LED的工作是有方向性的,只有当正极接到LED阳极,负极接到LED阴极的时候才能工作,如果反接LED是不能正常工作的。
LED的原理图解释
LED的阳极串联一个电阻,然后连接到电源VCC,而LED的阴极连接到单片机的P2口,如果想点亮一盏LED就对把单片机相对应的IO赋为低电平。
所需C语言知识点
sbit 变量名=地址值
(在给某个引脚取名的时候经常会用到)
sbit led=P2^0; //表示阴极连接P20口
在KEIL中编写程序
1.复制在准备工作中创建的51单片机工程
可以将文件名改为:实验一:点亮第一个LED
(这就是直接创建好51单片机工程的便利之处,不需要重复做繁琐的过程)
2.打开“实验一:点亮第一个LED”的文件夹
从文件夹中打开KEIL
3.在KEIL中编写程序
#include "reg52.h"
sbit led=P2^0;
void main()
{
while(1)
{
led=0;
}
}
编译成功后,便可将单片机连接电脑
通过stc-isp传输
1.将单片机连接电脑,并确保单片机是开的状态
2.选择正确的串口号
3.打开程序文件
选择.hex文件,并打开
4.下载/编程
此次可能需要再次将单片机关机开机才能下载成功
5.操作成功后既第一个LED亮起
实验二:LED闪烁
结合实验一中LED的相关知识与原理图
并掌握实验一中C语言知识点
所需C语言知识点
1.C语言常用的预处理命令:
#typedef使用
typedef unsigned char u8;//将unsigned char用u8代替,8是8位占1个字节,与前面char相符
typedef unsigned int u16;//也可以用8 16表示,记得后面要加分号
2.while()循环函数
while() //当括号中的值为真(非0)时,执行循环体语句
{
}
3.延时函数
占用CPU执行过程中的时间从而达到延时的效果
void delay(u16 i)
{
while(i--);
}
在KEIL中编写程序
1.复制在准备工作中创建的51单片机工程
可以将文件名改为:实验二:LED闪烁
(这就是直接创建好51单片机工程的便利之处,不需要重复做繁琐的过程)
2.打开“实验二:LED闪烁”的文件夹
从文件夹中打开KEIL
3.在KEIL中编写程序
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit led=P2^0;
void delay(u16 i);
void main()
{
while(1)
{
led=0;//低电平亮
delay(50000);//450ms
led=1;//高电平灭
delay(50000);//450ms
}
}
void delay(u16 i)
{
while(i--);
}
编译成功后,便可将单片机连接电脑
通过stc-isp传输
1.将单片机连接电脑,并确保单片机是开的状态
2.选择正确的串口号
3.打开程序文件
选择.hex文件,并打开
4.下载/编程
此次可能需要再次将单片机关机开机才能下载成功
5.操作成功后既LED开始闪烁
确定delay(50000)时间
将实验过程进行仿真
1.双击前面的数字设置断点
2.算出时间差
点击Debug的第一个或直接点击棒棒糖
通过左侧的sec可以看到时间
(将锤子中的24改为12HZ)
做差即可得到delay(50000);的时间
0.00039-0.450601=-0.450211
相当于450ms
实验三:LED流水灯
结合实验一中LED的相关知识与原理图
并掌握实验一中C语言知识点
所需C语言知识点
1.C语言常用的预处理命令
#define使用
#define A P0 //(后面不加分号)
2.2. 循环左移右移函数
_crol_(a,b);//循环左移函数,a是左移的值,b是左移的位数,包含在instrins.h库函数里面
_cror_(a,b);//循环右移函数,a是右移的值,b是右移的位数。包含在instrins.h库函数里面
在KEIL中编写程序
1.复制在准备工作中创建的51单片机工程
可以将文件名改为:实验三:LED流水灯
(这就是直接创建好51单片机工程的便利之处,不需要重复做繁琐的过程)
2.打开“实验三:LED流水灯”的文件夹
从文件夹中打开KEIL
3.在KEIL中编写程序
#include "reg52.h"
#include <intrins.h> //在使用_crol_和_cror_时都必须调用头文件
typedef unsigned u8;
typedef unsigned u16;
#define led P2
//sbit led=P2^0; //D1
void delay(u16 i)
{
while(i--);
}
void main()
{
u8 i=0;
led=0xfe; //1111 1110
delay(50000);
while(1)
{
for(i=0;i<7;i++)
{
led=_crol_(led,1); //0xfe 1111 1110 左移一位,0就会往左移移1位1111 1101 此时D2点亮
delay(50000);
}
//0111 1111
for(i=0;i<7;i++)
{
led=_cror_(led,1); //0xfe 1111 1110 左移一位,0就会往左移移1位1111 1101 此时D2点亮
delay(50000);
}
}
}
编译成功后,便可将单片机连接电脑
通过stc-isp传输
1.将单片机连接电脑,并确保单片机是开的状态
2.选择正确的串口号
3.打开程序文件
选择.hex文件,并打开
4.下载/编程
此次可能需要再次将单片机关机开机才能下载成功
5.LED流水灯就完成啦