📄 lcm16864zk.c
字号:
#include <absacc.h>
#include <reg51.h>
#include "main.h"
#define WARNBYTE XBYTE[0x5FFF] //射频报警地址
//#define XBYTE((char * )0x10000L)
void main(void)
{
SP=0x30;
IE=0X95;
IT1=0;
// Delay_s(1);
Delay_ms(2);
SystemInitial(); //系统初始化
while(1)
{
//WritCommand(0x0e);
Delay_ms(10); //显示初始画面
ShowTime();
if(LKEY==0)
{
Delay_ms(10);
if(LKEY==0)
{
while(1){if(LKEY==1)break;}
ShScreen1();
DisplayInitial();
}
}
if(flag)
{
flag=0;
WarnDeal();
Delay_s(3);
DisplayInitial();
}
if(flag1)
{
flag1=0;
if(status==0x0f)
{
WarnTaleSet();
}
}
}
}
void SystemInitial(void) // 系统初始化程序
{
uchar i;
P3=0XFF; //P1,P3口的第二的功能先输出1
for(i=0;i<=3;i++)
CodeNum[i]=0;
pdx=0x0100; //防抢设置向量地址
*pdx=0x00; // 向量数目
pdx=0x0200; //防盗设置向量首地址
*pdx=0x00;
pdx=0x0300; //放火设置向量首地址
*pdx=0x00;
pdx=0x0400; //报警发生存储向量首地址
*pdx=0x00;
CalendarInitial(calen);
BurstR1302(calen);
ShowInitial(); //显示模块初始化
DisplayInitial(); //显示初始画面
}
void ShowInitial(void) //显示初始化
{
P2=0X1F;
Delay_ms(22); //delay > 40ms
//i=00110000B;
WritCommand(0x30); //function set
Delay_us(6); //delay > 100us
WritCommand(0x30); //function set
Delay_us(3); //delay > 37us
WritCommand(0x0c); //display set D=1 C=1 B=0
Delay_us(6); //>100us
WritCommand(0x01); //display clear
Delay_ms(7); //>10ms
//i=00000110B
WritCommand(0x06); //enter nod set
P2=0X0F;
}
/////////////////////////////////////////////////////
void Delay_us(uchar i) //delay 8 * i us
{
uchar j;
for(j=0;j<i;j++);
}
void Delay_ms(uchar i) // delay i * 1000 us=i ms
{
uchar sum=125,j,k;
for(j=0;j<i;j++)
for(k=0;k<sum;k++);
}
void Delay_s(uchar i)
{
uint sum=125000,k;
uchar j;
for(j=0;j<i;j++)
for(k=0;k<sum;k++);
}
///////////////////////////////////////////////////////
void WritCommand(uchar i) //写命令
{
P2=0X1F;
Waitfree();
S_RS=0;
S_RW=0;
E=1; //E=1
P0 = i;
_WR=0;
E=0; //E=0
_WR=1;
P2=0X0F;
}
//////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
void WritData(uchar i) //写数据
{
P2=0X1F;
Waitfree();
S_RS=1;
S_RW=0;
E=1; //E=1
P0=i;
_WR=0;
E=0;
_WR=1;
P2=0X0F;
}
//////////////////////////////////////////////////////////
void DisplayInitial(void)
{
WritCommand(0x01); //显示初始画面
WritCommand(0x91);
WritData(0xBC);WritData(0xAF);WritData(0xB3);WritData(0xc9); //集成警务系统
WritData(0xbe);WritData(0xaf);WritData(0xce);WritData(0xf1);
WritData(0xcf);WritData(0xb5);WritData(0xcd);WritData(0xb3);
WritCommand(0x98);
WritData(0xc3);WritData(0xdc);WritData(0xc2);WritData(0xeb); //密码门
WritData(0xc3);WritData(0xc5);
WritCommand(0x89);
WritData(0xcf);WritData(0xe6);WritData(0xcc);WritData(0xb6); //湘潭大学研制
WritData(0xb4);WritData(0xf3);WritData(0xd1);WritData(0xa7);
WritData(0xd1);WritData(0xd0);WritData(0xd6);WritData(0xc6);
}
/////////////////////////////////////////////////////////////
void Waitfree(void)
{
P0=0XFF;
S_RS=0;
S_RW=1;
_RD=0;
ACC=P0;
while(ACC7==1)
{
_RD=0;
P2=0X1F;
E=1;
ACC=P0;
E=0;
}
_RD=1;
S_RS=0;
S_RW=0;
}
/////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////日历程序
void CalendarInitial(pcalen)//日历初始化程序
uchar pcalen[8];
{
uchar i;
BurstW1302(pcalen); //读日历,并送到pcalen[]中
i=Read1302(0x80);
i=i&0x7f; //ch=0
Writ1302(0x80,i); //起震,
}
void BurstR1302(pcalen) // 从1302读多字节,并存入日历数组中
uchar pcalen[8];
{
uchar i;
T_RST=0;
T_CLK=0;
T_RST=1;
RTInputByte(0xbf); //oxbf 时钟多字节读命令
for(i=0; i<8; i++)
{
*pcalen=RTOutputByte(); //读1BYTE的数据
pcalen++ ;
}
T_CLK=1;
T_RST=0;
}
////////////////////////////////////////////////////////
void RTInputByte(udata) //to1302写入一字节的数据
uchar udata;
{
uchar i;
ACC=udata;
for(i=8;i>0;i--)
{
T_IO=ACC0;
T_CLK=1;
T_CLK=0;
ACC=ACC>>1;
}
}
/////////////////////////////////////////////////////
uchar RTOutputByte(void) //从1302读一字节的数据
{
uchar i;
for(i=8;i>0;i--)
{
ACC=ACC>>1;
ACC7=T_IO;
T_CLK=1;
T_CLK=0;
}
return(ACC);
}
//////////////////////////////////////////////////////
void Writ1302(uchar uAddr,uchar udata) //写1字节的数据入指定地址
{
T_RST=0;
T_CLK=0;
T_RST=1;
RTInputByte(uAddr); //先输入地址
RTInputByte(udata); //写数据
T_CLK=1;
T_RST=0;
}
//////////////////////////////////////////////////////
uchar Read1302(uchar uAddr) //从指定地址读出1字节数据
{
uchar udata;
T_RST=0;
T_CLK=0;
T_RST=1;
RTInputByte(uAddr); //写入地址
udata=RTOutputByte(); //读出数据
T_CLK=1;
T_RST=0;
return(udata);
}
/////////////////////////////////////////////////////
void BurstW1302(pcalen) //写入多字节的数据
uchar pcalen[8];
{
uchar i;
Writ1302(0x8e,0x00); //WP=0,写操作
T_RST=0;
T_CLK=0;
T_RST=1;
RTInputByte(0xbe); //0xbe ;时钟多字节写命令
for(i=8;i>0;i--)
{
RTInputByte(*pcalen);
pcalen++;
}
T_CLK=1;
T_RST=0;
}
////////////////////////////////////////////////////
void ShowTime(void)
{
uchar i;
BurstR1302(calen);
i=0x80;
WritCommand(i);
i=calen[6];
ShowTimes(i);
i=0x2f;
WritData(i);
i=calen[4];
ShowTimes(i);
i=0x2f;
WritData(i);
i=calen[3];
ShowTimes(i);
i=0x2f;
WritData(i);
i=calen[2];
ShowTimes(i);
i=0x3a;
WritData(i);
i=calen[1];
ShowTimes(i);
i=calen[0];
ShowTimes(i);
}
////////////////
void ShowTimes(uchar i)
{
uchar m,n;
m=i>>4;
m=m+0x30;
n=i&0x0f;
n=n+0x30;
WritData(m);
WritData(n);
}
////////////////////////////////////////////////////////////////// 进入系统设置画面
void ShScreen1(void)
{
uchar i,j=0,k=0;
uchar CodeNum1[4];
while(1) {if(LKEY==1) break; }
//整体显示开 游标位置开
WritCommand(0x0e);
WritCommand(0x01);
ShowPart1();
WritCommand(0x90);
WritData(0xcf);WritData(0xb5);WritData(0xcd);WritData(0xb3); //显示系统密码:0
WritData(0xc3);WritData(0xdc);WritData(0xc2);WritData(0xeb);
WritData(0x3a);WritData(0x20);WritData(0x20);WritData(0x20);
WritData(0x20);WritData(0x20);
WritCommand(0x94);
WritData(0xa3);
WritData(0xb0);
WritCommand(0x10);
while(k<4)
{
if(LKEY==0)
{
Delay_ms(10);
if(LKEY==0)
{
while(1){if(LKEY==1) break;}
CodeNum1[k]=j;
k++;
for(i=0;i<4;i++) //判断密码是否正确
{
j=CodeNum[i];
if(CodeNum1[i]!=j)
{
WritCommand(0x01);
WritCommand(0x91);
WritData(0xc3);WritData(0xdc);WritData(0xc2);WritData(0xeb); //密码错误
WritData(0xb4);WritData(0xed);WritData(0xce);WritData(0xf3);
Delay_s(3);
k=0;
ShScreen1();
break;
}
}
RobSet();
StealSet();
FireSet();
CalenSet();
}
break;
}
if(MKEY==0)
{
Delay_ms(10);
if(MKEY==0)
{
j++;
if(j>9) j=0;
i=0xb0+j;
WritData(0xa3);
WritData(i); //显示下个数
WritCommand(0x10);
while(1){ if(MKEY==1) break; }
}
}
if(RKEY==0)
{
Delay_ms(10); //延时去抖动
if(RKEY==0)
{
CodeNum1[k]=j;
WritCommand(0x14);
k++;
if(k>3) {k=0; WritCommand(0x94);}
WritData(0xa3);
WritData(0xb0);
WritCommand(0x10);
j=0;
while(1)
{
if(RKEY==1) break;
}
}
}
ShowTime();
WritCommand(0x94+k);
Delay_ms(10);
}
}
////////////////////////////////////////////////////////////////////////////////显示画面
void ShowPart1(void)
{
WritCommand(0x98);
WritData(0xc8);WritData(0xb7);WritData(0xc8);WritData(0xcf); //显示确认 选数 移动
WritData(0x20);WritData(0x20);WritData(0xd1);WritData(0xa1);
WritData(0xca);WritData(0xfd);WritData(0x20);WritData(0x20);
WritData(0xd2);WritData(0xc6);WritData(0xb6);WritData(0xaf);
}
void ShowPart2(void)
{
WritCommand(0x90);
WritData(0xb7);WritData(0xa2);WritData(0xc9);WritData(0xe4); //发射器编号:0
WritData(0xc6);WritData(0xf7);WritData(0xb1);WritData(0xe0);
WritData(0xba);WritData(0xc5);WritData(0x3a);WritData(0x20);
WritData(0xa3);WritData(0xb0);WritData(0xa3);WritData(0xb0);
WritData(0xa3);WritData(0xb0);
}
void ShowPart3(void)
{
WritCommand(0x90);
WritData(0xb5);WritData(0xe7);WritData(0xbb);WritData(0xb0); //电话报警:Y
WritData(0xb1);WritData(0xa7);WritData(0xbe);WritData(0xaf);
WritData(0x3a);WritData(0x20);WritData(0xa3);WritData(0xd9);
}
void ShowPart4(void)
{
WritCommand(0x98);
WritData(0xc8);WritData(0xb7);WritData(0xc8);WritData(0xcf); //确认 选择
WritCommand(0x9e);
WritData(0xd1);WritData(0xa1);WritData(0xd4);WritData(0xf1);
}
void ShowPart5(void)
{
WritCommand(0x98);
WritData(0xbd);WritData(0xf8);WritData(0xc8);WritData(0xeb); //进入
WritCommand(0x9e);
WritData(0xc1);WritData(0xed);WritData(0xd1);WritData(0xa1); //另选
}
void ShowPart6(void)
{
WritCommand(0x91);
WritData(0xc3);WritData(0xf9);WritData(0xbe);WritData(0xaf);
WritData(0xb5);WritData(0xd1); //鸣警笛 :Y
WritData(0x3a);WritData(0x20);WritData(0xa3);WritData(0xd9);
}
void ShowPart7(void)
{
WritCommand(0x90);
WritData(0xbd);WritData(0xd3);WritData(0xc1);WritData(0xa6); //接力报警:Y
WritData(0xb1);WritData(0xa7);WritData(0xbe);WritData(0xaf);
WritData(0x3a);WritData(0x20);WritData(0xa3);WritData(0xd9);
}
void ShowPart8(void)
{
WritCommand(0x90);
WritData(0xb7);WritData(0xe2);WritData(0xcb);WritData(0xf8); //封锁现场:Y
WritData(0xcf);WritData(0xd6);WritData(0xb3);WritData(0xa1);
WritData(0x3a);WritData(0x20);WritData(0xa3);WritData(0xd9);
}
void ShowPart9(void)
{
WritCommand(0x90);
WritData(0xc5);WritData(0xe7);WritData(0xc9);WritData(0xe4); //喷射眠雾:Y
WritData(0xc3);WritData(0xdf);WritData(0xce);WritData(0xed);
WritData(0x3a);WritData(0x20);WritData(0xa3);WritData(0xd9);
}
void ShowPart10(void)
{
WritCommand(0x90);
WritData(0xd4);WritData(0xb1);WritData(0xb9);WritData(0xa4); //员工编码:0
WritData(0xb1);WritData(0xe0);WritData(0xba);WritData(0xc5);
WritData(0xa3);WritData(0xb0);WritData(0xa3);WritData(0xb0);
WritData(0xa3);WritData(0xb0);WritData(0xa3);WritData(0xb0);
}
void ShowPart11(void)
{
WritCommand(0x90);
WritData(0xd7);WritData(0xee);WritData(0xc9);WritData(0xd9); //最少与数:0
WritData(0xd3);WritData(0xeb);WritData(0xca);WritData(0xfd);
WritData(0x3a);WritData(0x20);WritData(0xa3);WritData(0xb0);
}
void ShowPart12(void)
{
WritCommand(0x90);
WritData(0xc2);WritData(0xde);WritData(0xbc);WritData(0xad); //逻辑关系:A
WritData(0xb9);WritData(0xd8);WritData(0xcf);WritData(0xb5);
WritData(0x3a);WritData(0x20);WritData(0xa6);WritData(0xa1);
}
void ShowPart13(void)
{
WritCommand(0x90);
WritData(0xd3);WritData(0xeb);WritData(0xb5);WritData(0xc8); // 与等时间000S
WritData(0xca);WritData(0xb1);WritData(0xbc);WritData(0xe4);
WritData(0xa3);WritData(0xb0);WritData(0xa3);WritData(0xb0);
WritData(0xa3);WritData(0xb0);WritData(0xa3);WritData(0xd3);
}
void ShowPart14(void)
{
WritCommand(0x01);
WritCommand(0x98);
WritData(0xcc);WritData(0xee);WritData(0xd0);WritData(0xb4); //填写 继续
WritCommand(0x9b);
WritData(0xb2);WritData(0xbb);WritData(0xcc);WritData(0xee);
WritCommand(0x9e);
WritData(0xbc);WritData(0xcc);WritData(0xd0);WritData(0xf8);
}
void ShowPart15(void)
{
WritCommand(0x90);
WritData(0xd7);WritData(0xd4);WritData(0xb6);WritData(0xaf); //自动喷水:Y
WritData(0xc5);WritData(0xe7);WritData(0xcb);WritData(0xae);
WritData(0x3a);WritData(0x20);WritData(0xa3);WritData(0xd9);
}
void ShowPart16(void)
{
WritCommand(0x90);
WritData(0xd7);WritData(0xd4);WritData(0xb6);WritData(0xaf); //自动喷沙:Y
WritData(0xc5);WritData(0xe7);WritData(0xc9);WritData(0xb3);
WritData(0x3a);WritData(0x20);WritData(0xa3);WritData(0xd9);
}
void ShowPart17(void)
{
WritCommand(0x92);
WritData(0xc8);WritData(0xd5);WritData(0xc0);WritData(0xFa); //日历设置
WritData(0xc9);WritData(0xe8);WritData(0xd6);WritData(0xc3);
}
/*void ShowPart18(void)
{
}
*/
////////////////////////////////////报警
//////////////////////////////////////////////////////////////////
void RobSet(void) //防抢设置
{
WritCommand(0x01); //清零
WritCommand(0x0c);
WritCommand(0x92);
WritData(0xb7);WritData(0xc0);WritData(0xc7);WritData(0xc0); //防抢设置
WritData(0xc9);WritData(0xe8);WritData(0xd6);WritData(0xc3);
ShowPart5(); //进入 另选
while(1)
{
if(RKEY==0)
{
Delay_ms(10);
if(RKEY==0)
{
while(1){if(RKEY==1) break; }
}
break;
}
if(LKEY==0)
{
Delay_ms(10);
if(LKEY==0)
{
while(1) {if(LKEY==1)break;}
RobData=0x00;
TeleAlarm(); //报警处警设置
WhistleAlarm();
AlarmRelay();
BlankLocal();
EjectFog();
pdx=0x0101;
*pdx=RobData;
AnlTime(); //与等待时间
AnlNum(); //最少与数
RobSetNext();
break;
}
}
ShowTime();
}
}
void RobSetNext(void)
{
uchar i;
WritCommand(0x0e);
i=EjectorNum(); //发射器编号
EmployeeNum(); //员工编号
AnlSet(); //逻辑关系
RobSet1(); //继续 填写
}
void TeleAlarm(void)
{
bit i=1;
WritCommand(0x01);
WritCommand(0x0e);
ShowPart3(); //电话报警:Y
ShowPart4();
while(1)
{
if(LKEY==0)
{
Delay_ms(10);
if(LKEY==0)
{
while(1)
{if(LKEY==1) break;}
if(i==1)
{
RobData=RobData|0x01;
}
else
{
RobData=RobData&0xfe;
}
}
break;
}
if(RKEY==0)
{
Delay_ms(10);
if(RKEY==0)
{
while(1)
{if(RKEY==1) break;}
i=~i;
if(i==1)
{
WritCommand(0x95);
WritData(0xa3);WritData(0xd9);
WritCommand(0x10);
}
else
{
WritCommand(0x95);
WritData(0xa3);WritData(0xce);
WritCommand(0x10);
}
}
}
WritCommand(0x95);
}
}
void WhistleAlarm(void)
{
bit i=1;
WritCommand(0x01);
ShowPart6(); ////鸣警笛 :Y
ShowPart4();
while(1)
{
if(LKEY==0)
{
Delay_ms(10);
if(LKEY==0)
{
while(1)
{if(LKEY==1) break;}
if(i==1)
{
RobData=RobData|0x02;
}
else
{
RobData=RobData&0xfd;
}
}
break;
}
if(RKEY==0)
{
Delay_ms(10);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -