📄 lcd菜单.txt
字号:
void isr_ex0(void) interrupt 0 using 1
{
b_KeyInt=1;
//
cTemp_ex0=0xff;
//
DelayMs(20);
ReadyForKey();
cTemp_ex0=XBYTE[Addr_Key];
//
cTemp_ex0=cTemp_ex0&0x3f;
switch(cTemp_ex0)
{
case 0x3e://第一行
NowKey=0x10;
break;
case 0x3d://第二行
NowKey=0x20;
break;
case 0x3b://第三行
NowKey=0x30;
break;
case 0x37://第四行
NowKey=0x40;
break;
case 0x2f://第五行
NowKey=0x50;
break;
case 0x1f://第六行
NowKey=0x60;
break;
default:
NowKey=0x00;
break;
}
//
KEYROW1=0;
KEYROW2=1;
KEYROW3=1;
cTemp_ex0=XBYTE[Addr_Key];
//
cTemp_ex0&=0x3f;
if(cTemp_ex0!=0x3f)
{
NowKey=NowKey|0x01;
}
else
{
KEYROW1=1;
KEYROW2=0;
KEYROW3=1;
cTemp_ex0=XBYTE[Addr_Key];
//
cTemp_ex0&=0x3f;
if(cTemp_ex0!=0x3f)
{
NowKey=NowKey|0x02;
}
else
{
KEYROW1=1;
KEYROW2=1;
KEYROW3=0;
cTemp_ex0=XBYTE[Addr_Key];
cTemp_ex0&=0x3f;
if(cTemp_ex0!=0x3f)
{
NowKey=NowKey|0x03;
}
else
{
BitValue=XBYTE[Addr_Key];
if(!bPowerOff)
{
NowKey=0x71;
}
else
{
NowKey=0x00;
}
}
}
}
//
do
{
DelayMs(100);
}while(!KEYINT);
//
IE0=0;//清外中断0请求
}
//
void isr_t0(void) interrupt 1 using 2
{
TL0=TL0data;
TH0=TH0data;
iT0_1S+=20;//因为定时器的定时为20Ms一次
if(iT0_1S>=1000)
{
iT0_1S=0;
b_Arrive1S=1;
}
}
//
void isr_ex1(void) interrupt 2 using 1
{
_nop_();
}
//
void isr_t1(void) interrupt 3 using 2
{
_nop_();
}
//
void isr_ser(void) interrupt 4 using 3
{
if(TI)
{
if((TxNum--)>0)
{
SBUF=Send232Buffer[TxPos++];
}
else
{
TxNum=0;
TxPos=0;
}
//
TI=0;
}
else
{
RI=0;
RxNow=SBUF;
Rev232Buffer[RxPos++]=RxNow;
if(RxPos>=255)
{
RxPos=0;
}
//
if(!b_ReceiveOver)
{
switch(RxStep)
{
case 0://帧头:55 55
if(RxNow==0x55)
{
if(RxPrev==0x55)
{
RxStep=1;
}
else
{
RxPrev=RxNow;
RxPos=0;
Rev232Buffer[RxPos++]=RxNow;
RxStep=0;
}
}
else
{
RxStep=0;
RxPos=0;
REN=1;
}
break;
case 1://命令帧和数据帧的判断
if((RxNow&0x80)==0)
{
RxStep=3;
}
else
{
RxPrev=RxNow;
RxStep=2;
}
break;
case 2://命令帧,第二个命令字(和第一个命令字相同)
if(RxNow==RxPrev)
{
RxStep=7;
}
else
{
RxStep=0;
RxPos=0;
REN=1;
}
break;
case 3://数据帧,帧长度
RxDataLenght=RxNow;
RxStep=4;
break;
case 4://数据帧,数据段
RxDataLenght--;
if(RxDataLenght==0)
{
RxStep=5;
}
break;
case 5://数据帧,累加和
RxStep=6;
break;
case 6://数据帧,异或和
RxStep=8;
break;
case 7://命令帧,累加和
RxStep=8;
break;
case 8://帧尾:aa aa
if(RxNow==0xaa)
{
if(RxPrev==0xaa)
{
b_ReceiveOver=1;
REN=0;
}
else
{
RxPrev=RxNow;
}
}
else
{
RxStep=0;
RxPos=0;
REN=1;
}
break;
default:
RxStep=0;
RxPos=0;
REN=1;
break;
}
}
}
}
//
void UartProcess()
{
//
cUartTemp1=0;
cUartTemp2=0;
cUartTemp3=0;
cUartFunSn=0xff;
//
cUartTemp1=Rev232Buffer[0];
cUartTemp2=Rev232Buffer[1];
if((cUartTemp1==0x55)&(cUartTemp2==0x55))
{
cUartTemp1=Rev232Buffer[2];
cUartTemp1&=0x80;
if(cUartTemp1!=0)
{//命令帧
cUartTemp1=Rev232Buffer[2];
cUartTemp2=Rev232Buffer[3];
if(cUartTemp1==cUartTemp2)
{
cUartTemp3=cUartTemp1+cUartTemp2;
cUartTemp1=Rev232Buffer[4];
if(cUartTemp1==cUartTemp3)
{
cUartTemp1=Rev232Buffer[5];
cUartTemp2=Rev232Buffer[6];
if((cUartTemp1==0xaa)&&(cUartTemp2=0xaa))
{
cUartFunSn=Rev232Buffer[2];
}
}
}
}
else
{//数据帧
cUartAddSum=Rev232Buffer[2]+Rev232Buffer[3];
cUartXorSum=Rev232Buffer[2]^Rev232Buffer[3];
cUartDataLenght=Rev232Buffer[3];
for(i_uart=4;i_uart<(cUartDataLenght+4);i_uart++)
{
cUartTemp1=Rev232Buffer[i_uart];
cUartAddSum+=cUartTemp1;
cUartXorSum^=cUartTemp1;
}
cUartTemp1=Rev232Buffer[cUartDataLenght+4];
cUartDataLenght++;
cUartTemp2=Rev232Buffer[cUartDataLenght+4];
cUartDataLenght++;
if((cUartTemp1==cUartAddSum)&&(cUartTemp2==cUartXorSum))
{
cUartTemp1=Rev232Buffer[cUartDataLenght+4];
cUartDataLenght++;
cUartTemp2=Rev232Buffer[cUartDataLenght+4];
cUartDataLenght++;
if((cUartTemp1==0xaa)&&(cUartTemp2==0xaa))
{
cUartFunSn=Rev232Buffer[6];
}
}
}
}
switch(cUartFunSn)
{
case 0xa5:
case 0xa6://我要伪装成座机0xa7
IAmZj();
break;
case 0xac:
case 0xad:
case 0xae:
IAmOk();
break;
case 5:
iFlashAddrH=Rev232Buffer[7];
iFlashAddrM=Rev232Buffer[8];
iFlashAddrL=Rev232Buffer[9];
iFlashRdWrNum=Rev232Buffer[10];
//
i_uart=iFlashAddrM;
i_uart=(i_uart<<8)&0xff00;
FlashSectorRd(i_uart,Addr_FlashReadBuffer1);
//
i_uart=iFlashAddrM+1;
i_uart=(i_uart<<8)&0xff00;
FlashSectorRd(i_uart,Addr_FlashReadBuffer2);
//
Make05Answer();
//
break;
case 6:
iFlashAddrH=Rev232Buffer[7];
iFlashAddrM=Rev232Buffer[8];
iFlashAddrL=Rev232Buffer[9];
iFlashRdWrNum=Rev232Buffer[10];
//
i_uart=iFlashAddrM;
i_uart=(i_uart<<8)&0xff00;
FlashSectorRd(i_uart,Addr_FlashWriteBuffer1);
//
i_uart=iFlashAddrM+1;
i_uart=(i_uart<<8)&0xff00;
FlashSectorRd(i_uart,Addr_FlashWriteBuffer2);
//
cUartTemp1=iFlashRdWrNum;
iUartTemp1=iFlashAddrL;
cUartTemp2=0;
while(cUartTemp1>0)
{
XBYTE[Addr_FlashWriteBuffer1+iUartTemp1]=Rev232Buffer[11+cUartTemp2];
cUartTemp1--;
iUartTemp1++;
cUartTemp2++;
}
//
i_uart=iFlashAddrM;
i_uart=(i_uart<<8)&0xff00;
FlashSectorWr(Addr_FlashWriteBuffer1,i_uart);
//
i_uart=iFlashAddrM+1;
i_uart=(i_uart<<8)&0xff00;
FlashSectorWr(Addr_FlashWriteBuffer2,i_uart);
//
Make06Answer();
break;
case 7:
ReadTime();
Make07Answer();
break;
case 8:
// 5 7 8 9 10 11 12
//55 55 03 09 00 CF 08 03 11 11 19 39 15 6F FB AA AA
clock[0]=0xa2;//I2C address
clock[1]=0x02;//address
clock[8]=Rev232Buffer[7];//year
clock[7]=Rev232Buffer[8];//month
clock[5]=Rev232Buffer[9];//date
clock[4]=Rev232Buffer[10];//hours
clock[3]=Rev232Buffer[11];//minutes
clock[2]=Rev232Buffer[12];//seconds
set_time();
Make08Answer();
break;
default:
IAmUnKnow();
RxStep=0;
RxPos=0;
break;
}
}
//
void IAmZj()
{
Send232Buffer[0]=0x55;
Send232Buffer[1]=0x55;
Send232Buffer[2]=0xa7;
Send232Buffer[3]=0xa7;
Send232Buffer[4]=0x4e;
Send232Buffer[5]=0xaa;
Send232Buffer[6]=0xaa;
TxPos=0;
TxNum=7;
TI=1;
}
void IAmOk()
{
Send232Buffer[0]=0x55;
Send232Buffer[1]=0x55;
Send232Buffer[2]=0x80;
Send232Buffer[3]=0x80;
Send232Buffer[4]=0x00;
Send232Buffer[5]=0xaa;
Send232Buffer[6]=0xaa;
TxPos=0;
TxNum=7;
TI=1;
}
void IAmUnKnow()
{
Send232Buffer[0]=0x55;
Send232Buffer[1]=0x55;
Send232Buffer[2]=0x84;
Send232Buffer[3]=0x84;
Send232Buffer[4]=0x08;
Send232Buffer[5]=0xaa;
Send232Buffer[6]=0xaa;
TxPos=0;
TxNum=7;
TI=1;
}
//
void FlashSectorWr(unsigned int SourceXRamAddr,unsigned int TargetFlashAddr)
{
//
cPageAddr=(unsigned char)((TargetFlashAddr>>14)&0x0003);
iSectorAddr=(TargetFlashAddr&0x3f00)|0x8000;
iRamToFlashAddr=SourceXRamAddr&0xff00;
//解锁
XBYTE[Addr_XFlashSector]=0x01;
XBYTE[0x9555]=0xaa;
XBYTE[Addr_XFlashSector]=0x00;
XBYTE[0xaaaa]=0x55;
XBYTE[Addr_XFlashSector]=0x01;
XBYTE[0x9555]=0xa0;
//
XBYTE[Addr_XFlashSector]=cPageAddr;
for(i_FlashWr=iSectorAddr;i_FlashWr<=(iSectorAddr+0xff);i_FlashWr++)
{
c1_FlashWr=XBYTE[iRamToFlashAddr++];
XBYTE[i_FlashWr]=c1_FlashWr;
}
DelayMs(10);
}
void FlashSectorRd(unsigned int SourceFlashAddr,unsigned int TargetXRamAddr)
{
//
cPageAddr=(unsigned char)((SourceFlashAddr>>14)&0x0003);
iSectorAddr=(SourceFlashAddr&0x3f00)|0x8000;
iFlashToRamAddr=TargetXRamAddr&0xff00;
//
XBYTE[Addr_XFlashSector]=cPageAddr;
for(i_FlashRd=iSectorAddr;i_FlashRd<=(iSectorAddr+0xff);i_FlashRd++)
{
c1_FlashRd=XBYTE[i_FlashRd];
XBYTE[iFlashToRamAddr++]=c1_FlashRd;
}
}//
//
void Make05Answer()
{
i_Make05Answer=iFlashAddrL;
cUartTemp2=0;
Send232Buffer[cUartTemp2++]=0x55;
Send232Buffer[cUartTemp2++]=0x55;
Send232Buffer[cUartTemp2++]=0x03;
Send232Buffer[cUartTemp2++]=4+iFlashRdWrNum;
Send232Buffer[cUartTemp2++]=0x00;
Send232Buffer[cUartTemp2++]=Rev232Buffer[5];//*********
Send232Buffer[cUartTemp2++]=0x05;
Send232Buffer[cUartTemp2++]=iFlashRdWrNum;
cUartTemp1=iFlashRdWrNum;
while((cUartTemp1--)!=0)
{
Send232Buffer[cUartTemp2++]=XBYTE[Addr_FlashReadBuffer1+i_Make05Answer];
i_Make05Answer++;
}
cAdd_Make05Answer=Send232Buffer[2];
cXor_Make05Answer=Send232Buffer[2];
for(i_Make05Answer=3;i_Make05Answer<cUartTemp2;i_Make05Answer++)
{
cAdd_Make05Answer=cAdd_Make05Answer+Send232Buffer[i_Make05Answer];
cXor_Make05Answer=cXor_Make05Answer^Send232Buffer[i_Make05Answer];
}
Send232Buffer[cUartTemp2++]=cAdd_Make05Answer;
Send232Buffer[cUartTemp2++]=cXor_Make05Answer;
Send232Buffer[cUartTemp2++]=0xaa;
Send232Buffer[cUartTemp2++]=0xaa;
TxPos=0;
TxNum=cUartTemp2;
TI=1;
}
void Make06Answer()
{//55 55 03 04 00 CE 06 00 DB CF AA AA
cUartTemp2=0;
Send232Buffer[cUartTemp2++]=0x55;
Send232Buffer[cUartTemp2++]=0x55;
Send232Buffer[cUartTemp2++]=0x03;
Send232Buffer[cUartTemp2++]=0x04;
Send232Buffer[cUartTemp2++]=0x00;
Send232Buffer[cUartTemp2++]=Rev232Buffer[5];//*********
Send232Buffer[cUartTemp2++]=0x06;
Send232Buffer[cUartTemp2++]=0x00;
cAdd_Make05Answer=Send232Buffer[2];
cXor_Make05Answer=Send232Buffer[2];
for(i_Make05Answer=3;i_Make05Answer<=7;i_Make05Answer++)
{
cAdd_Make05Answer=cAdd_Make05Answer+Send232Buffer[i_Make05Answer];
cXor_Make05Answer=cXor_Make05Answer^Send232Buffer[i_Make05Answer];
}
Send232Buffer[cUartTemp2++]=cAdd_Make05Answer;
Send232Buffer[cUartTemp2++]=cXor_Make05Answer;
Send232Buffer[cUartTemp2++]=0xaa;
Send232Buffer[cUartTemp2++]=0xaa;
TxPos=0;
TxNum=cUartTemp2;
TI=1;
}
//
unsigned char ReadTime()
{
for(i_RdTime=0;i_RdTime<9;i_RdTime++)
clock[i_RdTime]=0;
I2Cstart();
I2Csend(0xA2);
if(I2Csuback()==0)return 0;
I2Csend(0x02);
if(I2Csuback()==0)return 0;
I2Cstart();
I2Csend(0xA3);
if(I2Csuback()==0)return 0;
clock[0]=I2Cread()&0x7f;//seconds
I2Cmastack();
clock[1]=I2Cread()&0x7f;//min
I2Cmastack();
clock[2]=I2Cread()&0x3f;//hours
I2Cmastack();
clock[3]=I2Cread()&0x3f;//day
I2Cmastack();
clock[7]=I2Cread()&0x07;//week
I2Cmastack();
clock[4]=I2Cread()&0x1f;//mouth
I2Cmastack();
clock[5]=I2Cread()&0x7f;//year
I2Cnoack();
I2Cstop();
clock[6]=0x20;
cClock_Year=clock[5];
cClock_Month=clock[4];
cClock_Day=clock[3];
cClock_Hour=clock[2];
cClock_Minute=clock[1];
cClock_Second=clock[0];
return 1;
//
}//
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -