单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 531|回复: 7
收起左侧

单片机数据存储出问题

[复制链接]
rrrlll 发表于 2017-10-16 20:40 | 显示全部楼层 |阅读模式
我做的是密码锁,删除数据不能全部删除,会有一位乱的数据遗留,这是怎么回事啊
以下是我的程序
  1. #include<reg52.h>
  2. #include"1602.h"
  3. #include"delay.h"
  4. #include"keyboard.h"
  5. sbit LED1=P2^0;
  6. sbit LED2=P2^1;
  7. sbit beep=P1^5;
  8. unsigned char data password[]={1,2,3,4,5,6};
  9. void sound()
  10. {
  11. int t=2000;
  12. while(t--)
  13. {  
  14.     beep=~beep;
  15.     delay(50);
  16. }
  17. }
  18. /*------------------------------------------------
  19.                     Ö÷³ÌÐò
  20. ------------------------------------------------*/
  21. main()
  22. {
  23. unsigned char num,i,j;                  
  24. unsigned char passwordtemp[6],inputtimes;      
  25. unsigned char passwordlength,PLEN;     
  26. bit Flag;

  27. PLEN=sizeof(password)/sizeof(password[0]);

  28. LCD_Init();      
  29. DelayMs(10);        
  30. LCD_Clear();      
  31. LCD_Write_String(0,0,"  Welcome! ");   
  32. LCD_Write_String(0,1,"Input password!");
  33.   while (1)        
  34.   {
  35.     num=KeyPro();
  36.     if(num!=0xff)  
  37.    {
  38.     if(i==0)   
  39.    LCD_Write_String(0,1,"                ");
  40.    if(i<6)
  41.    {
  42.        passwordtemp[i]=num;
  43.        LCD_Write_Char(i,1,num+'0');
  44.    }
  45.   if(num=='A')
  46.   {
  47.     i=0;
  48.     LCD_Clear();
  49.     LCD_Init();
  50.         LCD_Write_Char(i,1,num+'0');
  51.      passwordtemp[i]=0;
  52.      }
  53.    i++;   
  54.   if(i==7)
  55.    {
  56.       passwordlength=i-1;
  57.    i=0;
  58.    if(passwordlength==PLEN)
  59.      {
  60.       Flag=1;
  61.       for(j=0;j<PLEN;j++)
  62.          Flag=Flag&&(passwordtemp[j]==password[j]);
  63.          }
  64.       if(Flag)
  65.     {
  66.        LCD_Write_String(0,1,"          ");
  67.         LCD_Write_String(0,1,"   Lock open!");
  68.      LED1=0;
  69.      LED2=0;
  70.         inputtimes=0;
  71.         Flag=0;     
  72.   }
  73.    else
  74.      {
  75.     LCD_Write_String(0,1,"          ");
  76.     LCD_Write_String(0,1,"  try again!!!");
  77.     sound();
  78.     inputtimes++;
  79.     if(inputtimes==3)
  80.     {
  81.        LCD_Write_String(0,1,"                ");
  82.        LCD_Write_String(0,1,"Wrong 3 times!");
  83.        while(1);
  84.     }
  85.   }
  86.    }
  87.     }
  88.   }
  89. }
复制代码

回复

使用道具 举报

yzwzfyz 发表于 2017-10-17 19:44 | 显示全部楼层
删除与显示构思不好!
删除只需在记录区做个标记,显示时看到这个标记就不显示(或显示一个提示信息)。你看这个建议如何?
回复

使用道具 举报

 楼主| rrrlll 发表于 2017-10-17 21:10 | 显示全部楼层
if(num=='B')                 {                         i=-2;                         LCD_Clear();                         LCD_Init();                                   i++;                         if(i==0)                 LCD_Write_String(0,1,"                ");                         if(i<6)                         {                            LCD_Write_Data(password[i]);                                  password[i]=num;                                  LCD_Write_Char(i,1,num+'0');                         }                         if(i==7)                         {                                                  LCD_Write_String(0,0," new password         ");         LCD_Write_String(0,1," ");                                   LCD_Write_Char(i,1,num+'0');                                   Flag=1;       }
回复

使用道具 举报

 楼主| rrrlll 发表于 2017-10-17 21:11 | 显示全部楼层
删除的程序可以用吗,我之前的问题已经解决了
if(num=='B')
                {
                        i=-2;
                        LCD_Clear();
                        LCD_Init();          
                        i++;
                        if(i==0)   
            LCD_Write_String(0,1,"                ");
                        if(i<6)
                        {
                           LCD_Write_Data(password[i]);
                                 password[i]=num;
                                 LCD_Write_Char(i,1,num+'0');
                        }
                        if(i==7)
                        {
                
                                LCD_Write_String(0,0," new password         ");
        LCD_Write_String(0,1," ");
                                 LCD_Write_Char(i,1,num+'0');
                                  Flag=1;
      }
回复

使用道具 举报

zl2168 发表于 2017-10-17 21:14 | 显示全部楼层
你要删除什么数据?是密码锁EPROM中的密码数据吗?
回复

使用道具 举报

 楼主| rrrlll 发表于 2017-10-17 21:28 | 显示全部楼层
修改这里面的数据password[]={1,2,3,4,5,6},一直修改不了,程序好像没有进去执行
回复

使用道具 举报

usb123 发表于 2017-10-17 22:26 | 显示全部楼层
一般请教别人找问题的程序问题,,你首先要做到一个好的注释,方便别人快速的找到你的问题,你这样发程序,比人还要重头研究一遍

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

zl2168 发表于 2017-10-18 21:08 | 显示全部楼层
rrrlll 发表于 2017-10-17 21:28
修改这里面的数据password[]={1,2,3,4,5,6},一直修改不了,程序好像没有进去执行

在定义password[]时不要赋值,在程序运行后在赋值和修改。
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机.

Powered by 单片机教程网

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