让第一个小灯到最后一个依次闪烁,可以用移位来达到目的。
单片机有一个库文件已经写好了移位函数,储存在#include <intrins.h>库文件里。

1 _crol_字符循环左移

字符循环左移:

#include <reg52.h>
#include <intrins.h>

char tmp;
void delay() //延时函数
{
    int i;
    for(i=0;i<8888;i++)
    ;
}
void main()
{
    tmp=0xfe;
    P1=tmp; //第一个小灯亮
    while(1)
    {
        tmp=_crol_(tmp,1); //字符左移
        delay();
        P1=tmp; //第二个小灯亮
    }
}

运行程序可以看到第一个小灯,第二个小灯…依次闪烁。

2 _cror_字符循环右移

将代码tmp=_crol_(tmp,1);中的crol改成cror.

#include <reg52.h>
#include <intrins.h>

char tmp;
void delay() //延时函数
{
    int i;
    for(i=0;i<8888;i++)
    ;
}
void main()
{
    tmp=0xfe;
    P1=tmp;
    while(1)
    {
        tmp=_cror_(tmp,1); //字符右移
        delay();
        P1=tmp; 
    }
}

运行程序后,可以看到第一个小灯,第八个小灯,第七个小灯…依次闪烁。

3 扩展(蜂鸣器)

加上蜂鸣器,蜂鸣器响一下,灯亮一下:

//flow light and beep 
#include <reg51.h>
#include <intrins.h>
unsigned char a,b,k,j;
sbit beep=P2^3;
void delay10ms()
{
   for(a=100;a>0;a--)
     for(b=225;b>0;b--);
}
void main()
{
  k=0xfe;
  while(1)
  {
      delay10ms();
      beep=0;
      delay10ms();
      beep=1;
      j=_crol_(k,1);
      k=j;
      P1=j;
   }
}
0
Posted in 汇编语言

Leave a Comment:

电子邮件地址不会被公开。