智能车制作

标题: 关于数码管扫描显示 [打印本页]

作者: autor    时间: 2012-10-14 20:45
标题: 关于数码管扫描显示
    time++;
  if(time >=50){
      time=0;
      Count_Num++;
      LedData[0] = Count_Num/1000%10;
      LedData[1] = Count_Num/100%10;
      LedData[2] = Count_Num/10%10;
      LedData[3] = Count_Num%10;
      if(Count_Num >=9999){
          Count_Num=0;
      }
  }
PORTK = 0x01 << LedNum ;
  PORTB = LedCode[LedData[LedNum]];
  
  LedNum++;
  if(LedNum >= 4) LedNum = 0;
PORTK控制数码管其中某一个显示,PORTB接七段数码管显示。我觉得PORTK = 0x01 << LedNum 有问题,不能实现数码管扫描显示的功能,但是把程序考进去后的确是数码管扫描显示了

作者: 凌心    时间: 2012-10-14 21:12
PORTK = 0x01 << LedNum实现0~4位的扫描,没有错误吧。
作者: autor    时间: 2012-10-15 07:53
凌心 发表于 2012-10-14 21:12
PORTK = 0x01

当LedNum等于3时,即00000011,此时PORTK=00000110,这个时候不是会同时有两个数码管显示,且下次进入中断时,LedNum=0,又开始重复之前的,PORTK的第四位总不能被置1,即第四个数码管也应该不能显示。
作者: 凌心    时间: 2012-10-15 09:04
是0x01左移LedNum位。
作者: yukunlinykl    时间: 2012-10-15 09:32
autor 发表于 2012-10-15 07:53
当LedNum等于3时,即00000011,此时PORTK=00000110,这个时候不是会同时有两个数码管显示,且下次进入中断 ...

当LedNum等于3时,PORTK应该等于00000100
LedNum PORTK
0  00000001
1  00000010
2  00000100
3  00001000

作者: autor    时间: 2012-10-15 10:25
凌心 发表于 2012-10-15 09:04
是0x01左移LedNum位。

明白了,是我弄错了,太谢谢了
作者: autor    时间: 2012-10-15 10:26
yukunlinykl 发表于 2012-10-15 09:32
当LedNum等于3时,PORTK应该等于00000100
LedNum PORTK
0  00000001

看明白了,谢谢





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2