📄 manage.bak
字号:
}
while(1)
{
LcdDisplay(32,40,"新 密 码:",1);
LcdDisplay(48,40,"重复密码:",1);
InitLen[0]=0;
key=GetInt(32,120,0,8,1,InitLen);//输入新密码
if(InitLen[0]==K_TC)return;
InitLen[0]=0;
pwd.dat=GetInt(48,120,0,8,1,InitLen);//重新输入新密码
if(InitLen[0]==K_TC)return;
if(key==pwd.dat)break;
Hint(16,0,"两次输入不一致,重新输入",3);
Beep(400);
}
I2cWrite(us1,4,pwd.str);
Hint(16,64,"修改成功!",3);
}
void SalerEdit(uchar flag)
{
uchar i,InitLen[2];
uint us1=0;
ulong key=0;
gyt4 mydat;
switch(flag)
{
case 1: if(VerifyBossPwd()!=1)break;
while(1)
{
LcdDisplay(0,56,"增加营业员",3);
us1=InputSalerNo();
if(us1==0)return;
I2cRead(us1,4,mydat.str);
if(mydat.dat!=0)
{
Hint(16,16,"本营业员已经设置!",3);
continue;
}
LcdDisplay(32,56,"密 码:",1);
LcdDisplay(48,56,"重 复:",1);
InitLen[0]=0;
key=GetInt(32,120,0,8,1,InitLen);//输入密码
if(InitLen[0]==K_TC)return;
InitLen[0]=0;
mydat.dat=GetInt(48,120,0,8,1,InitLen);//重复输入密码
if(InitLen[0]==K_TC)return;
if(key==0)
{
Hint(16,32,"密码不能为0",3);
continue;
}
if(key==mydat.dat)break;
Hint(16,0,"两次输入不一致,重新输入",3);
Beep(400);
}
I2cWrite(us1,4,mydat.str);//写数据
I2cRead(SalerNum,1,&i);
i++;
I2cWrite(SalerNum,1,&i);
Hint(16,56,"增加成功!",3);
break;
case 2: I2cRead(SalerNum,1,&i);
if(i==0)
{
Hint(16,32,"没有设置营业员!",3);
break;
}
if(VerifyBossPwd()!=1)break;
LcdDisplay(0,56,"删除营业员",3);
us1=InputSalerNo();
if(us1==0)return;
I2cRead(us1,4,mydat.str);
if(mydat.dat==0)
{
Hint(16,32,"没有这个营业员!",3);
break;
}
mydat.dat=0;
I2cWrite(us1,4,mydat.str);
i--;
I2cWrite(SalerNum,1,&i);
Hint(16,64,"删除成功!",3);
break;
case 3:
LcdDisplay(0,32,"修改营业员密码",3);
us1=InputSalerNo();
if(us1==0)return;
I2cRead(us1,4,mydat.str);
if(mydat.dat==0)
{
Hint(16,32,"没有这个营业员!",3);
break;
}
ModifyPwd(us1);
break;
case 4: LcdDisplay(0,16,"设置或修改管理员密码",3);
ModifyPwd(0);
break;
default :break;
}
}
/*-------------------------------------------------------------------------------------
营业员管理
--------------------------------------------------------------------------------------*/
void SalerManage()
{
uchar i=1,InitVal[3];
while(1)
{
WindowsSet(4);
strcpy(&WinHint[0][1],"1.增加营业员");
strcpy(&WinHint[1][1],"2.删除营业员");
strcpy(&WinHint[2][1],"3.修改营业员密码");
strcpy(&WinHint[3][1],"4.修改管理员密码");
InitVal[0]=K_TC;
InitVal[1]=K_HJ;
InitVal[2]=0;
i=Windows(i,0,InitVal);
if(InitVal[0]==K_TC)return;
SalerEdit(i);
}
}
/*-----------------------------------------------------------------------------------
营业员登陆
-----------------------------------------------------------------------------------*/
uchar Login()
{//首先应该判断营业员数量,如果为零则不登陆
uchar i,InitLen[2];
ulong pwd;
uint us1;
gyt4 tp;
I2cRead(SalerNum,1,&i);
if(i==0)return 1; //没有增加营业员,不需要登陆
InitLen[0]=0;
while(1)
{
LcdDisplay(0,56,"营业员登陆",3);//清屏后再显示
LcdDisplay(32,56,"密 码:",1);
us1=InputSalerNo();
if(us1==0)return 0;
I2cRead(us1,4,tp.str);//读取密码
if(tp.dat==0)
{
Hint(48,40,"没有这个营业员!",1);
continue;
}
InitLen[0]=0;
pwd=GetInt(32,120,0,8,1,InitLen);//输入密码
if(InitLen[0]==K_TC || InitLen[0]==0xFF)return 0;
if(tp.dat==pwd)return 1;//密码正确
Hint(48,16,"密码错误!请重新输入",1);
}
}
//-------------------------------------------------------------------------------
void Txd_9600_19200(uchar flag,uint Len,uchar *str)
{
if(flag)
{
COM1CS;
UARTC;
if(BautRateFg == Bps19200)
UART1_Mod1_Timer2_19200;
else
UART1_Mod1_Timer1_9600;
}
EA=0;
TxdNum=0;
TxdLen=Len;
while(TxdNum<TxdLen)
{
SBUF2 = str[TxdNum];
while((SCON2 & 0x02)==0);
SCON2 &= 0xFC;
TxdNum++;
}
}
uchar Rxd_9600_19200(uchar flag,uint Len,uchar *str)
{
uchar Val=0;
ulong i=0;
if(flag)
{
COM1CS;
UARTC;
if(BautRateFg == Bps19200)
UART1_Mod1_Timer2_19200;
else
UART1_Mod1_Timer1_9600;
}
RxdNum=0;
RxdLen=Len;
while(RxdNum<RxdLen)
{
i=0;
while((SCON2 & 0x01)==0)
{
i++;
if(GetKey()==K_TC) return K_TC;
if(i>60000)
return 0;
}
SCON2 &= 0xFC;
str[RxdNum]=SBUF2;
RxdNum++;
}
return 1;
}
//---------------------------------------------------------------------------
// 联机函数
//return 0 : CrC Error
//return 1 : Crc = CS OK
//return 2 : Receive Overtime
//--------------------------------------------------------------------------
uchar Linking()
{
uint CrC,CS;
while(1)
{
if(Rxd_9600_19200(1,7,RxdBuf)==K_TC) return 0;
if( RxdBuf[0]==Com0 && RxdBuf[1]==Com1 && RxdBuf[2]==0x01
&& RxdBuf[3]==0x00 && RxdBuf[4]==0x05)
{
CS = 0;
CS = RxdBuf[5];
CS <<= 8;
CS |= RxdBuf[6];
CrC = CRC16(&RxdBuf[0],5);
#if Debug
if(CS == CrC)
#endif
return 1;
#if Debug
else
return 0;
#endif
}
}
// return 2;
}
//-------------------------------------------------------------------------
// 接收商品信息下载与项目信息下载与字库下载等
//return 0 : Command Error
//return 1 : OK
//return 2 : Receive Overtime
//return 3 : CrC Error
//-------------------------------------------------------------------------
uchar DownDispose(uchar *len,uchar *Command_Type,uchar *Datanum)
{
uchar n,CrC,CS;
while(1)
{
if(!Rxd_9600_19200(1,5,RxdBuf)) //Receive Command Head and data len
return 2; //Receive Overtime
if(RxdBuf[0]==Com0 && RxdBuf[1]==Com1
&& (RxdBuf[2]==SPDown || RxdBuf[2]==XMDown || RxdBuf[2]==DSPDown
|| RxdBuf[2]==DXMDown || RxdBuf[2]==ZKXW || RxdBuf[2]==ZKZW
|| RxdBuf[2]==DownTC || RxdBuf[2]==BaudrateSet))
{
// n = RxdBuf[4]-5+2; //Contioue Receive other data//长度不包括本身
n = RxdBuf[4]-3; //Contioue Receive other data//长度不包括本身
if(!Rxd_9600_19200(0,n,&RxdBuf[5]))
return 2;
// crcstrlen=n(接收不函头的长度)-2(CRC长度)+5(头数据长度);
CrC = CRC16(&RxdBuf[0],n+3); //n+3 = n-2+5 2 : 接收时的CRC,在计算时不能参与
CS = 0;
CS = RxdBuf[n+3];
CS <<= 8;
CS |= RxdBuf[n+4];
#if Debug
if(CrC == CS)
#endif
{
*len = n-2;
*Command_Type = RxdBuf[2];
*Datanum = RxdBuf[3];
return 1;
}
#if Debug
else
#endif
return 3;
}
return 0;
}
}
//-------------------------------------------------------------------------
// 正确执行的应答
//datanum : 已接收到的数据包
//len : 接收的数据长度
//Redat : 接收的数据
//---------------------------------------------------------------------------
void ACK(uchar datanum,uchar len,uchar *Redat)
{
uchar i;
uint CrC;
TxdBuf[0]='O';
TxdBuf[1]='K';
TxdBuf[2]=datanum;
// if(len != 0) //联机时专用
TxdBuf[3]=len+4; //命令长度不包函CRC
// else
// TxdBuf[3] = 4;
for(i=0;i<len;i++)
TxdBuf[4+i]=Redat[i];
CrC = CRC16(TxdBuf,len+4);
TxdBuf[len+4] = CrC>>8;
TxdBuf[len+5] = CrC;
Txd_9600_19200(1,len+6,TxdBuf);
}
//--------------------------------------------------------------------------
// 不能正确执行的应答
//ErrorCode : 错误代码
//---------------------------------------------------------------------------
void NotACK(uchar ErrorCode)
{
uint CrC;
TxdBuf[0]='E';
TxdBuf[1]='R';
TxdBuf[2]=0;
TxdBuf[3]=5;
TxdBuf[4]=ErrorCode;
CrC = CRC16(TxdBuf,5);
TxdBuf[5]=CrC>>8;
TxdBuf[6]=CrC;
Txd_9600_19200(1,7,TxdBuf);
}
//--------------------------------------------------------------------------
// 请求下一包数据
//Redatanum : 接收的数据包序号
//---------------------------------------------------------------------------
void ApplyNexDat(uchar Redatanum)
{
uint CrC;
TxdBuf[0]='N';
TxdBuf[1]='P';
TxdBuf[2]=0;
TxdBuf[3]=5;
TxdBuf[4]=Redatanum;
CrC = CRC16(TxdBuf,5);
TxdBuf[5]=CrC>>8;
TxdBuf[6]=CrC;
Txd_9600_19200(1,7,TxdBuf);
}
//--------------------------------------------------------------------------
// 请求继续等待
//---------------------------------------------------------------------------
//void ApplyWait()
//{
// uint CrC;
// TxdBuf[0]='W';
// TxdBuf[1]='T';
// TxdBuf[2]=0;
// TxdBuf[3]=5;
//
// CrC = CRC16(TxdBuf,4);
//
// TxdBuf[4]=CrC>>8;
// TxdBuf[5]=CrC;
// Txd_9600_19200(1,6,TxdBuf);
//}
//--------------------------------------------------------------------------
// 退出请求命令
//---------------------------------------------------------------------------
//void Exit()
//{
// uint CrC;
// TxdBuf[0]='E';
// TxdBuf[1]='X';
// TxdBuf[2]=0;
// TxdBuf[3]=5;
//
// CrC = CRC16(TxdBuf,4);
//
// TxdBuf[4]=CrC>>8;
// TxdBuf[5]=CrC;
// Txd_9600_19200(1,6,TxdBuf);
//}
uchar LinkChuLi()
{
uchar LinkFg;
LinkFg = Linking();
if(LinkFg == 0) //联机失败
{
// ReHint("-^|^-","联机失败.");
// NotACK(LinkER);
return 0;
}
// if(LinkFg == 2)
// {
// ReHint("-^||^-","联机超时.");
// NotACK(Overtime);
// return 0;
// }
ACK(0,0,&LinkFg); //联机成功
return 1;
}
//void InitSerial()
//{
// COM1CS;
// UARTC;
// UART1_Mod1_Timer1_9600;
//}
//---------------------------------------------------------------------------
// 下载
//---------------------------------------------------------------------------
void WareDown()
{
uchar EraseFg,ReFg,i;
uchar Len,Stype=0,Type,Bao;
ulong addr,num;//商品信息地址:WareAdr//项目信息地址ItemAdr
// InitSerial();
ReHint("正在联机....","请稍候/");
if(!LinkChuLi())
return;
ReHint("联机成功.","请下载信息/");
num = 0;
EraseFg = 1;
while(1)
{
ReFg = DownDispose(&Len,&Type,&Bao);
if(ReFg == 0) //命令头错误
{
NotACK(ComandEr);
// return;
}
#if Debug
// if(ReFg == 2)
// NotACK(ReceiveOver); //接收超时
#endif
if(ReFg == 3)
NotACK(CrCEr);
if(ReFg == 1)
{
if(Stype!=Type) for(i=0;i<0xff;i++) TxdBuf[i]=RxdBuf[i];
switch(Type)
{
case SPDown: //全部商品信息下载
case DSPDown: //单个商品信息下载
if(Stype != Type)
{
ReHint(" ^_^ ","正在下载商品信息/"); //如果本次接收的命令不等于上次接收的命令则说明
addr = WareAdr; //是下一个命令
}
break;
case XMDown: //全部项目信息下载
case DXMDown: //单个项目信息下载
if(Stype != Type)
{
ReHint(" ^_^ ","正在下载项目信息/");
addr = ItemAdr;
}
break;
case ZKXW: //西方字库下载
if(Stype != Type)
{
ReHint(" ^_^ ","正在下载GB18030字库/");
// ReHint(" ^_^ ","正在下载西文字库/");
addr = xWStartadr;
}
break;
case ZKZW: //中文字库下载
if(Stype != Type)
{
ReHint(" ^_^ ","正在下载中文字库/");
addr = zWStartadr;
}
break;
case BaudrateSet: //波特率设置
ACK(Bao,0,&RxdBuf[5]);
if(RxdBuf[5] == Bps19200)
{
ReHint("波特率设置成功.","现在通讯速率:19200Bps/");
BautRateFg = Bps19200;
}
else
{
ReHint("波特率设置成功.","现在通讯速率:9600Bps/");
BautRateFg = Bps9600;
}
break;
case DownTC:return; //退出
default:return;
}
if(Stype!=Type) for(i=0;i<0xff;i++) RxdBuf[i]=TxdBuf[i];
if(Type != BaudrateSet)
{
// ACK(Bao,0,&RxdBuf[5]);
Stype=Type; //保存现在的命令类型
StartDown(Type,addr,&EraseFg,Len);
addr += Len;
if(Bao != 0)
{
ApplyNexDat(Bao);
}
else
ReHint(" ^_^ ","下载完成!/");
}
}
}
}
uchar StartDown(uchar type,ulong address,uchar *EraseFlag,uchar len)
{
uchar chip;
uint offset;
uchar *poin;
poin = &RxdBuf[5];
if(type == DSPDown || type == DXMDown)
{
chip = FlashDat;
offset = 0;
offset = RxdBuf[5];
offset <<= 8;
offset |= RxdBuf[6];
if(type == DSPDown)
address = WareAdr+(offset-1)*SPlen;
if(type == DXMDown)
address = ItemAdr+(offset-1)*XMlen;
poin = &RxdBuf[7];
len -= 2;
}
if(type == ZKXW || type == ZKZW)
{
chip = Flashziku;
if(*EraseFlag)
{
*EraseFlag = 0;
#if Erasetest //测试时使用,如果不擦除则将些标志置为 0
SerialFlashBulkErase(chip);
#endif
}
}
if(type == SPDown || type == XMDown)
{
chip = FlashDat;
}
#if write //如果不对Flash进行写操作则将些标志置为 0
SerialFlashWrite(chip,address,len,poin);
#endif
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -