新闻  |   论坛  |   博客  |   在线研讨会
Proteus单片机:广告灯
A670521546 | 2011-11-05 17:09:26    阅读:1737   发布文章

使端口P1做单一灯的变化:左移2次,右移2次,闪烁2次(延时的时间0.2秒)。与《广告灯的左移右移》的原理图相同




程序:
利用上篇的程序进行加工改造。如下:
#include<reg51.h>
unsigned char temp,a,b;
int i,j;

void delay()

//int i,j;
for(i=100;i>0;i--)
for(j=200;j>0;j--);
}

void main()
{
//int i,j; 
temp=0xfe;
P1=temp;
delay();

while(1){
/* 左移2次*/
for(j=0;j<2;j++) {
for(i=0;i<8;i++){
a=temp<<i;
b=temp>>(8-i);
P1=a|b;
delay();
}
}

/* 右移2次*/
for(j=0;j<2;j++) {
for(i=1;i<=8;i++){
a=temp>>i;
b=temp<<(8-i);
P1=a|b;
delay();
}
}

/* 闪烁2次*/
for(i=0;i<2;i++){
P1=0;
delay();
P1=0xff;
delay();
}
}
}

利用取表的方式,如下:

#include <reg51.h>

unsigned char code table[]={0xfe,0xfd,0xfb,0xf7,

                                              0xef,0xdf,0xbf,0x7f,

                                              0xfe,0xfd,0xfb,0xf7,

                                              0xef,0xdf,0xbf,0x7f,

                                              0x7f,0xbf,0xdf,0xef,

                                              0xf7,0xfb,0xfd,0xfe,

                                              0x7f,0xbf,0xdf,0xef,

                                              0xf7,0xfb,0xfd,0xfe,

                                              0x00,0xff,0x00,0xff,

                                              0x01};

unsigned char i;

 

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)

    {

      if(table[i]!=0x01)

        {

          P1=table[i];

          i++;

          delay();

        }

        else

          {

            i=0;

          }

    }

}

两种方式孰优孰劣,一看就可知。

对于同一个电路图,我们变换显示样式,只需要改变相应的程序即可实现。此篇与上篇既是如此,关键在于自己的发挥。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客