求助 做一流水灯实验仿真,要求用C语言编程,请各位大侠帮忙解答,可以的话请将程序发到信箱xixixh@hotmail.com。谢谢
: 硬件前提:用51的P1口控制8个LED,1 点亮,0 熄灭。
(1)第1,3,5,7个灯半亮,其余的全亮。
(2)第1个亮1/4,第2个亮2/4第3个亮3/4,第4个全亮,第5个全亮,第6个亮3/4,第7个亮2/4,第8个1/4亮。
(3)所有的灯逐渐从暗到全亮(0->1/4->2/4->3/4->1),再由全亮到暗。
(4)8个灯从第一个开始依次渐亮,直到最后一个。再从最后一个起渐暗,直到第一个。如此循环往复。这才是真正流水灯。
搞了一天弄出来不知道这样行不行。定时器参数可能要调。只是在proteus上试了下,不怎么看的出效果。
忘各位大虾指教。
#include <reg51.h>
#define uchar unsigned char
main()
{
uchar Count;
TMOD=0x02;
TH0=0xdf;
TL0=0xdf;
TR0=1;
while(1)
{
uchar i,j,k;
k=0;
//第一个功能
for(i=0;i<8;i++)
{
while(TF0==0);
TF0=0;
if(i<=4)
{P1=0xFF;}
else
{P1=0x55;}
}
//第二个功能
for(i=0;i<8;i++)
{
while(TF0==0);
TF0=0;
P1=0xFF<<i;
}
//第三个功能第一步
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{
while(TF0==0);
TF0=0;
if(j<=i)
{P1=0xFF;}
else
{P1=0x00;}
}
//第三个功能第二步
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{
while(TF0==0);
TF0=0;
if(j<=i)
{P1=0x00;}
else
{P1=0xFF;}
}
//第四个功能第一步
for(k=0;k<8;k++)
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{
while(TF0==0);
TF0=0;
if(j<=i)
{P1=0x01+2^k;}
else
{P1=0x00+(2^(k-1));}
}
//第四个功能第二步
for(k=0;k<8;k++)
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{
while(TF0==0);
TF0=0;
if(j<=i)
{P1=0x7F<<k;}
else
{P1=0xFF<<k;}
}
}
}

最新回复
budhy (2008-7-15 12:05:39)
xixixh (2008-7-15 13:00:58)
budhy (2008-7-15 13:11:09)
QUOTE:
我也就是那么想。要是真那样的话,就要玩 PWM 了。不过楼主写的程序根本与 PWM 无关。还是等楼主的解答再说。
ybzjllj (2008-7-15 13:12:11)
panhearii (2008-7-15 14:48:12)
推荐用定时器做
比如:
uchar ucTime0=0,
void vTimer0 interrupt 1
{
TR0=0;
TH0=0XFF;TL0=0X00;
ucTime0++;
if(ucTime0==4){P1=0xff}
else if(ucTime0==8){P1=0x00;ucTime0=0;}
TR0=1;
}
以上为50%占空比
12M晶振时 频率约为490HZ(12M/10/256/8)??8档PWM
我猜是这样。。。
xixixh (2008-7-15 17:23:44)
谢谢楼上 提醒
我会继续努力的
budhy (2008-7-15 22:28:55)
QUOTE:
楼主还没有答复我们的问题,亮1/4, 亮2/4,亮3/4, 全亮, 究竟是什么意思?shilin (2008-7-19 11:21:31)