|
楼主 |
发表于 2024-10-23 13:31:17
|
显示全部楼层
代码贴在这里啦,大概逻辑就这样,后续还有修改很多
#include "sys.h"
int main()
{
u8 Variable_Addr[24]={0}; //traditional rules ,not rule C99 (传统的用法必须在一个代码块的开始处声明变量,不能像C99那样)
u8 Key_Addr[4]={0};
u8 i=0; //
u8 Switch_Page[4]={0x5a,0x01,0x00,0x00}; //页面切换07密码正确页面 02错误页面
u8 Vp_Clear[24]={0};//清空密码改写框1、2和重建密码按键返回按键
u8 Supervisor_Password[8]={0x57,0x61,0x73,0x79,0x32,0x35,0x30,0x31};//=Wasy2501 赋值超级密码
u8 Read_Flash[8]={0x5a,0x00,0x10,0x08,0x10,0x08,0x00,0x04}; //数据库读操作
u8 Write_Flash[8]={0xa5,0x00,0x10,0x08,0x50,0x0A,0x00,0x04}; //数据库写操作
u8 RW_Flash_Flag[2]={0};
u8 RW_Flash_Value[8]={0};
sys_init();
// *************密码登录***********************
sys_read_vp(0x5100,Key_Addr,2); //读密码框是否为0,如果为0,
if((Key_Addr[0]==0)&&(Key_Addr[1]==01))
{
sys_read_vp(0x5002,Variable_Addr,4);
for (i=0;i<8;i++)
{
if(Variable_Addr==0) //
{
}
else //
{
sys_write_vp(0x0008,Read_Flash,4); //读5a a5 0b 82 0008 5a00 1008 1008 0002 读数据库参考应用文档系统变量接口表格。
sys_read_vp(0x1008,RW_Flash_Value,4);
do
{
sys_read_vp(0x0008,RW_Flash_Flag,1); //将0x0008里的值读到RW_Flash_Flag,看CPU有没有清零
}
while(RW_Flash_Flag[0]==0x5A); //判断falsh操作是否完成 如果是5A说明没有操作完成,就等完成之后再进行后面的
if (tests(Variable_Addr,RW_Flash_Value,8)==0)
{
Switch_Page[3]=3;
sys_write_vp(0x0084,Switch_Page,2);
sys_write_vp(0x5002,Vp_Clear,4); // 清空密登录框4个地址就行
sys_write_vp(0x5100,Vp_Clear,1); // 清空按键值
}
else //先比较是否为万能密码Wasy2501
{
if (tests(Variable_Addr,Supervisor_Password,8)==0)
{
Switch_Page[3]=3;
sys_write_vp(0x0084,Switch_Page,2);
sys_write_vp(0x5002,Vp_Clear,4); // 清空密登录框4个地址就行
sys_write_vp(0x5100,Vp_Clear,1); // 清空按键值
}
else
{
Switch_Page[3]=8;
sys_write_vp(0x0084,Switch_Page,2);
sys_write_vp(0x5002,Vp_Clear,4); // 清空密登录框4个地址就行
sys_write_vp(0x5100,Vp_Clear,1); // 清空按键值
}
}
}
}
}
// *************密码改写***********************
sys_read_vp(0x5012,Variable_Addr,2); //读重建密码按钮是否按下如果按下了,说明进行了密码改写操作,
if((Variable_Addr[0]==0)&&(Variable_Addr[1]==0x01))// 键值为0001
{
sys_read_vp(0x5006,Variable_Addr,12); //读旧密码框 输入密码框1、2 两个长整数地址12个字,是否为0,如果为0不执行
for (i=0;i<24;i++)
{
if(Variable_Addr==0) //
{
sys_write_vp(0x5012,Vp_Clear,2); // 清空按键值 ,为啥是2,后面试着给1试试
}
else
{
if (tests(Variable_Addr,Supervisor_Password,8)==0)
{
if (tests(Variable_Addr+8,Variable_Addr+16,8)==0) //比较密码改写框1、2是否相等,相等将密码保存到数据库,并跳转提示页面
{
sys_write_vp(0x0008,Write_Flash,4); //写5a a5 0b 82 0008 a5 00 1008 1002 0004
do
{
sys_read_vp(0x0008,RW_Flash_Flag,1);
}
while(RW_Flash_Flag[0]==0xa5);
Switch_Page[3]=1;
sys_write_vp(0x0084,Switch_Page,2);
sys_write_vp(0x5006,Vp_Clear,12); // 清空密登录框 即5006H-5011H 12个字
sys_write_vp(0x5012,Vp_Clear,2); // 清空按键值
break;
}
else //比较密码改写框1、2是否相等,不相等跳转提示页面
{
Switch_Page[3]=8;
sys_write_vp(0x0084,Switch_Page,2);
sys_write_vp(0x5006,Vp_Clear,12); // 清空密登录框 即5006H-5011H 12个字
sys_write_vp(0x5012,Vp_Clear,2); // 清空按键值
}
}
else //旧密码不对跳转提示页面
{
Switch_Page[3]=8;
sys_write_vp(0x0084,Switch_Page,2);
sys_write_vp(0x5006,Vp_Clear,12); // 清空密登录框 即5006H-5011H 12个字
sys_write_vp(0x5012,Vp_Clear,2); // 清空按键值
}
}
}
}
return 0;
}
int tests(u8* buf,u8* buf1,u8 len)
{
u8 i=0;
for(i=0;i<len;i++)
{
if(buf!=buf1[1])
{
return 1;
}
}
return 0;
} |
|