注册 登录
编程论坛 单片机编程

初学者 请帮注释下个别地方

TERMINATORXQ 发布于 2009-12-30 10:07, 970 次点击
    #include"at89x51.h"
   
    unsigned int j;
    unsigned char i,k,cz;
    unsigned char a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x7c};
    unsigned char b[]={0,0,0,0};
    unsigned char wx=100;
    csh()
    {
     IE=0x85;  //EA=1;EX1=1;EX0=1;
     TCON=0x05;//IT0=1;IT1=1;*/
    }

    bcd()
    {      b[0]=10;
        b[1]=wx/100;
        b[2]=(wx%100)/10;
        b[3]=wx%10;
    }
 
    tv()                                从这里到
    {   
       cz=0xfe;  
       for(i=0;i<4;i++)        
          {
        k=b[i];
                P2=a[k];
            P0=cz;   
            for(j=0;j<550;j++);
          cz=(cz<<1)+1;                    这里   主要是这个tv函数有些不懂

         }
     }

void main(void)
{    csh();
    while(1)
           {
        bcd();
        tv();
           }
}

KINT0() interrupt  0
   {wx=wx+1;
    if(wx>=120){wx=120;}
   }

KINT1() interrupt  2
   {wx=wx-1;
    if(wx<80)wx=80;
   }

4 回复
#2
阿崔2010-04-09 15:40
tv()                             
    {   
       cz=0xfe;                         // 给cz赋初值,按照后面看来应该是让P0口最低位为0      
           for(i=0;i<4;i++)        
          {
        k=b[i];                         //每次执行循环后,分别将wx的百位,十位,个位给k
                P2=a[k];                //给P2口赋a[n]码表中的值
            P0=cz;                      //P0口最低位为0
            for(j=0;j<550;j++);         //延时
          cz=(cz<<1)+1;                 //其实是P0口的一个循环左移。为了防止移位之后低位全都为零,所以加1,只移动0,实现循环移位
         }
     }
感觉这个应该是个单片机控制的流水灯,带数码管显示的程序。
#3
zhuyunshen2010-04-09 18:36
AAAAAAAAAAAAAA
#4
Alar302010-04-10 09:57
顶2#的大侠!
#5
ltf1062012-08-31 10:49
解释的很一般啊
1