#include
#include"intrins.h"
#include"key.h"
#include"xsh.h"
#include"24c02.h"
#define ulong unsigned long
bit BJCB=0;//报警标志
XG=0,//修改密码标志位
BJ=0,//报警标志位
SJ=0;//锁键盘标志位
// xg=0;//修改密码标志位
uchar PSWD0_0[16]={0};//密码输入缓存存储单元
//uchar code PSWD0_1[16]={1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8};//用户初始密码存储单元
//uchar PSWD1_0[16]={0};//读出密码缓存存储单元
uchar PSWD1_1[16]={1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8};//管理员初始密码存储单元
sbit OUT=P3^5;//输出端口
sbit L1=P0^2;//上电指示
sbit L2=P0^1;//开锁指示
sbit L3=P0^0;//报警指示
uint mg=0,//密码个数
KSC=0,//开锁次数
BJC=0,//报警次数
TCNTY=0,//用户按键定时次数累加
TCNTG=0,//管理员输入密码定时次数
yhsh,//用户输入标志位
glsh,//管理员输标志位
shw;//密码输完标志位
void yhmimaxig();//密码修改程序
void glmimaxig();//管理员修改程序
void bjyin(ulong t)
{
ulong c;
uint n;
for(c=0;c temp=P2; temp=temp&0x0f; } while(temp!=0x0f); flag=1; yin(); } } P2=0Xdf; temp=P2&0x0f; if(temp!=0x0f) {delay(5); if(temp!=0x0f) {temp=P2; switch(temp) { case 0xd7:num=8; break; case 0xdb:num=9; break; case 0xdd:num=10; break; case 0xde:num=11; break; } do{ temp=P2; temp=temp&0x0f; } while(temp!=0x0f); flag=1; yin(); } } P2=0Xef; temp=P2&0x0f; if(temp!=0x0f) {delay(5); if(temp!=0x0f) {temp=P2; switch(temp) { case 0xe7:num=12; break; case 0xeb:num=13; break; case 0xed:num=14; break; case 0xee:num=15; break; } do{ temp=P2; temp=temp&0x0f; } while(temp!=0x0f); flag=1; yin(); } } return(num); }#endif
#ifndef _xsh_h#define _xsh_h#include #define uchar unsigned char #define uint unsigned intsbit shj=P1^0;//串口数据口sbit sck=P1^1;//串口时钟uchar code tab[20]={ 0x88,/*0*/ 0xBE,/*1*/ 0xC4,/*2*/ 0x94,/*3*/ 0xB2,/*4*/ 0x91,/*5*/ 0x81,/*6*/ 0xBC,/*7*/ 0x80,/*8*/ 0x90,/*9*/ 0xA0,/*A*/ 0x83,/*b*/ 0xC9,/*C*/ 0x86,/*d*/ 0xC1,/*E*/ 0xE1,/*F*/ 0xA8,/*N*/ 0xF7,/*-*/ 0x94,/*反E*/ 0xE0/*P*/ }; //共阳数码管uchar code sb0[3]={8,8,8},/*开锁后显示*/ code sb1[3]={0,15,15},/*开锁前显示*/ code sb2[6]={17,17,17,17,17,17},/*修改显示*/ code sb3[6]={16,0,16,0,16,0},/*第一二次报警显示*/ code sb4[6]={8,8,8,8,8,8},/*管理员进入显示*/ code sb5[6]={18,18,18,18,18,18};/*第三次报警显示*/
//*显示电路*/void writedata(uchar num)//传送一个字节{ uchar temp; int i; temp=tab[num]; for(i=0;i int i; uchar m; for(i=0;iunsigned char temp;for(;number>=1;number--) { for(temp=112;temp>=1;temp--) ;}}void i2cStart(void){ SDA=1; SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); SDA=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); SCL=0;}void i2cStop(void){ SDA=0; SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); SDA=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }void i2cAck(void){ SDA=0; SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); SDA=1; SCL=0;}void i2cNoAck(void){ SDA=1; SCL=1; _nop_(); _nop_(); _nop_(); _nop_(); SDA=0; SCL=0;}void i2cWrite8Bit(unsigned char input){ unsigned char temp; for(temp=8;temp!=0;temp--) { SDA=(bit)(input&0x80); SCL=1;_nop_(); _nop_(); _nop_();_nop_(); _nop_();SCL=0;input=input SCL=1;_nop_(); _nop_(); _nop_();rbyte=rbyte i2cWrite8Bit(*WRdata); i2cAck(); WRdata++; } i2cStop(); DelayMs(20); return(1);} unsigned char i2cRead24LC16B(unsigned char RomAddress){ unsigned char x; i2cStart(); i2cWrite8Bit(WriteDeviceAddress); i2cAck(); i2cWrite8Bit(RomAddress); i2cAck(); i2cStart(); i2cWrite8Bit(ReadDeviceAddress); i2cAck(); _nop_(); _nop_(); _nop_(); x=0; x=i2cRead8Bit(); i2cNoAck(); i2cStop(); return(x);}//从24c02中读出多个字节bit Read_page24c02(uchar RomAddress,uchar p[],uint n) { uint i; i2cStart(); i2cWrite8Bit(WriteDeviceAddress); i2cAck(); i2cWrite8Bit(RomAddress); i2cAck(); i2cStart(); i2cWrite8Bit(ReadDeviceAddress); i2cAck(); _nop_(); _nop_(); _nop_(); for(i=0;i |