找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1281|回复: 0
打印 上一主题 下一主题
收起左侧

密码锁

[复制链接]
跳转到指定楼层
楼主
ID:270029 发表于 2018-1-2 17:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//-----------------------------------------------------------------
//原始程序中相邻两位密码不能相同.
//本压缩包中的HEX由修改后的新程序编译生成,允许输入任意密码.
//-----------------------------------------------------------------
//实训100例中本例内的main函数可用以下代码替换.
//改动的主要是main函数中while循环内的代码.
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
   uchar i = 0;
   uchar IIC_Password[10];
   uchar IS_Valid_User = 0;
   P0 = 0xFF;     
   P1 = 0xFF;
   P2 = 0xFF;  

   TMOD = 0x02;                     //T0设置为8位自动重装模式
   TH0 = 175;                  
   TL0 = 175;
   TR0 = 1;                         //启动T0

   DelayMS(10);               
   LCD_Init();                      //初始化LCD  

   IIC_24C04_Init();                //初始化24C04  

   Display_String(Title_Text,0x00); //在第1行显示标题

   //24C04的内容已由初始化BIN文件导入
   //将24C04中预先写入的密码读入pass
   RecString(0xa0, 0 , IIC_Password, 6);   
   IIC_Password[6] = '\0';

   while(1)
   {
      P1 = 0xF0;
      if(P1 != 0xF0) KeyNo = Keys_Scan();  //扫描键盘获取键序号KeyNo

      switch ( KeyNo )
      {
           case 0:  case 1: case 2: case 3: case 4:
           case 5:  case 6: case 7: case 8: case 9:

                   if ( i<= 5 )             //密码限制在6位以内
                   {
                        //如果i为0则执行一次清屏
                        if (i ==0) Display_String("                ",0x40);

                        UserPassword[i] = KeyNo + '0';
                        UserPassword[i+1] = '\0';

                        DSY_BUFFER[i] = '*';
                        DSY_BUFFER[i+1] = '\0';

                        Display_String(DSY_BUFFER,0x40);

                        i++;
                    }
                    break;

           case 10: //按A键开锁
                    if (strcmp(UserPassword,IIC_Password) == 0)
                    {
                       LED_OPEN = 0;  //点亮LED
                       Clear_Password();
                       Display_String("Unlock OK!      ",0x40);
                       IS_Valid_User = 1;
                    }
                    else
                    {
                       LED_OPEN =1;   //关闭LED
                       Clear_Password();
                       Display_String("ERROR !         ",0x40);
                       IS_Valid_User = 0;
                    }
                    i = 0;
                    break;

           case 11: //按B键上锁
                    LED_OPEN =1;   
                    Clear_Password();
                    Display_String(Title_Text,0x00);
                    Display_String("                ",0x40);
                    i = 0;                        
                    IS_Valid_User = 0;               
                    break;

           case 12: //按C键设置新密码
                    //如果是合法用户则提示输入新密码
                    if ( !IS_Valid_User ) Display_String("No rights !",0x40);
                    else
                    {
                       i = 0;
                       Display_String("New Password:   ",0x00);
                       Display_String("                ",0x40);
                     }

                    break;                        

           case 13: //按D键保存新密码
                    if ( !IS_Valid_User ) Display_String("No rights !",0x40);
                    else
                    {
                       SendString(0xa0, 0 , UserPassword, 6);

                       //重新读入刚写的密码
                       RecString(0xa0, 0 , IIC_Password, 6);   
                       IIC_Password[6] = '\0';                           

                       i = 0;
                       Display_String(Title_Text,0x00);
                       Display_String("Password Saved! ",0x40);
                     }               

                    break;                        

           case 14: //按E键消除所有输入
                    i = 0;
                    Clear_Password();
                    Display_String("                ",0x40);            
       }

       Beep();         
       DelayMS(100);
       P1= 0xF0;
       while (P1 != 0xF0);    //如果有键未释放则等待
       while (P1 == 0xF0);    //如果没有再次按下按键则等待
   }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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