郁闷很长时间的数码管左移问题!!!求助高手啊

2019-07-16 06:05发布

以下是我的程序
#include<reg52.h>

#define DatePort P0

sbit DuanMa=P2^2;
sbit WeiMa=P2^3;

unsigned char code Date_Duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code Date_Wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char TempDate[8];

void Delay(unsigned int t);
void Display(unsigned char FirstBit,unsigned char Num);

main()
{
unsigned int j,i,k,s;
while(1)
{
  j++;
  if(j==20)
  {
   j=0;
   if(k==0)
   {
    for(s=0;s<8;s++)
    TempDate[s]=0;
   }
   
   TempDate[8-i]=Date_Duan[k];
   TempDate[9-i]=0;
   if(i==8-k)//变数
   {
    i=0;
    k++;
    if(k==8)
    k=0;
   }
   i++;
  }
  Display(0,8);
}
}

void Delay(unsigned int t)
{
while(--t);
}

//数码管冬动态扫描
void Display(unsigned char FirstBit,unsigned char Num)
{
unsigned char i;

for(i=0;i<Num;i++)
{
  DatePort=0;
  DuanMa=1;
  DuanMa=0;
  DatePort=Date_Wei[i+FirstBit];
  WeiMa=1;
  WeiMa=0;
  DatePort=TempDate[i];
  DuanMa=1;
  DuanMa=0;
  Delay(200);
}
}

很想知道 为什么数码管莫有反应啊!!!!!!  求高手!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
A670521546
1楼-- · 2019-07-16 10:42
int j,i,k,s;需要定义这么多?看的头晕

加下注释
aa511950071
2楼-- · 2019-07-16 14:09
A670521546 发表于 2012-4-8 22:00
int j,i,k,s;需要定义这么多?看的头晕

加下注释
  1. /*多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值*/
  2. #include<reg52.h>
  3. #define DatePort P0
  4. sbit DuanMa=P2^2;//定义段锁存
  5. sbit WeiMa=P2^3;//定义位锁存
  6. unsigned char code Date_Duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示段码值0-9
  7. unsigned char code Date_Wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应点亮的数码管
  8. unsigned char TempDate[8];//存放临时数据
  9. void Delay(unsigned int t);//演延时程序声明
  10. void Display(unsigned char FirstBit,unsigned char Num);//数码管动态扫描程序声明
  11. main()
  12. {
  13. unsigned int j,i,k,s;
  14. while(1)
  15. {
  16.   j++;
  17.   if(j==20)
  18.   {
  19.    j=0;
  20.    if(k==0)
  21.    {
  22.     for(s=0;s<8;s++)
  23.     TempDate=0;//完全循环完成后清零所有缓冲区
  24.    }
  25.    
  26.    TempDate[8-i]=Date_Duan[k];//把需要显示的字符依次送缓冲区
  27.   TempDate[8+1-i]=0;//不需要显示的区域清零
  28.    if(i==8-k)//通过对K的控制 进而使数据移动到想要的结果比如 0的话就让0从第8个数码管动态移动到第1个数码管 1的话从第7个数码管动态移动到第1个 以此类推
  29.    {
  30.     i=0;
  31.     k++;
  32.     if(k==8)
  33.     k=0;
  34.    }
  35.    i++;
  36.   }
  37.   Display(0,8);//从第一位显示,共显示8位
  38. }
  39. }
  40. void Delay(unsigned int t)
  41. {
  42. while(--t);
  43. }

  44. //数码管冬动态扫描
  45. void Display(unsigned char FirstBit,unsigned char Num)
  46. {
  47. unsigned char i;

  48. for(i=0;i<Num;i++)
  49. {
  50.   //清空数据
  51.   DatePort=0;
  52.   DuanMa=1;
  53.   DuanMa=0;
  54.   
  55.   DatePort=Date_Wei[i+FirstBit];//取位码
  56.   WeiMa=1;//位锁存
  57.   WeiMa=0;
  58.   DatePort=TempDate;//取显示数据
  59.   DuanMa=1;//段锁存
  60.   DuanMa=0;
  61.   Delay(200);
  62. }

  63. }
复制代码

一周热门 更多>