/*------------------------------------------------
不同开发板引脚不一样,这个程序中,键盘接P1口。
存储器24C02的Sda接P2^0,Scl接P2^1;写数据地址为0xa0,读数据地址为0xa1 ,需要参考24c02芯片文档
液晶屏三个引脚lcdrs=P3^5; lcdrw=P3^6;slcden=P3^4;
------------------------------------------------*/
#include<reg52.h>
#include <intrins.h> //包含NOP空指令函数_nop_();
#define uchar unsigned char
#define uint unsigned int
uchar code adata[]="!!!!warning!!!!";
uchar code adata1[]="ok!!";
uchar code table1[]="Please enter the";
uchar code table2[]="password:";
uchar code table3[]="Please press the";
uchar code table4[]="confirm key";
uchar code table5[]="Your password is";
uchar code table6[]="incorrect";
uchar code table7[]="Welcome !!!" ;
uchar code table8[]="*****";
uchar code table9[]={1,2,3,4,5,6};
uchar code table10[]={1,2,3,4,5,6,7,8,9};
uchar code table11[]="Senior Password";
uchar code table12[]="new password:";
uchar code table13[]="password again:";
uchar code table14[]="Password changed";
uchar code table15[]="successfully";
uchar code table16[]="********";
uchar code table17[]="Please press A";
uchar code table18[]="entry system";
uchar code table19[]="Press C Delete";
uchar code table20[]="Press D Change";
uchar code table21[]="Press A Return";
uchar code table22[]="the homepage";
uchar code table23[]="the key is lock";
uchar code table24[]="the one differ";
uchar code table25[]="the second";
//-----------TC35i------------
uchar code at[] = "AT\r"; //联机指令 "\r"--"enter"
uchar code cmgf[]="AT+CMGF=1\r"; //选择短信息信息格式---文本
uchar code cmgs[]="AT+CMGS=15902089557\r"; // 短信接受者号码
uchar code msg[]="break in!!!";
uchar code af[]="AT&F";
sbit Sda=P2^1; //24C02
sbit Scl=P2^0;
#define AddWr 0xae //写数据地址,需要参考24c02芯片文档
#define AddRd 0xaf //读数据地址
sbit lcdrs=P2^3; //LCD
sbit lcdrw=P2^4;
sbit lcden=P2^5;
sbit rsd=P3^5; //红外热释电
sbit fmq=P2^2;
bit flag,flag1,flag2,flag3,flag4,flag5,flag10,ok,ttt=0;
uchar kk;
uchar num,num1,num2,num3,num4;
uchar aa[6],bb[9],cc[6],dd[6];
void delay_1(uint z) //Zms延时
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void mDelay(unsigned char j)
{
unsigned int i;
for(;j>0;j--)
{
for(i=0;i<125;i++)
{;}
}
}
void delay1(uint i) //Ims延时
{
uint j;
for(;i>0;i--)
for(j=100;j>0;j--);
}
void send_c(uchar cc) //串口发送字符
{
SBUF =cc;
while(!TI );
TI = 0;
}
void send_u(uchar *tab) //串口发送字符串
{
while((*tab)!= '\0')
{
SBUF =*tab;
while(!TI );
TI = 0;
tab++;
}
send_c(0x0d); //结束字符 00001101
send_c(0x0a); //00001010
}
void uart_init() //串口初始化
{
SCON=0x50; //允许接收 ---串口工作方式1 REN=1
PCON=0x00; //波特率不加倍
TMOD=0x20; //定时器1方式2
TH1=0xfd; // 波特率设置为9600
TL1=0xfd;
TR1=1;
ES=1; //开串口终端
}
void write_com(uchar com) //lcd1602读写
{
lcdrs=0; //低电平表示输入指令
lcden=0;
P0=com; //送给P1口
delay1(5);
lcden=1; //EN电平由高变低,表示执行指令,所以先拉高
delay1(5);
lcden=0;
}
void write_data(uchar dat)
{
lcdrs=1; //高电平表示输入数据
lcden=0; //先置低电平
P0=dat;
delay1(5);
lcden=1; //先置高电平,后置低电平,执行指令
delay1(5);
lcden=0;
}
void lcall1() //请输入密码
{
write_com(0x01); // 清屏幕指令,将以前的显示内容清除
write_com(0x80); // 第一行---0x80+
for(num=0;num<16;num++)
{
write_data(table1[num]); //显示"Please enter the"
delay1(20);
}
write_com(0xc0); //第二行----0xc0+ 第四位写入
for(num=0;num<9;num++)
{
write_data(table2[num]); //显示"password:"
delay1(20);
}
}
void lcall2() //请按确认键
{
write_com(0x01);
write_com(0x80);
for(num=0;num<16;num++)
{
write_data(table3[num]); //显示"Please press the"
delay1(20);
}
write_com(0xc2);
for(num=0;num<11;num++)
{
write_data(table4[num]); //显示"confirm key"
delay1(20);
}
}
void lcall3() //你输入的密码有误
{
write_com(0x01);
write_com(0x80);
for(num=0;num<16;num++)
{
write_data(table5[num]); //显示"Your password is"
delay1(20);
}
write_com(0xc3);
for(num=0;num<9;num++)
{
write_data(table6[num]); //显示 "incorrect"
delay1(20);
}
}
void lcall4() //欢迎光临
{
write_com(0x01);
write_com(0x82);
for(num=0;num<11;num++)
{
write_data(table7[num]); //显示"Welcome !!!"
delay1(20);
}
}
void lcall5()//请输入管理者密码
{
write_com(0x01);
write_com(0x80);
for(num=0;num<16;num++)
{
write_data(table1[num]); //显示"Please enter the"
delay1(20);
}
write_com(0xc0);
for(num=0;num<15;num++)
{
write_data(table11[num]); //显示"Senior Password"
delay1(20);
}
EA=1; ///////
RI=0; //////
delay1(2);
delay1(2);
}
void lcall6()//请输入新密码
{
write_com(0x01);
write_com(0x80);
for(num=0;num<16;num++)
{
write_data(table1[num]);
delay1(20);
}
write_com(0xc2);
for(num=0;num<13;num++)
{
write_data(table12[num]); //显示"new password:"
delay1(20);
}
}
void lcall7()//请再输入一次
{
write_com(0x01);
write_com(0x80);
for(num=0;num<16;num++)
{
write_data(table1[num]);
delay1(20);
}
write_com(0xc2);
for(num=0;num<15;num++)
{
write_data(table13[num]); //显示"password again:"
delay1(20);
}
}
void lcall8() //密码已修改成功
{
write_com(0x01);
write_com(0x80);
for(num=0;num<16;num++)
{
write_data(table14[num]); //显示"Password changed"
delay1(20);
}
write_com(0xc2);
for(num=0;num<12;num++)
{
write_data(table15[num]); //显示"successfully"
delay1(20);
}
}
void lcall9() //5*
{
write_com(0x01);
write_com(0x89);
for(num=0;num<5;num++)
{
write_data(table8[num]); //显示5个"*"
delay1(20);
}
}
void lcall10() //8*
{
write_com(0x01);
write_com(0x89);
for(num=0;num<8;num++)
{
write_data(table16[num]); //显示 8个"*"
delay1(20);
}
}
void lcall11()
{
write_com(0x01);
write_com(0x80);
for(num=0;num<14;num++)
{
write_data(adata[num]); //"!!!!worning!!!!"
delay1(20);
}
delay_1(2000);
}
void lcall12() //请按A进入系统
{
write_com(0x01); // 清屏幕指令,将以前的显示内容清除
write_com(0x80); // 第一行---0x80+
for(num=0;num<14;num++)
{
write_data(table17[num]);
delay1(20);
}
write_com(0xc0); //第二行----0xc0+ 第四位写入
for(num=0;num<12;num++)
{
write_data(table18[num]);
delay1(20);
}
}
void lcall13() //显示第一次密码和第二次密码不一样
{
write_com(0x01); // 清屏幕指令,将以前的显示内容清除
write_com(0x80); // 第一行---0x80+
for(num=0;num<14;num++)
{
write_data(table24[num]);
delay1(20);
}
write_com(0xc0); //第二行----0xc0+ 第四位写入
for(num=0;num<10;num++)
{
write_data(table25[num]);
delay1(20);
}
}
void lcall14() //请按A退回主页
{
write_com(0x01); // 清屏幕指令,将以前的显示内容清除
write_com(0x80); // 第一行---0x80+
for(num=0;num<14;num++)
{
write_data(table21[num]);
delay1(20);
}
write_com(0xc0); //第二行----0xc0+ 第四位写入
for(num=0;num<12;num++)
{
write_data(table22[num]);
delay1(20);
}
}
void lcall15() //键盘已锁定
{
write_com(0x01); // 清屏幕指令,将以前的显示内容清除
write_com(0x80); // 第一行---0x80+
for(num=0;num<15;num++)
{
write_data(table23[num]);
delay1(20);
}
}
/*------------------------------------------------
at24c02 开始IIC总线
------------------------------------------------*/
void Start(v