Board logo

标题: Proteus单片机:广告灯 [打印本页]

作者: angley    时间: 2011-11-9 16:39     标题: Proteus单片机:广告灯

使端口P1做单一灯的变化:左移2次,右移2次,闪烁2次(延时的时间0.2秒)。与[url=http://home.elecfans.com/link.php?url=http://home.elecfans.com%2Fspace-137188-do-blog-id-7931.html]广告灯的左移右移[/url]的原理图相同



程序:
利用上篇的程序进行加工改造。如下:
#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!=0x01)
        {
          P1=table;
          i++;
          delay();
        }
        else
          {
            i=0;
          }
    }
}
两种方式孰优孰劣,一看就可知。

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


原文出自:中国电子技术论坛




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0