知识关系

所属体系: 嵌入式与单片机 主题节点: 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);
  }
 }
}