"); //-->
使端口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;
}
}
}
两种方式孰优孰劣,一看就可知。
对于同一个电路图,我们变换显示样式,只需要改变相应的程序即可实现。此篇与上篇既是如此,关键在于自己的发挥。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。