01-点亮第一个led,led闪烁,led流水灯
01-点亮第一个led,led闪烁,led流水灯
前言
最近跟着江协科技的教程([2-1] 点亮一个LED_哔哩哔哩_bilibili)学习51单片机,以此记录。实验的单片机集成板如下:
软件:Keil-v5, stc-isp-v6.92F
一、点亮一个led灯
其中有两点需要注意:
-
江协科技上的开发版最右边一个led是
D1
,而我使用的最右边的led是D8
。所以如果要点亮最右边一个led
,需要修改P2
的值为0x7E
-
使用
stc-isp
烧录程序的时候,芯片型号需要选择STC89C52RC/LE52RC
,而不是STC89C52
。否则会烧录不进去
#include <REGX52.H>
void main()
{
P2 = 0x7E;
while(1);
}
二、led闪烁
闪烁需要用到延迟,其中延迟函数可以使用stc-isp
中生成,怎么计算生成的后续可以再研究,暂时先不理(实在是目前对电路还知之甚少)
#include <REGX52.H>
#include <INTRINS.H> // _nop_() head
void Delay1000ms(void) //@12.000MHz
{
unsigned char data i, j, k;
_nop_();
i = 8;
j = 154;
k = 122;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2 = 0x7F;
Delay1000ms();
P2 = 0xFF;
Delay1000ms();
}
}
三、led流水灯
由于led
的D1~D8
与江协科技使用开发版的排列相反,所以如果需要流水灯从右向左的话,代码也要反着来
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms(void) //@12.000MHz
{
unsigned char data i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2 = 0x7F;
Delay500ms();
P2 = 0xBF;
Delay500ms();
P2 = 0xDF;
Delay500ms();
P2 = 0xEF;
Delay500ms();
P2 = 0xF7;
Delay500ms();
P2 = 0xFB;
Delay500ms();
P2 = 0xFD;
Delay500ms();
P2 = 0xFE;
Delay500ms();
}
}