2-点亮LED灯
1.前导
添加STC芯片库
因为keil5中没有对应STC89C52RC芯片的型号,在网上搜了一下发现,可以用stc-isp那个软件来添加STC芯片库
1.点击添加型号和头文件到Keil中
2.选择安装了keil5的目录
这样就添加完成了
3.此时,重启keil5,再创建项目时就有STC芯片库了
创建项目步骤:
1.点击project,创建新项目
2.选择合适的文件位置以及文件名进行保存
3.选择对应的单片机型号即可(OK后面弹出来的那个窗口可以点否)
4.右键点击Source Group 1,选择Add new item这个选项
5.选择C语言文件,命名为main
6.可以修改字体和大小(当然可以直接用ctrl+鼠标滚轮)
2.LED介绍
-
中文名:发光二极管
-
外文名:Light Emitting Diode
-
简称:LED
-
用途:照明、广告灯、指引灯、屏幕
如何区分正负极:
长脚为正,短脚为负;内电极较小为正极,较大为负极
3.开发板LED介绍
电阻标号含义:102=10×10^2=1000Ω 1001=100×10^1=1000Ω
串联电阻用来限流,因为直接接电源会烧毁LED二极管;若左边p20也为高电平,则LED不亮;若左边为低电平,则LED亮
点亮LED原理:
4.点亮LED
视频中是用二进制最后一位来控制最右边那个LED灯的亮和灭,而新买的板子是STC89C52RC,需要用二进制的最前面一位来控制最右边的LED灯的亮面,就是二进制的最左边那位控制的是LED最右边的灯
#include <STC89C5xRC.H>//通过右键点击插入头文件
void main()
{
P2=0X7F; //0111 1111,C语言中要用16进制来表示2进制
//P2指的是一个寄存器,在头文件中有描述,头文件通过在第一行点击右键进行插入
//P2=0X55; //0101 0101,让个灯一个亮一个灭
while(1) //通过死循环来使程序终止
{
}
}
这里要记得生成hex文件
然后打开stc-isp软件执行该程序
1.选择对应板子
2.要选择那个USB的串口,如果没有的话可能是win10,win11没有驱动的原因,去网上找一下stc-isp的usb驱动下载即可
3.打开之前在keil5中生成的hex文件
4.点击下载编程,然后再重启板子,就可以点亮LED灯了
5.LED闪烁
可以新建一个工程来进行实验
思路就是让LED灯先亮然后再熄灭,因为单片机执行速度很快,所以只执行这两条语句我们肉眼就无法观察到,所以要给它设置延时程序,我们可以用STC-ISP软件来帮我们生成这个程序
然后复制粘贴到程序中就可以
#include <STC89C5xRC.H>
#include <INTRINS.H>
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();//nop函数在#include <INTRINS.H>这个头文件中,我们自己也可以打开这个文件去看里面的函数
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2=0X55;//LED亮
Delay500ms();
P2=0XFF;//LED灭
Delay500ms();
}
}
6.LED流水灯
#include <STC89C5xRC.H>
#include <intrins.h>
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=0X7F; //0111 1111
Delay500ms();
P2=0XBF; //1011 1111
Delay500ms();
P2=0XDF; //1101 1111
Delay500ms();
P2=0XEF; //1110 1111
Delay500ms();
P2=0XF7; //1111 0111
Delay500ms();
P2=0XFB; //1111 1011
Delay500ms();
P2=0XFD; //1111 1101
Delay500ms();
P2=0XFE; //1111 1110
Delay500ms();
}
}
自己设置间隔时间:首先用STC生成一个1ms的延时程序,然后再传入参数,用while循环来把1ms的内容循环多次,就可以达到延时xms的效果
#include <STC89C5xRC.H>
#include <intrins.h>
void Delay1ms(unsigned x) //@11.0592MHz
{
while(x)
{
unsigned char i, j;
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
x--;
}
}
void main()
{
while(1)
{
P2=0X7F; //0111 1111
Delay1ms(1000);
P2=0XBF; //1011 1111
Delay1ms(1000);
P2=0XDF; //1101 1111
Delay1ms(1000);
P2=0XEF; //1110 1111
Delay1ms(200);
P2=0XF7; //1111 0111
Delay1ms(200);
P2=0XFB; //1111 1011
Delay1ms(200);
P2=0XFD; //1111 1101
Delay1ms(200);
P2=0XFE; //1111 1110
Delay1ms(200);
}
}