rxz505260 发表于 2023-1-30 15:14:59

【开源】密码验证 利用指针对DGUS变量操作的C51代码

本帖最后由 rxz505260 于 2023-1-31 10:47 编辑

代码功能:
只做输入密码验证切换到需要的页面
代码中密码写死,可以添加代码从norflash读取和修改密码

#define PASSWORD_INPUT_VP      0x502E      //密码输入框起始地址 双字 502E-502F

u8 compare(u8* input,u8* password,u8 len);//密码比较函数
void Page_Change(u16 PageID);//页面切换函数

void encrypted_login_handler()
{
u8 i=0;
u8 variable_input={0,0,0,0};                                        //密码框输入的数据
u8 Vp_Clear={0,0,0,0};                                                //密码比对后密码框清零数据
u8 passdword={0x07,0x5B,0xCD,0x15};                        //定义密码 123456789 也可从norflash读取
//密码登录******************************************
Read_Dgusii_Vp(PASSWORD_INPUT_VP,variable_input,2);      //读密码框数据到数组variable_input
for (i=0;i<4;i++)
{
    if(variable_input==0) {}                        //密码框数据为0则无效
   else                                                 //密码框数据非0开始比较
    {
      //将输入值和正确密码传入比较函数,传入的为数据指针
      if (compare((u8*)&variable_input,(u8*)&passdword,4)==4)//比对数组的4个数都通过
    {
      Page_Change(14);                                                                        //跳转页面14
      Write_Dgusii_Vp(PASSWORD_INPUT_VP,(u8*)&Vp_Clear,2);                //密码框清零
    }
   else                                                                                                //比对失败
   {
      Page_Change(12);
      Write_Dgusii_Vp(PASSWORD_INPUT_VP,(u8*)&Vp_Clear,2);
      }
   }
}               
}

/*****************************************************************************
函 数 名: u8 compare(u8* input,u8* password,u8 len)
功能描述: 比对输入数据和预设密码值
输入参数: u8* input:传入输入的密码数据指针,u8* password:传入正确的密码指针,u8 len:比较数据的个数
输出参数: 返回比较成功的次数
*****************************************************************************/
u8 compare(u8* input,u8* password,u8 len)//密码比较函数
{
u16 i=0;
while (i<len)
{
if(*input==*password)      //顺序比较输入值和预设密码
i++;
   else
   break;                        //如遇不相等,则退出
input+=1;
password+=1;
}
return i;//返回
}
/*****************************************************************************
函 数 名:void Page_Change(u16 PageID)
功能描述:页面切换
输入参数: u16 PageID 页面号
输出参数: 无

*****************************************************************************/
void Page_Change(u16 PageID)
{
      u8 buf;
      buf = 0x5a;
      buf = 0x01;
      buf = (u8)(PageID >> 8);
      buf = (u8)PageID;
Write_Dgusii_Vp(0x84,buf,2);
      do
      {
                delay_us(500);
                Read_Dgusii_Vp(0x14,buf,2);
      }while(*(u16*)buf!=PageID);
      buf = 0;
      buf = 0;
      buf = 0;
      buf = 0;
      Write_Dgusii_Vp(0x16,buf,2);
}

Hadsame 发表于 2023-1-31 10:03:18

学习学习

lghword 发表于 2023-6-8 11:49:53

你好楼主,有对应的整体工程文件吗,GUI+C 可以发我吗,1021315914@qq.com,谢谢楼主

helloworld 发表于 2023-6-8 22:15:05

楼主把核心业务逻辑贴出来了,赞赞赞

ohh 发表于 2023-6-29 10:18:17


你好楼主,有对应的整体工程文件吗,GUI+C 可以发我吗,1663782879@qq.com,谢谢楼主

zzs999k 发表于 2023-6-29 10:21:46

学习下楼主的核心代码,赞

海东占宇 发表于 2023-6-30 08:59:32

谢谢楼主。目前开发的项目正需要。学习了。
页: [1]
查看完整版本: 【开源】密码验证 利用指针对DGUS变量操作的C51代码