• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

课程设计中的程序代码注释

中国银川 2016-12-22 浏览量:1010

做的课程设计要求用c语言,但写完后太长,大神能给每一行都做一下注释吗?
#include <AT89X52.H> 
unsigned char ps[]={1,2,3,4,5}; 
unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7, 无符号字符型,下同均为1个字节,能够被直接存储在RAM中,
                              0xef,0xdf,0xbf,0x7f}; 可以存储在0~0x7f区域
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 也可以存储在0x80~0xff区域,
                               0x6d,0x7d,0x07,0x7f,0x6f, 与变量的定义有关。
                               0x77,0x7c,0x39,0x5e,0x79,0x71, 
                               0x00,0x40,0x73,0xff}; 
unsigned char dispbuf[8]={18,16,16,16,16,16,16,16}; 
unsigned char dispcount; 
unsigned char flashcount; 
unsigned char temp; 
unsigned char key; 
unsigned char keycount; 
unsigned char pslen=5; 
unsigned char getps[6]; 
bit keyoverflag; 
bit errorflag; 
bit rightflag; 
unsigned int second3; 
unsigned int aa,bb; 
unsigned int cc; 
bit okflag; 
bit alarmflag; 
bit hibitflag; 
unsigned char oka,okb; 
void main(void) 
{ 
  unsigned char i,j; 
  TMOD=0x01; 
  TH0=(65536-500)/256; 
 TL0=(65536-500)%256; 
  TR0=1; 
  ET0=1; 
  EA=1; 
 while(1) 
    { 
      P3=0xff; 
      P3_4=0; 
      temp=P3; 
      temp=temp & 0x0f; 
      if (temp!=0x0f) 
        { 
          for(i=10;i>0;i--) 
          for(j=248;j>0;j--); 
          temp=P3; 
          temp=temp & 0x0f; 
          if (temp!=0x0f) 
            { 
              temp=P3; 
              temp=temp & 0x0f;              
              switch(temp) 
                { 
                  case 0x0e: 
                    key=7; 
                    break; 
                  case 0x0d: 
                    key=8; 
                    break; 
                  case 0x0b: 
                    key=9; 
                    break; 
                  case 0x07: 
                    key=10; 
                    break; 
                } 
              temp=P3; 
              P1_1=~P1_1; 
              if((key>=0) && (key<10)) 
                { 
                  if(keycount<6) 
                    { 
                      getps[keycount]=key; 
                      dispbuf[keycount+2]=19; 
                    } 
                  keycount++; 
                  if(keycount==6) 
                    { 
                      keycount=6; 
  
                    } 
                    else if(keycount>6) 
                      { 
                        keycount=6; 
                        keyoverflag=1;//key overflow                        
                      } 
                } 
                else if(key==12)//delete key 
                  { 
                    if(keycount>0) 
                      { 
                        keycount--; 
                        getps[keycount]=0; 
                        dispbuf[keycount+2]=16; 
                      } 
                      else 
                       { 
                          keyoverflag=1; 
                        } 
                  } 
                  else if(key==15)//enter key 
                    { 
                      if(keycount!=pslen) 
                        { 
                          errorflag=1; 
                          rightflag=0; 
                          second3=0; 
                        } 
                        else 
                          { 
                            for(i=0;i<keycount;i++) 
                              { 
                                if(getps[i]!=ps[i]) 
                                  { 
                                    i=keycount; 
                                    errorflag=1; 
                                    rightflag=0; 
                                    second3=0; 
                                    goto a; 
                                  } 
                              } 
                            errorflag=0; 
                            rightflag=1; 
a:                          i=keycount; 
                          } 
                    } 
              temp=temp & 0x0f;              
              while(temp!=0x0f) 
                { 
                  temp=P3; 
                  temp=temp & 0x0f;              
                } 
              keyoverflag=0;//????????? 
            } 
        } 
      P3=0xff; 
      P3_5=0; 
      temp=P3; 
      temp=temp & 0x0f; 
      if (temp!=0x0f) 
        { 
          for(i=10;i>0;i--) 
          for(j=248;j>0;j--); 
          temp=P3; 
          temp=temp & 0x0f; 
          if (temp!=0x0f) 
            { 
              temp=P3; 
              temp=temp & 0x0f;              
              switch(temp) 
                { 
                  case 0x0e: 
                    key=4; 
                    break; 
                  case 0x0d: 
                    key=5; 
                    break; 
                  case 0x0b: 
                    key=6; 
                    break; 
                  case 0x07: 
                    key=11; 
                    break; 
                } 
              temp=P3; 
              P1_1=~P1_1; 
              if((key>=0) && (key<10)) 
                { 
                  if(keycount<6) 
                    { 
                      getps[keycount]=key; 
                      dispbuf[keycount+2]=19; 
                    } 
                  keycount++; 
                  if(keycount==6) 
                    { 
                      keycount=6; 
                    } 
                    else if(keycount>6) 
                      { 
                        keycount=6; 
                        keyoverflag=1;//key overflow                        
                      } 
                } 
                else if(key==12)//delete key 
                  { 
                    if(keycount>0) 
                      { 
                        keycount--; 
                       getps[keycount]=0; 

                       dispbuf[keycount+2]=16; 
                      } 
                      else 
                        { 
                          keyoverflag=1; 
                        } 
                  } 
                  else if(key==15)//enter key 
                    { 
                      if(keycount!=pslen) 
                        { 
                          errorflag=1; 
                          rightflag=0; 
                          second3=0; 
                        } 
                        else 
                         { 

                           for(i=0;i<keycount;i++) 
                              { 
                               if(getps[i]!=ps[i]) 
                                  { 
                                  i=keycount; 
                                     errorflag=1; 
                                    rightflag=0; 
                                    second3=0; 
                                    goto a4; 
                                  } 
                              } 
                            errorflag=0; 
                            rightflag=1; 
a4:                          i=keycount; 
                          } 
                    } 
              temp=temp & 0x0f;              
              while(temp!=0x0f) 
                { 
                  temp=P3; 
                  temp=temp & 0x0f;              
                } 
              keyoverflag=0;//????????? 
            } 
        } 
  
      P3=0xff; 
      P3_6=0; 
      temp=P3; 
      temp=temp & 0x0f; 
      if (temp!=0x0f) 
        { 
          for(i=10;i>0;i--) 
          for(j=248;j>0;j--); 
          temp=P3; 
          temp=temp & 0x0f; 
          if (temp!=0x0f) 
            { 
              temp=P3; 
              temp=temp & 0x0f;              
             switch(temp) 
                { 
                  case 0x0e: 
                    key=1; 
                    break; 
                  case 0x0d: 
                    key=2; 
                    break; 
                  case 0x0b: 
                    key=3; 
                    break; 
                  case 0x07: 
                    key=12; 
                    break; 
                } 
              temp=P3; 
             P1_1=~P1_1; 
             if((key>=0) && (key<10)) 
                { 
                  if(keycount<6) 
                    { 
                      getps[keycount]=key; 
                      dispbuf[keycount+2]=19; 
                    } 
                  keycount++; 
                  if(keycount==6) 
                    { 
                     keycount=6; 
                    } 
                    else if(keycount>6) 
                      { 
                        keycount=6; 
                        keyoverflag=1;//key overflow                        
                      } 
                } 
                else if(key==12)//delete key 
                  { 
                    if(keycount>0) 
                      { 
                        keycount--; 
                        getps[keycount]=0; 
                        dispbuf[keycount+2]=16; 
                      } 
                      else 
                        { 
                          keyoverflag=1; 
                        } 
                  } 
                  else if(key==15)//enter key 
                    { 
                      if(keycount!=pslen) 
                        { 
                          errorflag=1; 
                          rightflag=0; 
                          second3=0; 
                        } 
                        else 
                          { 
                            for(i=0;i<keycount;i++) 
                              { 
                                if(getps[i]!=ps[i]) 
                                  { 
                                    i=keycount; 
                                    errorflag=1; 
                                    rightflag=0; 
                                    second3=0; 

                                   goto a3; 
                                  } 
                              } 
                           errorflag=0; 
                            rightflag=1; 
a3:                          i=keycount; 
                          } 
                    } 
              temp=temp & 0x0f;              
              while(temp!=0x0f) 
                { 
                  temp=P3; 
                  temp=temp & 0x0f;              
                } 

             keyoverflag=0;//????????? 
            } 
        } 
      P3=0xff; 
      P3_7=0; 
      temp=P3; 
      temp=temp & 0x0f; 
      if (temp!=0x0f) 
        { 
          for(i=10;i>0;i--) 
          for(j=248;j>0;j--); 
         temp=P3; 
          temp=temp & 0x0f; 
          if (temp!=0x0f) 
            { 
              temp=P3; 
              temp=temp & 0x0f;              
              switch(temp) 
                { 
                  case 0x0e: 
                    key=0; 
                    break; 
                  case 0x0d: 
                    key=13; 
                   break; 
                  case 0x0b: 
                    key=14; 

                   break; 
                  case 0x07: 
                    key=15; 
                    break; 
                } 
              temp=P3; 

             P1_1=~P1_1; 

             if((key>=0) && (key<10)) 

               { 

                 if(keycount<6) 
                    { 
                      getps[keycount]=key; 
                    dispbuf[keycount+2]=19; 
                    } 
                  keycount++; 
                  if(keycount==6) 
                    { 
                      keycount=6; 
                    } 
                    else if(keycount>6) 
                      { 
                        keycount=6; 
                        keyoverflag=1;//key overflow                        
                      } 
                } 
                else if(key==12)//delete key 
                  { 
                    if(keycount>0) 
                      { 
                        keycount--; 
                        getps[keycount]=0; 
                        dispbuf[keycount+2]=16; 
                      } 
                      else 
                        { 
                          keyoverflag=1; 
                        } 
                  } 
                  else if(key==15)//enter key 
                    { 
                      if(keycount!=pslen) 
                        { 
                          errorflag=1; 
                          rightflag=0; 
                          second3=0; 
                        } 
                        else 
                          { 
                            for(i=0;i<keycount;i++) 
                              { 
                                if(getps[i]!=ps[i]) 
                                  { 
                                    i=keycount; 
                                    errorflag=1; 
                                    rightflag=0; 
                                    second3=0; 
                                    goto a2; 
                                  } 
                              } 
                            errorflag=0; 
                            rightflag=1; 
a2:                          i=keycount; 
                          } 
                    } 
              temp=temp & 0x0f;              
              while(temp!=0x0f) 
                { 
                  temp=P3; 
                  temp=temp & 0x0f;              
                } 
              keyoverflag=0;//????????? 
            }                          
        } 
      
    } 
} 
void t0(void) interrupt 1 using 0 
{ 
  TH0=(65536-500)/256; 
  TL0=(65536-500)%256; 
  flashcount++; 
  if(flashcount==8) 
    { 
      flashcount=0; 
      P0=dispcode[dispbuf[dispcount]]; 
      P2=dispbit[dispcount]; 
      dispcount++; 
      if(dispcount==8) 
        { 
          dispcount=0; 
        } 
    } 
  if((errorflag==1) && (rightflag==0)) 
    { 

     bb++; 
      if(bb==800) 
        { 
          bb=0; 
          alarmflag=~alarmflag; 
        } 
      if(alarmflag==1)//sound alarm signal 
        { 
          P1_7=~P1_7; 
        } 
      aa++; 
      if(aa==800)//light alarm signal 
        { 
          aa=0; 
          P1_0=~P1_0; 
        } 
      second3++; 
      if(second3==6400) 
        { 
          second3=0; 
          errorflag=0; 
          rightflag=0; 
          alarmflag=0; 
          bb=0; 
          aa=0; 
        }      
    } 
    else if((errorflag==0) && (rightflag==1)) 
      { 
        P1_0=0; 
        cc++; 
        if(cc<1000) 
          { 
            okflag=1; 
          } 

         else if(cc<2000) 
            { 
              okflag=0; 
            } 
            else 
              { 
                errorflag=0; 
                rightflag=0; 
                P1_7=1; 
                cc=0; 
                oka=0; 
                okb=0; 
                okflag=0; 
                P1_0=1; 
              } 
        if(okflag==1) 
          { 
            oka++; 
            if(oka==2) 
              { 
                oka=0; 
                P1_7=~P1_7; 
              } 
          } 
        else 
            { 
              okb++; 
              if(okb==3) 
                { 
                  okb=0; 
                  P1_7=~P1_7; 
                } 
            } 
      } 
  if(keyoverflag==1) 
    { 
      P1_7=~P1_7; 
    } 
}

4×4键盘及8位数码管显示构成的电子密码锁

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 您好,我只解析部分,剩下就舉一反三囉

          P3=0xff; 
          P3_4=0; 
          temp=P3; 
          temp=temp & 0x0f; //第一次輸入
          if (temp!=0x0f) 
          { 
              for(i=10;i>0;i--) 
              for(j=248;j>0;j--); //按鍵延遲
              temp=P3; 
              temp=temp & 0x0f; 
              if (temp!=0x0f) //按鍵去抖動
              { 
                  temp=P3; 
                  temp=temp & 0x0f;              
                  switch(temp) //鍵值改變
                  { 
                      case 0x0e: 
                        key=7; 
                        break; 
                      case 0x0d: 
                        key=8; 
                        break; 
                      case 0x0b: 
                        key=9; 
                        break; 
                      case 0x07: 
                        key=10; 
                        break; 
                  } 
                  temp=P3; 
                  P1_1=~P1_1; //LED閃滅
                  if((key>=0) && (key<10)) //判斷Key值範圍
                  { 
                      if(keycount<6) //判斷Key位數
                      { 
                          getps[keycount]=key; //存入Key的buffer
                          dispbuf[keycount+2]=19; //存入顯示buffer
                      } 
                      keycount++; 
                      if(keycount==6) //Key等於6位數
                      { 
                          keycount=6; 
      
                      } 
                      else if(keycount>6) //Key超過6位數
                      { 
                          keycount=6; 
                          keyoverflag=1;//key overflow Key超過6位數識別變數                      
                      } 
                    } 
                    else if(key==12)//delete key 
                    { 
                      if(keycount>0) //大於0位數時才可刪除
                      { 
                            keycount--; 
                            getps[keycount]=0; 
                            dispbuf[keycount+2]=16; 
                      } 
                      else 
                      { 
                              keyoverflag=1; //key overflow Key小於等於0位時的識別變數
                       } 
                     } 
                     else if(key==15)//enter key 
                     { 
                          if(keycount!=pslen) //Key與密碼不同等位數
                          { 
                              errorflag=1; //錯誤比對識別變數
                              rightflag=0; 
                              second3=0; 
                          } 
                            else 
                            { 
                                for(i=0;i<keycount;i++) //等位數就逐一位數比對
                                { 
                                    if(getps[i]!=ps[i]) 
                                    { 
                                        i=keycount; 
                                        errorflag=1; 
                                        rightflag=0; 
                                        second3=0; 
                                        goto a; //這裡使用不是很恰當
                                    } 
                                } 
                                errorflag=0; 
                                rightflag=1; //比對成功的識別變數
    a:                          i=keycount; 
                            } 
                      } 
                  temp=temp & 0x0f;              
                  while(temp!=0x0f) //等待使用者輸入
                  { 
                      temp=P3; 
                      temp=temp & 0x0f;              
                  } 
                  keyoverflag=0;//????????? 初始化超過或未滿位數識別變數
              } 
          } 
    後面三次輸入就知道意思了,再來看中斷函數

    void t0(void) interrupt 1 using 0 
    { 
      TH0=(65536-500)/256; //12M晶振,12T定時,這裡為500us定時
      TL0=(65536-500)%256; 
      flashcount++; 
      if(flashcount==8) //刷新數碼管顯示用
      { 
          flashcount=0; 
          P0=dispcode[dispbuf[dispcount]]; 
          P2=dispbit[dispcount]; 
          dispcount++; 
          if(dispcount==8) 
          { 
              dispcount=0; 
          } 
      } 
      if((errorflag==1) && (rightflag==0)) //錯誤比對時
      { 
    
          bb++; 
          if(bb==800) //每500x800=0.4s,Beeper間隔鳴叫
          { 
              bb=0; 
              alarmflag=~alarmflag; 
          } 
          if(alarmflag==1)//sound alarm signal 
          { 
              P1_7=~P1_7; 
          } 
          aa++; 
          if(aa==800)//light alarm signal 每500x800=0.4s,LED間隔閃滅
          { 
              aa=0; 
              P1_0=~P1_0; 
          } 
          second3++; 
          if(second3==6400) //3.2s後結束所有警告動作,並初始化所有變數
          { 
              second3=0; 
              errorflag=0; 
              rightflag=0; 
              alarmflag=0; 
              bb=0; 
              aa=0; 
          }      
        } 
        else if((errorflag==0) && (rightflag==1)) //比對成功時
        { 
           P1_0=0; //LED滅
           cc++; 
          if(cc<1000) //以下都是Beeper鳴叫的延遲
          { 
     	 okflag=1; 
           } 
    
           else if(cc<2000) 
           { 
              okflag=0; 
           }
           else //超過500*2000= 1s後,初始化所有變數
           { 
              errorflag=0; 
     	  rightflag=0; 
              P1_7=1; 
              cc=0; 
              oka=0; 
              okb=0; 
               okflag=0; 
               P1_0=1; 
            } 
            if(okflag==1) //Beeper鳴叫間隔 500x2=1ms
            { 
                oka++; 
                if(oka==2) 
                { 
                    oka=0; 
                    P1_7=~P1_7; 
                } 
            } 
            else //Beeper鳴叫間隔 500x3=1.5ms
            { 
                okb++; 
                if(okb==3) 
                { 
                   okb=0; 
                   P1_7=~P1_7; 
                } 
            } 
      } 
      if(keyoverflag==1) //Beeper鳴叫間隔 500us
      { 
          P1_7=~P1_7; 
      } 
    }
    以上解析完畢,剩餘的還需要您自己好好理解囉,祝好運

    • 发布于 2016-12-24
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:6
  • 试着自己写一下注释,整个程序会更清楚。
    • 发布于2016-12-22
    • 举报
    • 评论 0
    • 1
    • 0

  • 有哪里不懂的可以问 建议不要直接求整个代码的解释 自己先理解下
    • 发布于2016-12-23
    • 举报
    • 评论 0
    • 1
    • 0

  • 写完太长?是你写的吗?是的话你就应该知道怎么写注释,不是你写的就一个函数一个函数的写
    • 发布于2016-12-23
    • 举报
    • 评论 0
    • 1
    • 0

  • 每行都注释?我也是醉了!哪里不会问哪里……SoEasy!
    • 发布于2016-12-23
    • 举报
    • 评论 0
    • 1
    • 0

  • 没有注释的代码自己不一定看得懂,人才!  能看懂大意自己敲一遍就ok
    • 发布于2016-12-23
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

课程设计中的程序代码注释