【学习笔记】单片机的40个经典实验之7:广告灯的左移右移

  一、 实验任务

  做单一灯的左移右移,硬件电路如图 4.4.1 所示,八个发光二极管 L1-L8分别接在单片机的 P1.0-P1.7 接口上,输出“0”时,发光二极管亮,开始时 P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0 亮,重复循环。

  二、 电路原理图

  三、 系统板上硬件连线

  把“单片机系统”区域中的 P1.0-P1.7 用 8 芯排线连接到“八路发光二极管指示模块”区域中的 L1-L8 端口上,要求:P1.0 对应着 L1,P1.1 对应着 L2,……,P1.7 对应着 L8。

  四、 程序设计内容

  我们可以运用输出端口指令 MOV P1,A 或 MOV P1,#DATA,只要给累加器值或常数值,然后执行上述的指令,即可达到输出控制的动作。每次送出的数据是不同,具体的数据如下表 1 所示 :

  五、 程序框图

  六、 汇编源程序

  ORG 0

  START: MOV R2,#8

  MOV A,#0FEH

  SETB C

  LOOP: MOV P1,A

  LCALL DELAY

  RLC A

  DJNZ R2,LOOP

  MOV R2,#8

  LOOP1: MOV P1,A

  LCALL DELAY

  RRC A

  DJNZ R2,LOOP1

  LJMP START

  DELAY: MOV R5,#20 ;

  D1: MOV R6,#20

  D2: MOV R7,#248

  DJNZ R7,$

  DJNZ R6,D2

  DJNZ R5,D1

  RET

  END

  七、 C 语言源程序

  #include <AT89X51.H>

  unsigned char i;

  unsigned char temp;

  unsigned char a,b;

  void delay(void)

  {

  unsigned char m,n,s;

  for(m=20;m>0;m--)

  for(n=20;n>0;n--)

  for(s=248;s>0;s--);

  }

  void main(void)

  {

  while(1)

  {

  temp=0xfe;

  P1=temp;

  delay();

  for(i=1;i<8;i++)

  {

  a=temp<<i;

  b=temp>>(8-i);

  P1=a|b;

  delay();

  }

  for(i=1;i<8;i++)

  {

  a=temp>>i;

  b=temp<<(8-i);

  P1=a|b;

  delay();

  }

  }

  }

阅读本文用了:

秒,转发只需1秒

转载是一种智慧分享是一种美德❀

(0)

相关推荐