新手写了个16行32列的LEED显示屏,但有疑问,各位大神帮忙...

2020-01-30 13:39发布

新手写了个16行32列的LED显示屏的51程序,但是在实现LED显示屏每隔1秒循环亮灭过程中只有中间2行能实现,第一行和最后一行不能实现,什么原因?各位大神帮帮忙啊
#include "reg51.h"
#define uchar unsigned char
uchar time;
sbit A1 = P0^0;
sbit B1 = P0^1;
void LineScan(char line)
{
switch(line)
{
     case 0: A1=0;B1=0;
     break;

     case 1: A1=1;B1=0;
     break;

     case 2: A1=0;B1=1;
     break;

     case 3: A1=1;B1=1;
     break;

     default:
     break;
}
}
void initTimer(void)
{
TMOD=0x1;
TH0=0xd8;
TL0=0xf0;
}

void timer0(void) interrupt 1
{
TH0=0xd8;
TL0=0xf0;
//add your code here.
time++;
}

void main(void)
{
initTimer();
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(time==50) //中断50次,0.5s
{
  time=0;
    LineScan(0);
  }
   if(time==50) //中断100次,1s
{
  time=0;
    LineScan(1);
  }
   if(time==50) //中断150次,1.5s
{
  time=0;
    LineScan(2);
  }
   if(time==50) //中断200次,2s
{
  time=0;
    LineScan(3);
  }
   
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
abcnnt
1楼-- · 2020-01-30 14:57
if(time==50)

好像问题出这吧。你每次定时到了50后,又清零了。只是停在了第一个if中。
Huangwenfeng
2楼-- · 2020-01-30 15:22
abcnnt 发表于 2013-5-6 21:13
if(time==50)

好像问题出这吧。你每次定时到了50后,又清零了。只是停在了第一个if中。 ...

那怎么解决啊!求助啊!实在想不明白啊
slotg
3楼-- · 2020-01-30 19:00
while(1)
{

if(time==50) //中断50次,0.5s
{
    LineScan(0);
}

if(time==100) //中断100次,1s
{
    LineScan(1);
}

if(time==150) //中断150次,1.5s
{
    LineScan(2);
}

if(time==200) //中断200次,2s
{
    time=0;
    LineScan(3);
}
  
}


最后一次再清 time , 试看看了.
Huangwenfeng
4楼-- · 2020-01-30 20:29
slotg 发表于 2013-5-6 22:46
while(1)
{

谢谢!我已经自己弄好了

一周热门 更多>