基于51单片机的电子密码锁程序有问题

我现在的代码可以可以实现一部分功能,然后想增加一个密码修改的功能,代码如下。乱码的地方是因为用的keil5写的程序,粘贴下来就变成乱码了,应该对程序没有影响。


```c
#include <reg52.h>              
//#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define GPIO_KEY P1
sbit RS = P2^2;               //Òº¾§ÏÔʾÆ÷¿ØÖƶ˿Ú
sbit RW = P2^3; 
sbit E = P3^7;
sbit shuchu=P2^0;              //¼ÌµçÆ÷¿ØÖƶ˿Ú
sbit beep=P2^1;                  //±¨¾¯Æ÷¶Ë¿Ú
sbit DoorBell=P3^6;              //ÃÅÁå¶Ë¿Ú
uchar upxs[16]={"Password:"}; //ÉÏÅÅ´æ·ÅÊý×é
uchar dwxs[16]={""};          //ÏÂÅÅ´æ·ÅÊý×é
int tempword[8]={0};           //ÁÙʱÃÜÂëÊý×é
int password[8]={1,2,3,4};//³õʼÃÜÂë
uint now=0;                      //Êý×éµÈЧָÕë
uint key=0;                   //ÃÜÔ¿
uint KeyValue=16;             //ÓÃÀ´´æ·Å¶ÁÈ¡µ½µÄ¼üÖµ
uint warn=0;                  //´íÎóÀÛ¼Æ
uint time=0;                  //ÓÃÓÚ¶¨Ê±
uint time1=0;                 //ÓÃÓÚ¶¨Ê±
uint time2=0;                 //ÓÃÓÚ¶¨Ê±
uint moshi=0;                  //¶¨Ê±Æ÷ÄÚ²¿Ä£Ê½
//*********************************************************************************************************************************
//Òº¾§Çý¶¯ÏÔʾģ¿é//
void delay(uint dell)//ºÁÃëÑÓʱ//
{
     uchar x;
     for(dell;dell>0;dell--)
     for(x=110;x>0;x--);
}
void wr_com(uchar temp)//дָÁî//
{
     RS=0;
     RW=0;
     P0=temp;
     E=1;
     E=0;
}
void wr_data(uchar num)//дÊý¾Ý//
{
     RS=1;
     RW=0;
     P0=num;
     E=1;
     E=0;
}
void disp_lcd(uchar addr,char *templ)//ÏÔʾº¯Êý//
{
     uchar i;
     wr_com(addr);
         delay(50);
     for(i=0;i<16;i++)
    {
     wr_data(templ[i]);
         delay(50);
    }     
}
void lcd_init()//³õʼ»¯Òº¾§//
{
     wr_com(0x30);
     delay(50);
     wr_com(0x38);
     delay(50);
     wr_com(0x01);
     delay(50);
     wr_com(0x06);
     delay(50);
     wr_com(0x0c);
     delay(50);
}
void lcdxianshi(void)//Òº¾§×ÜÏÔʾ//
{
     disp_lcd(0x80,upxs);
     disp_lcd(0xc0,dwxs);
}
//*********************************************************************************************************************************
//°´¼üɨÃèÄ£¿é//
void Delay10ms(void)//ÑÓʱº¯Êý//
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}
void KeyDown(void)//¼üÅ̼ì²âº¯Êý//
{
    char a=0;
    GPIO_KEY=0x0f;
    if(GPIO_KEY!=0x0f)     //¶ÁÈ¡°´¼üÊÇ·ñ°´ÏÂ
    {
        Delay10ms();       //ÑÓʱ10ms½øÐÐÏû¶¶
        if(GPIO_KEY!=0x0f) //Ôٴμì²â¼üÅÌÊÇ·ñ°´ÏÂ
        {
            
            //¼ì²âÁÐ
            GPIO_KEY=0X0F;
            switch(GPIO_KEY)
            {
                case(0X07):    KeyValue=0;break;
                case(0X0b):    KeyValue=1;break;
                case(0X0d): KeyValue=2;break;
                case(0X0e):    KeyValue=3;break;
            }
            //¼ì²âÐÐ
            GPIO_KEY=0XF0;
            switch(GPIO_KEY)
            {
                case(0X70):    KeyValue=KeyValue;break;
                case(0Xb0):    KeyValue=KeyValue+4;break;
                case(0Xd0): KeyValue=KeyValue+8;break;
                case(0Xe0):    KeyValue=KeyValue+12;break;
            }
            while((a<10)&&(GPIO_KEY!=0xf0))//°´¼üËÉÊÖ¼ì²â
            {
                Delay10ms();
                a++;
            }
        }
    }
}
//*******************************************************************************************************************************
//Êý¾Ý´¦ÀíÄ£¿é//
void keysend(void)//¼üÖµ´«µÝ//
{
          switch(KeyValue)
          {
         case 0:{dwxs[now]='0';tempword[now]=0;now++;break;}
           case 1:{dwxs[now]='1';tempword[now]=1;now++;break;}
           case 2:{dwxs[now]='2';tempword[now]=2;now++;break;}
           case 3:{dwxs[now]='3';tempword[now]=3;now++;break;}
           case 4:{dwxs[now]='4';tempword[now]=4;now++;break;}
           case 5:{dwxs[now]='5';tempword[now]=5;now++;break;}
           case 6:{dwxs[now]='6';tempword[now]=6;now++;break;}
           case 7:{dwxs[now]='7';tempword[now]=7;now++;break;}
           case 8:{dwxs[now]='8';tempword[now]=8;now++;break;}
           case 9:{dwxs[now]='9';tempword[now]=9;now++;break;}
           case 14:{
                     upxs[12]='S';
                    upxs[13]='U';
                    upxs[14]='R';
                    upxs[15]='E'; 
                    
                    break;
           }
             case 12:
             {
                 upxs[12]='M';
                 upxs[13]='O';
                 upxs[14]='D';
                 break;
             }
           case 15:{
                  TR0=1;             //¶¨Ê±Æ÷0´ò¿ª
                     moshi=1;             //ģʽ1ΪÃÅÁåģʽ
                  KeyValue=16; break;//¼üÖµ»º´æÇåÁã
           }
          }
          if(now==8) now=0;          //Ö»ÏÔʾ°Ëλ
}
void sure(void)//ÃÜÂëÈÏÖ¤º¯Êý//
{
     uchar i;
     if(KeyValue==14)
     {
         for(i=0;i<8;i++)
         {
             if(password[i]!=tempword[i])//¶Ô±ÈÃÜÂë
            {
                key++;
            }
         }           
         if(key==0)                //ÃÜÂëÕýÈ·£¬Êä³öOK 
               {
                dwxs[13]='O';
              dwxs[14]='K';
              shuchu=1;                  //¿ªÃÅ
                TR1=1;            //¶¨Ê±Æ÷1´ò¿ª£¬Æô¶¯µ¹¼ÆÊ±
                moshi=0;          //ÊäÈëÕýÈ·ÃÜÂë¿É¹Ø±Õ±¨¾¯Ä£Ê½
                beep=0;           //·äÃùÆ÷¸´Î»
                TR0=0;                      //²¢Çҹرն¨Ê±Æ÷0
               }
         if(key!=0)           //ÃÜÂë´íÎ󣬴ÎÊýÀÛ¼Ó
            {
                dwxs[12]='E';
                dwxs[13]='R';
                dwxs[14]='O';
                dwxs[15]='R';
                warn++;
                if(warn==3)          //ÊäÈë´íÎó3´Î£¬±¨¾¯
                {
                   TR0=1;          //¶¨Ê±Æ÷0Æô¶¯
                   moshi=2;          //ģʽ2Æô¶¯±¨¾¯
                   warn=0;          //ÀÛ¼ÆÇåÁã
                }
            }
     }
}
              

void MOD(void)//ÃÜÂëÐ޸ĺ¯Êý//
{
    uchar i;
     if(KeyValue==12)
     {
         for(i=0;i<8;i++)
         {
             if(password[i]!=tempword[i])//¶Ô±ÈÃÜÂë
            {
                key++;
            }
         }           
         if(key==0)
         {
             dwxs[12]='n';
             dwxs[13]='e';
             dwxs[14]='w';
             password[i]=0;
             condition_delete(); 
             tempword[i]=password[i];
         }
    }
}
void delete(void)//Çå³ýº¯Êý//
{
     uchar i;
         for(i=0;i<16;i++)
         {
            dwxs[i]=0x20;     //ÃÜÂë×Ö·ûÇåÁã
         }
         for(i=0;i<8;i++)
         {
            tempword[i]=0;     //ÃÜÂ뻺´æÊý×éÇåÁã
         }
          upxs[12]=0x20;   //SUREÏÔʾÇåÁã
            upxs[13]=0x20;
            upxs[14]=0x20;
            upxs[15]=0x20;
         now=0;                     //ÀàÖ¸Õ븴λ
         key=0;                     //ÃÜÔ¿ÇåÁã
         KeyValue=16;        //¼üÖµ»º´æÇåÁã
}
void condition_delete(void)  //Ìõ¼þÇå³ý
{
     if(KeyValue==11)
     {
        delete();            //°´ÏÂDELE¼üÇå³ýÊý¾Ý
     }
     KeyValue=16;             //¼üÖµ»º´æÇåÁã
}

//********************************************************************************************************************************8
//¶¨Ê±Ä£¿é//
void timer0() interrupt 1    //¶¨Ê±Æ÷0ÓÃÓÚÃÅÁå
{
    switch(moshi)
   {
      case 1:{
            DoorBell=~DoorBell;
            time++;
             if(time<400)             //ÈôÐèÒªÍϳ¤ÉùÒô£¬¿ÉÒÔµ÷Õû 400 ºÍ 800
            {
               TH0=(8192-700)/32;     //700us ¶¨Ê±
               TL0=(8192-700)%32;
            }
             else if(time<800)
            {
               TH0=(8192-1000)/32;    //1ms ¶¨Ê±
               TL0=(8192-1000)%32;
            }
             else
            {
               time=0;                  //¼ÆÊýÇåÁã
               TR0=0;                  //¹Ø±Õ¶¨Ê±Æ÷
               moshi=0;                  //Ìø³öģʽ1
            }
            break;
      }
      case 2:{
               beep=~beep;
                 time++;
               if(time<400)             //ÈôÐèÒªÍϳ¤ÉùÒô£¬¿ÉÒÔµ÷Õû 400
            {
               TH0=(8192-700)/32;     //700us ¶¨Ê±
               TL0=(8192-700)%32;
            }
            else
            {
               time=0;                  //¼ÆÊýÇåÁã
            }
            break;
      }
   }
}
void timer1() interrupt 3      //¶¨Ê±Æ÷1ÓÃÓÚ×Ô¶¯¹ØÃÅ
{  
    TH0=(65536-50000)/256;  
    TL0=(65536-50000)%256;  
    time1++;   
    if(time1==20)//Ò»Ãë  
    {      
      time2++;
      time1=0;  
    } 
}
//**********************************************************************************************************************************
//Ö÷º¯Êý//
void main(void)//Ö÷º¯Êý
{
    TMOD=0x10;                  //0001 0000//¶¨Ê±Æ÷1·½Ê½1£¬¶¨Ê±Æ÷0·½Ê½0
        TH0=(8192-700)/32;         //¶¨Ê±Æ÷0 700us ¶¨Ê±
    TL0=(8192-700)%32;
    TH1=(65536-50000)/256;   //¶¨Ê±Æ÷1 50ms
    TL1=(65536-50000)%256;  
    EA=1;  
    ET0=1;
        ET1=1;
    shuchu=0;                //ÃÅËø³õʼ»¯
        beep=0;                    //¾¯±¨³õʼ»¯
        DoorBell=0;                //ÃÅÁå³õʼ»¯
    lcd_init();                //Òº¾§³õʼ»¯
    while(1)
    {
        KeyDown();            //°´¼ü¼ì²â
        keysend();            //Êý¾Ý´«µÝ
        lcdxianshi();        //ÊäÈëÏÔʾ
        sure();                //ÃÜÂëÈÏÖ¤
        MOD();          //ÃÜÂëÐÞ¸Ä
        condition_delete(); //°´¼üÇå³ý
        if(time2==4)        //ÃÅËø´ò¿ªºó4Ãë¹Ø±Õ
        {
           shuchu=0;
           time2=0;
           delete();        //×Ô¶¯Çå³ý
           TR1=0;             //¹Ø±Õ¶¨Ê±Æ÷1
        }        
    }                
}

```

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^