知识关系
所属体系: 嵌入式与单片机 主题节点: 51单片机入门-点亮LED 推荐前置: 51单片机的学习笔记 原始来源:
source/_posts/51单片机入门-点亮LED.md从旧博客迁移;已按知识图谱结构重新归档。
初次接触51单片机,记录下第一个程序,LED跑马灯,源代码如下:
#include <reg52.h>//引入52系列单片机头文件
//位定义,sbit 标识符 = 地址值
sbit led1=P2^0;
sbit led2=P2^1;
sbit led3=P2^2;
sbit led4=P2^3;
sbit led5=P2^4;
sbit led6=P2^5;
sbit led7=P2^6;
sbit led8=P2^7;
//延迟函数,单位约10微秒,此处利用的是CPU处理的延时,并不准确
//11.0952MHz测得执行时间为0.000009771593,约为9.771593微秒
void delay(int us)
{
while(us--);//循环执行,递减
}
void main()
{
while(1)
{
led1=0;//设置低电平点亮LED,断点开始时间0.00042318
delay(10000);//1秒为1000毫秒1000000微秒,此处为0.1秒,断点结束时间0.09813911
led1=1;//设置高电平熄灭LED
delay(10000);
led2=0;
delay(10000);
led2=1;
delay(10000);
led3=0;
delay(10000);
led3=1;
delay(10000);
led4=0;
delay(10000);
led4=1;
delay(10000);
led5=0;
delay(10000);
led5=1;
delay(10000);
led6=0;
delay(10000);
led6=1;
delay(10000);
led7=0;
delay(10000);
led7=1;
delay(10000);
led8=0;
delay(10000);
led8=1;
delay(10000);
}
}改进版
#include <reg52.h>//引入52系列单片机头文件
#include <intrins.h>//引入intrins内置函数
//延迟函数,单位约10微秒,此处利用的是CPU处理的延时,并不准确
//11.0952MHz测得执行时间为0.000009771593,约为9.771593微秒
void delay(unsigned int us)
{
while(us--);//循环执行,递减
}
void main()
{
while(1)
{
int i;
P2 = 0xfe;//二进制11111110,对应LED P2^7到0
for(i=0;i<7;i++)
{
P2 = _crol_(P2,1);//使LED 从11111110左移一位11111101
delay(5000);//1秒为1000毫秒1000000微秒,此处为0.05秒,断点结束时间0.09813911
}
for(i=0;i<7;i++)
{
P2 = _cror_(P2,1);//使LED从上方代码执行后的01111111右移一位变为10111111
delay(5000);
}
}
}