📄 lcm16864zk.c
字号:
if(k==0x01)
{
k=0x31;
}
else if((k&0x0f)==0)
{
k=k-0x10;
k=k+0x09;
}
else {k--;}
WritCommand(0x10);
ShowK(k);
}
}
}
}
void CalenSet4(void) //设置时
{
uchar k=0;
ShowK(k);
while(1)
{
if(LKEY==0)
{
Delay_ms(10);
if(LKEY==0)
{
while(1){if(LKEY==1)break;}
calen[2]=k; //时
}
break;
}
if(MKEY==0) //0~23循环显示
{
Delay_ms(10);
if(MKEY==0)
{
while(1){if(MKEY==1)break;}
if(k==0x23)
{
k=0x00;
}
else if((k&0x0f)==9)
{
k=k&0xf0;
k=k+0x10;
}
else {k++;}
WritCommand(0x10);
ShowK(k);
}
}
if(RKEY==0) //移动到下一位显示
{
Delay_ms(10);
if(RKEY==0)
{
while(1){if(RKEY==1)break;}
if(k==0x00)
{
k=0x23;
}
else if((k&0x0f)==0)
{
k=k-0x10;
k=k+0x09;
}
else {k--;}
WritCommand(0x10);
ShowK(k);
}
}
}
}
uchar CalenSet5(void) //设置分
{
uchar k=0;
ShowK(k);
while(1)
{
if(LKEY==0)
{
Delay_ms(10);
if(LKEY==0) //确定
{
while(1){if(LKEY==1)break;}
return k;
}
break;
}
if(MKEY==0)
{
Delay_ms(10);
if(MKEY==0)
{
while(1){if(MKEY==1)break;} //0~59循环显示
if(k==0x59)
{
k=0x00;
}
else if((k&0x0f)==9)
{
k=k&0xf0;
k=k+0x10;
}
else {k++;}
WritCommand(0x10);
ShowK(k);
}
}
if(RKEY==0)
{ //移动到下一位设定
Delay_ms(10);
if(RKEY==0)
{
while(1){if(RKEY==1)break;}
if(k==0x00)
{
k=0x59;
}
else if((k&0x0f)==0)
{
k=k-0x10;
k=k+0x09;
}
else {k--;}
WritCommand(0x10);
ShowK(k);
}
}
}
}
void ShowK(uchar num)
{ // 把十进制数num转换成BCD码显示
uchar i;
i=num&0xf0;
i=i>>4;
WritData(0x30+i);
i=num&0x0f;
WritData(0x30+i);
}
//////////////////////////////////////////////////////////打印程序
//////////////////////////////////////////////////////////
void FuncControl(void)
{
ShowPart18(); //报警记录打印
ShowPart5(); //进入 另选
while(1)
{
if(LKEY==0)
{
Delay_ms(10);
if(LKEY==0)
{
while(1){if(LKEY==1)break;}
Print1();
}
break;
}
if(RKEY==0)
{
Delay_ms(10);
if(RKEY==0)
{
while(1){if(RKEY==1)break;}
}
break;
}
}
}
void Print1(void)
{
ShowPart19(); //全部打印
ShowPart5();
PrintInitial();
while(1)
{
if(LKEY==0)
{
Delay_ms(10);
if(LKEY==0)
{
while(1){if(LKEY==1)break;}
ShowPart20();
Print2(); //进入全部打印
}
break;
}
if(RKEY==0)
{
Delay_ms(10);
if(RKEY==0)
{
while(1){if(RKEY==1)break;}
// Print3();
}
break;
}
}
}
void PrintInitial(void)
{
PrintByte(0x1b);PrintByte(0x40);PrintByte(0x1b);PrintByte(0x44); //打印初始化
PrintByte(0x02);PrintByte(0x05);PrintByte(0x07);PrintByte(0x09); //设置打印方式为水平制表
PrintByte(0x0b);PrintByte(0x0d);PrintByte(0x0f);PrintByte(0x13);PrintByte(0x00);
PrintByte(0x09);
}
void Print2(void) //全部打印
{
uchar i,j;
pdx=0x0400;
i=*pdx;
if(i==0) {ShowPart21(); Delay_s(1); }
else
{
j=i-1;
i=0;
for(;j>=0;j--)
{
print[i]=i;i++; //确定打印那些报警记录 把要打印的记录号存在print[]中
}
Print(*pdx);
}
}
void Print(uchar num) //打印记录函数 打印的顺序存在数组
{ //print[]中 num为需要打印的记录数
uchar i=0,j,k;
for(j=1;j<=num;j++,i++)
{
//打印编号
PrintWord(j);
pdx=0x0401+11*(j-1);
for(i=0;k<7;i++) //打印日期和属性码 1个编号
{
k=*pdx;
PrintWord(k);
pdx++;
}
pdx++;
for(i=0;i<4;i++) //打印复合报警的编号
{
if(*pdx==0x0f) break;
else PrintWord(*pdx);
}
PrintByte(0x0d); //将BUFF中的数据打印
PrintByte(0x0a); //换行
}
}
/*
void PrintNum(uchar num) //按编号打印 编号为num
{
uchar i,j=0;
pdx=0x0400;
i=*pdx;
if(i==0) {ShowPart21(); Delay_s(1); }
else
{
for(;i-1>=0;i--)
{
pdx=0x0407+i*8;
if(num==*pdx)
{print[j]=i;j++;}
}
}
Print(j+1);
}
*/
void PrintWord(uchar k)
{
uchar i;
i=k&0xf0;
i=i>>4;
i=i+0x30;
PrintByte(i);
i=k&0x0f;
i=i+0x30;
PrintByte(i);
}
void PrintByte(uchar udata) //打印一个字节的信息
{
while(BUSY==1) ;
PRINTBYTE=udata;
}
//////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////报警处理处理
void sever_int1() interrupt 2 using 3
{
EA=0;
/* P0=0XFF;
P2=0X5F;
_RD=0;
ACC=P0;
P2=0X4F;
_RD=1; */
ACC=WARNBYTE; //从PT2272接收数据WARNBYTE给ACC
ACC=ACC&0X0F;
status=ACC;
flag=1;
EA=1;
}
void WarnDeal(void)
{
uchar j;
if(status<8)
{
pdx=0x0100; //已存向量数给j X0100存着已发生的抢劫报警的次数
j=*pdx;
pdx=0x0104; //每次发生抢劫后生成的向量从0X0104存起
for(;j>0;j--)
{
if(*pdx==status)
{
AlarmNum[RobNum]=*pdx; // 记录发生报警的报警器编号
// WarnNum=*pdx; //记录发生报警的报警器编号
pdx=pdx+2;
if(*pdx==1){RobNum=0;AlarmNum[RobNum-1]=0x0f; break;}
else {RobNum--; break;}
}
pdx=pdx+4;
}
if(RobNum==0) RobWarn();
}
if(status==8)
{
WritCommand(0x01);
WritCommand(0x90); //显示盗窃
WritData(0xb5);WritData(0xc1);
WritData(0xc7);WritData(0xd4);
Delay_s(2);
send(0x02); //发生盗窃传输02
StealDeal();
}
if(status==10)
{
WritCommand(0x01);
WritCommand(0x90); //显示火警
WritData(0xbb);WritData(0xf0);
WritData(0xbe);WritData(0xaf);
Delay_s(2);
send(0x03); //发生火警传输03
FireDeal();
}
}
void RobWarn(void)
{
WritCommand(0x01);
WritCommand(0x90); //显示抢劫
WritData(0xc7);WritData(0xc0);
WritData(0xbd);WritData(0xd9);
Delay_s(1);
send(0x01); //发生抢劫传输01
RobDeal(); //抢劫处理函数
}
void StealDeal(void) //盗窃处理
{
uchar i,j;
uchar xdata * data pdx1;
CalenWrit(); //记录盗窃发生的时间
pdx++;
*pdx=0x02;
pdx=0x0200;
i=*pdx;
pdx++;
while(i>0)
{
pdx1=0x0202+i*2;
j=*pdx1;
if(status==j)
{ //找到报警器的编号
*pdx=j;break;
}
i--;
}
}
void FireDeal(void)
{ //发生火警
uchar i,j;
uchar xdata * data pdx1;
CalenWrit(); //记录时间
pdx++;
*pdx=0x03;
pdx++;
pdx1=0x0300;
i=*pdx1;
while(i>=0)
{
pdx1=0x0302+i*2;
j=*pdx1;
if(status==j)
{ //找到报警器编号
*pdx=j;break;
}
i--;
}
} //防抢处理
void RobDeal(void)
{
uchar i;
uchar xdata * data pdx1;
pdx1=0x103;
RobNum=*pdx1; //恢复RobNum的值
CalenWrit(); //记录时间
pdx++;
*pdx=0x01; //记录报警的属性码
pdx++;
i=RobNum;
while(i>=0)
{
if(AlarmNum[i]==0x0f)
{ break;}
else
{
*pdx=AlarmNum[i];
pdx++;
AlarmNum[i]=0x0f;
}
i--;
}
for(i=0;i<5;i++) //恢复数组的初始值0X0F
AlarmNum[i]=0x0f;
}
void CalenWrit(void) //记录时间的函数
{
uchar i; //把时间存到CALEN[8]向量中
pdx=0x0400;
i=*pdx;
(*pdx)++;
pdx=0x0401+i*8;
*pdx=calen[6]; //年 月 日 时 分
pdx++;
*pdx=calen[4];
pdx++;
*pdx=calen[3];
pdx++;
*pdx=calen[2];
pdx++;
*pdx=calen[1];
}
// ///////// //////////////////////////串口中断程序
void sever_es() interrupt 4 using 2
{
EA=0;
if(TI==0)
{
while(1){if(RI==1) break;}
status=SBUF;
flag1=1;
}
EA=1;
}
void send(uchar sdata)
{
ES=0;
SBUF=sdata;
while (TI==0);
TI=0;
EA=1;
}
//////////////////////////////////////////////////////////////////////
//以下是用来设置报警电话的 程序 不需要就不用了
/*
void WarnTaleSet(void)
{
while(1)
{
WritCommand(0x01);
WritCommand(0x81);
WritData(0xb1);WritData(0xa8);WritData(0xbe);WritData(0xaf); //报警电话设置
WritData(0xb5);WritData(0xe7);WritData(0xbb);WritData(0xb0);
WritData(0xc9);WritData(0xe8);WritData(0xd6);WritData(0xc3);
WritCommand(0x90);
WritData(0xa2);WritData(0xb1);WritData(0xc9);WritData(0xe8); //设置报警电话
WritData(0xd6);WritData(0xc3);WritData(0xb1);WritData(0xa8);
WritData(0xbe);WritData(0xaf);WritData(0xb5);WritData(0xe7);
WritData(0xbb);WritData(0xb0);
WritCommand(0x88);
WritData(0xa2);WritData(0xb2);WritData(0xc9);WritData(0xe8); //设置语音芯片
WritData(0xd6);WritData(0xc3);WritData(0xd3);WritData(0xef);
WritData(0xd2);WritData(0xfa);WritData(0xd0);WritData(0xbe);
WritData(0xb6);WritData(0xac);
WritCommand(0x98);
WritData(0xa2);WritData(0xb3);WritData(0xb4);WritData(0xe6); //存储号码查询
WritData(0xb4);WritData(0xa2);WritData(0xba);WritData(0xc5);
WritData(0xcc);WritData(0xeb);WritData(0xb2);WritData(0xe9);
WritData(0xd1);WritData(0xaf);
if(flag1)
{
flag1=0;
if(status==1)
{
WarnTelephone();
}
if(status==2)
{
// ChipSet();
}
if(status==3)
{
// CheckNum();
}
if(status==0x0f)
{
break;
}
}
Delay_ms(100);
}
}
void WarnTelephone(void)
{
while(1)
{
WritCommand(0x01);
WritCommand(0x90);
WritData(0xa2);WritData(0xb1);WritData(0xc9);WritData(0xe8); //1.设置火警电话
WritData(0xd6);WritData(0xc3);WritData(0xbb);WritData(0xf0);
WritData(0xbe);WritData(0xaf);WritData(0xb5);WritData(0xe7);
WritData(0xbb);WritData(0xb0);
WritCommand(0x88);
WritData(0xa2);WritData(0xb2);WritData(0xc9);WritData(0xe8); //2.设置盗警电话
WritData(0xd6);WritData(0xc3);WritData(0xb5);WritData(0xc1);
WritData(0xbe);WritData(0xaf);WritData(0xb5);WritData(0xe7);
WritData(0xbb);WritData(0xb0);
WritCommand(0x98); //3.设备备用
WritData(0xa2);WritData(0xb3);WritData(0xc9);WritData(0xe8);
WritData(0xb1);WritData(0xb8);WritData(0xb1);WritData(0xb8);
WritData(0xd3);WritData(0xc3);
if(flag1)
{
flag1=0;
if(status==1)
{
FireTele();
WarnTelephone();
}
if(status==2)
{
StealTele();
WarnTelephone();
}
if(status==3)
{
SpareTele();
WarnTelephone();
}
if(status==0x0f) break;
}
Delay_ms(100);
}
}
void FireTele(void)
{
uchar j;
while(1)
{
WritCommand(0x01);
WritCommand(0x91);
WritData(0xc9);WritData(0xe8);WritData(0xd6);WritData(0xc3); //设置火警电话
WritData(0xbb);WritData(0xf0);WritData(0xbe);WritData(0xaf);
WritData(0xba);WritData(0xc5);WritData(0xc2);WritData(0xeb);
if(flag1==1)
{
flag1=0;
j=status;
if(status==0x0f)
{
break;
}
else
{
WritData(0xa3);
WritData(0xb0+j); //显示下个数
}
}
Delay_ms(100);
}
}
void StealTele(void)
{
}
void SpareTele(void)
{
} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -