前言
1.51单片机简介
51单片机是80年代Intel开发的8051单片机内核的统称,凡是与8051内核一样的单片机都称为51系列单片机。 所谓内核,其实就是单片机的指令系统。 
命名规则:

单片机内部


单片机管脚图
 引脚0~40,从缺口左边开始,逆时针转一圈
开发板实物图

2.点亮第一个LED
建工程
  选择是与否都可以,这里我们选择否,因为不需要修改,所以也就不要添加进去了。
LED介绍

排阻的查看方法:
102 = 10 00 = 1K 473 = 47 000 = 47K
点亮原理
  找到单片机原理图,找到LED对应的管脚,发现此处的LED是共阳极接法,因此只要给LED对应管脚置0即可。
void main()
{
P2 = 0xFE;
P2 = 0xFD;
P2 = 0xFB;
P2 = 0xF0;
P2 = 0x55;
while (1)
{
}
}

  如果用Keil4/5开发的话,需要在这里勾选生成hex文件。
将生成的hex文件烧录进开发板。
鉴于Keil5的代码风格实在是难受,我换成了vscode开发单片机。  由于单片机执行完一次main函数,会从头开始重新执行main函数。因此我们需要给单片机动态停机,也就是加个while(1)死循环。
3.LED闪烁
利用软件延时自动生成相应的延时函数,注意要选好符合当前单片机的指令集。 
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms()
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k)
;
} while (--j);
} while (--i);
}
void test2()
{
while (1)
{
P2 = 0xFE;
Delay500ms();
P2 = 0xFF;
Delay500ms();
}
}
void main()
{
test2();
}
🐱🐱🐱
4.LED流水灯
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms()
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k)
;
} while (--j);
} while (--i);
}
void test3()
{
P2 = 0xFE;
while(1)
{
P2 = _crol_(P2, 1);
Delay500ms();
}
}
void main()
{
test3();
}

5.延时xms
#include <REGX52.H>
#include <INTRINS.H>
void Delay1ms(unsigned int xms)
{
unsigned char i, j;
while (xms)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j)
;
} while (--i);
--xms;
}
}
void test3()
{
P2 = 0xFE;
while(1)
{
P2 = _crol_(P2, 1);
Delay1ms(500);
}
}
void main()
{
test3();
}
尾声
🌹🌹🌹
写文不易,如果有帮助烦请点个赞~ 👍👍👍
Thanks?(・ω・)ノ🌹🌹🌹
😘😘😘
👀👀由于笔者水平有限,在今后的博文中难免会出现错误之处,本人非常希望您如果发现错误,恳请留言批评斧正,希望和大家一起学习,一起进步ヽ( ̄ω ̄( ̄ω ̄〃)ゝ,期待您的留言评论。 附GitHub仓库链接
|