51单片机-LED篇
目录
- 准备工作
- 点亮一个LED灯
- 写程序
- 烧录
- LED闪烁
- 延时代码Delay500ms
- 烧录
- LED流水灯
- 代码
- 对LED流水灯代码进行优化,增加复用性
- 延时代码
- 代码
准备工作
使用到的单片机是普中51单片机
使用到的软件是Keil uVision5和stc-isp
点亮一个LED灯
写程序
首先通过Keil uVision5创建一个项目
这里我使用的是STC89C52RC的MCU,由于软件是国外的,不同步国内芯片,这里使用AT89C52效果一样
这里点击否
创建文件
选择.c文件,文件名为main
鼠标右键单击,添加<REGX52.H>头文件
LED模块的原理图
这里寄存器是8位,LED模块也是8个线路,通过寄存器0/1代表高低电平,即1代表高电平(5V),0代表低电平0伏
写代码
void main(){
P2 = 0xFE; //1111 1110 这里右端接入的是电源正极所以电平为5v,为高电平,左端给0,才能产生电势差
//1111 1110 - FE
}
点击这个
选择这个
烧录
程序写好,接下来准备烧录到板子上
打开软件选择STC89C52RC
串口号,选择自己对应的
找到对应路径下,Objects文件下有Project.hex文件打开
下载程序
重启单片机
烧录成功的话这里会显示
为点亮的LED灯
LED闪烁
创建新的项目即文件,步骤同上
要使LED闪烁,要将电平再高低电平之间转化
延时代码Delay500ms
复制代码直接使用即可
代码如下
#include <REGX52.H>
#include <INTRINS.H> //此头文件是使用函数_nop_
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1){
P2 = 0XFE;//FE - 1111 1110
Delay500ms();
P2 = 0XFF;//FF - 1111 1111
Delay500ms();
}
}
烧录
这里单片机会产生对应效果,即一个LED灯闪烁,照片无法展现就不放了
LED流水灯
创建新项目,步骤同上
若不是用延时,MCU执行速度快,肉眼分辨不出是否实现流水灯效果
代码
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main(){
while(1)
{
P2 = 0XFE;//1111 1110
Delay500ms();
P2 = 0XFD;//1111 1101
Delay500ms();
P2 = 0XFB;//1111 1011
Delay500ms();
P2 = 0XF7;//1111 0111
Delay500ms();
P2 = 0XEF;//1110 1111
Delay500ms();
P2 = 0XDF;//1101 1111
Delay500ms();
P2 = 0XBF;//1011 1111
Delay500ms();
P2 = 0X7F;//0111 1111
Delay500ms();
}
}
对LED流水灯代码进行优化,增加复用性
创建新项目
延时代码
代码
#include <REGX52.H>
void Delay1ms(unsigned int xms) //这里传入参数,即想延时时间单位为毫秒
{
unsigned char i, j;
while(xms){ //通过while循环,执行xms次延时1毫秒代码实现
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main(){
while(1){
P2 = 0XFE;//1111 1110
Delay1ms(500);
P2 = 0XFD;//1111 1101
Delay1ms(500);
P2 = 0XFB;//1111 1011
Delay1ms(500);
P2 = 0XF7;//1111 0111
Delay1ms(500);
P2 = 0XEF;//1110 1111
Delay1ms(500);
P2 = 0XDF;//1101 1111
Delay1ms(500);
P2 = 0XBF;//1011 1111
Delay1ms(500);
P2 = 0X7F;//0111 1111
Delay1ms(500);
}
}
烧录后即可实现LED流水灯效果