⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 777.c

📁 电子密码锁程序和电路用51单片机加上矩阵键盘控制
💻 C
📖 第 1 页 / 共 2 页
字号:
		   #include <AT89X52.H> 

  

unsigned char ps[]={1,2,3,4,5};  //初始化密码为:12345

  

unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7, 

                              0xef,0xdf,0xbf,0x7f}; 

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 

                               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; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -