找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1881|回复: 1
收起左侧

求大神帮我看下代码怎么改

[复制链接]
ID:98832 发表于 2015-12-10 18:23 | 显示全部楼层 |阅读模式
#include <reg51.H>
#include <intrins.h>
#include "lcd.h"
#include "key.h"
#include "delay.h"
#include "eeprom.h"
void int0(void);
unsigned char password[6]/*={0x01,0x02,0x03,0x04,0x05,0x06}*/;
unsigned char password1[6];
unsigned char code aa[]="Password   ";
unsigned char code gg[]="New";
unsigned char code bb[]="ERROR  ";
unsigned char code cc[]="OK      ";
unsigned char code dd[]="       ";
unsigned char code ee[]="Next   ";
unsigned char code ff[]="success ";
unsigned char keydata;
main()
{
    unsigned char i,j,k,l,m,n,o,a1;
    for(i=0;i<6;i++)
    {
    Write_IIC(i,password[ i]);
    }
    init();//LCD初始化
    int0();
    P3_6=0;
    P3_7=0;
    P1=0x0f;
    LCD_Write_String(0,0,aa);
    LCD_Write_String(1,1,dd);
    write_com(0xc0+1);
    while(1)
    {
start: LCD_Write_String(0,0,aa);
       LCD_Write_String(1,1,dd);
       write_com(0xc0+1);

       while(1)
       {
           if((0<keydata)&&(4>keydata)||(4<keydata)&&(8>keydata)||(8<keydata)&&(12>keydata)||keydata==14)
                  //在0-9之间的数字通过
           {   
              password=keydata;//键盘值进行保存
              keydata=0;        //把键盘值置其它值,不被其它利用,以一样
              i++;
              write_data('*');  //在LCD上显示*这字符代表输入了一个密码      
              if(i==6)          //这里限制了六位密码
              {
                  i=0;
                  goto panduan;
              }

           }
           if(keydata==33)      //确定进入密码比较
           {
              keydata=0;
panduan:      i=0;
              for(j=0;j<6;j++)
              {
                  l+=password[j];
                  k+=Random_Read(j);
              }
              if(l!=k)      //密码不同进行处理
              {
                  l=0;
                  k=0;
                  LCD_Write_String(0,0,bb);
                  DelayMs(1000);
                  a1+=1;
                  if(a1==2){while(1)P3_7=1;P3_6=0;}//两次错误发出报警
                  goto start;               //第二次输入密码
              }
              if(l==k)   //密码对了,进入运行状态,这里绿灯代表该状态
              {
                   l=0;
                   k=0;
                   a1=0;
                   P3_6=1;
                   P3_7=0;
                   LCD_Write_String(0,0,cc);
                   LCD_Write_String(1,1,dd);
                   if(o==1)
                   {
                    o=0;
                    LCD_Write_String(0,0,gg);
                    LCD_Write_String(4,0,aa);
                    LCD_Write_String(1,1,dd);
                    write_com(0xc0+1);
                    goto text2;
                   }
                   goto yingxing;        //跳到下面函数中,yingxing里
              }
           }

       }
yingxing:while(1)
       {
           if(keydata==4)    //锁定功能
           {
              P3_6=0;
              goto start;
           }
           if(keydata==15)      //修改密码
           {   
              o++;
              if(o==1) goto start;
text2:        keydata=0;
              while(1)
              {
                  if((0<keydata)&&(4>keydata)||(4<keydata)&&(8>keydata)||(8<keydata)&&(12>keydata)||keydata==14)
                         //上面表达式0-9之间的数字通过
                  {   
                     password[m]=keydata;  //读取键盘值
                     keydata=0;
                     m++;
                     write_data('*');         
                     if(m==6)           //到密码输入到六位的时候进行判断是否再输入,或者判断前后两次密码是否一致
                     {
                         m=0;
                         n++;
                         if(n==2)goto panduan1;  //输入第二次的时候进行前后两次密码进判断
                         for(i=0;i<6;i++)      //储存前一次密码
                         {
                            password1=password[ i];
                         }
                         LCD_Write_String(1,1,dd);
                         LCD_Write_String(0,0,ee);
                         DelayMs(1000);
                         LCD_Write_String(0,0,aa);
                         write_com(0xc0+1);  
                     }   

                   }
                  if(keydata==13)     //重新输入改密
                   {
text:                 m=0;
                     n=0;
                     LCD_Write_String(1,1,dd);
                     write_com(0xc0+1);

                   }
                  if(keydata==33)    //退出不改密码
                  {
out:                 m=0;
                     n=0;
                     o=0;
                     LCD_Write_String(0,0,cc);
                     LCD_Write_String(1,1,dd);
                     goto yingxing;
                  }
                  if(keydata==33)
                  {
                     keydata=0;
panduan1:            for(j=0;j<6;j++)//第一次与第二次密码比较
                     {
                         l+=password[j];
                         k+=password1[j];
                     }
                     if(l!=k)      //第一次与第二次密码输入错误
                     {
                         l=0;
                         k=0;
                         LCD_Write_String(0,0,bb);
                         DelayMs(1000);
                         LCD_Write_String(0,0,aa);
                         goto text;
                     }
                      else
                     {
                         for(i=0;i<6;i++)
                         {
                            Write_IIC(i,password[ i]);
                         }
                           LCD_Write_String(0,0,ff);
                           DelayMs(1000);
                           goto out;   
                     }

                  }

              }
           }   
       }   
    }      
}
void int0(void)
{
    EA=1;
    EX0=1;
    IT0=1;
}
void ISR_INT0(void) interrupt 0
{
    keydata=key_scan();      
}
错误是嵌套太多,谢谢啦

回复

使用道具 举报

ID:102817 发表于 2016-1-11 23:22 | 显示全部楼层
自己先仔细检查一下再说吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表