关于“数码管左移”的问题,新手求助...

2019-07-16 06:38发布

  1. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

  2. #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换

  3. sbit LATCH1=P2^6;//定义锁存使能端口 段锁存

  4. sbit LATCH2=P2^7;//                 位锁存

  5. unsigned char code DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 显示段码值0~9

  6. unsigned char code WeiMa[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//分别对应相应数码管点亮即位码

  7. unsigned char TempData[9]; //存储显示值的全局变量

  8. void Delay(unsigned int t); //函数声明

  9. void Display(unsigned char FirstBit,unsigned char Num);
  10. /*------------------------------------------------                    主函数------------------------------------------------*/
  11. main()
  12. {
  13. unsigned char i,k,j;

  14. unsigned char s;

  15. while(1)     
  16. {
  17.            j++;

  18.            if(j==20)   
  19.             
  20.    {   
  21.   j=0;               

  22. if(0==k)            
  23. {            
  24. for(s=0;s<8;s++) //完全循环完成后清零所有缓冲区   
  25.                      
  26. TempData=0xff;  
  27.                
  28. }      
  29.    
  30. TempData=DuanMa[k]; //把需要显示的字符依次送缓冲区//   
  31.      
  32.   TempData[i-1]=0xff;  //不需要显示的区域清零   
  33.          
  34.    i++;                 
  35. if(i==(8-k))                  
  36. {                  
  37. i=0;     
  38.      
  39.   k++;

  40. if(k==8)      

  41. k=0;                       
  42. }   
  43.                            
  44.    }   
  45.      
  46.   Display(0,8);//从第一位显示,共显示8位

  47.      }
  48. }
  49. *------------------------------------------------ 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 0~65535------------------------------------------------*/

  50. void Delay(unsigned int t)
  51. {
  52. while(--t);
  53. }
  54. /*------------------------------------------------ 显示函数,用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示 如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2------------------------------------------------*/

  55. void Display(unsigned char FirstBit,unsigned char Num)

  56. {      unsigned char i;

  57.                  for(i=0;i<Num;i++)
  58.            {

  59.         DataPort=0xff;   //清空数据,防止有交替重影

  60.        LATCH1=1;     //段锁存   

  61.        LATCH1=0;

  62.        DataPort=WeiMa[i+FirstBit]; //取位码

  63.        LATCH2=1;     //位锁存

  64.        LATCH2=0;

  65.        DataPort=TempData; //取显示数据,段码

  66.       LATCH1=1;     //段锁存

  67.        LATCH1=0;

  68.        Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影     
  69.   }
  70. }
复制代码


以上是标准代码         
TempData=DuanMa[k]; //把需要显示的字符依次送缓冲区//         
TempData[i-1]=0xff;  //不需要显示的区域清零
这两行看得不太明白,i的初始值是0这里TempData[i-1]=0xff;怎么能实现不需要显示的区域清零?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。