#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit SCL = P2^1;
sbit SDA = P2^0;
sbit RS = P2^6;
sbit RW = P2^5;
sbit EN = P2^7;
sbit DCLK = P3^6;
sbit DIN = P3^4;
sbit CS = P3^5;
sbit DOUT = P3^7;
sbit key1 = P3^1;
sbit key2 = P3^0;
sbit key3 = P3^2;
sbit key4 = P3^3;
uchar sec1,sec2,sec3,sec4,t,i;
int s = 0, k=0, wei = 0,NEW1,NEW2,NEW3,NEW4,old1,old2,old3,old4,wei1,k1;
uchar table1[] = "WELCOME";
uchar table2[] = "LOCK";
uchar table3[] = "Input Password:";
uchar table4[] = "CONGRATULATIONS";
uchar table5[] = "ERROR";
uchar table6[] = "Change Password";
uchar table7[] = "Seting Over";
uchar table8[] = "0000";
void delay5us()
{
;;
}
void delayms(uint xms)
{
int i,j;
for(i=xms;i>0;i--)
for(j=114;j>0;j--);
}
void init()
{
SDA = 1;
delay5us();
SCL = 1;
delay5us();
}
void start()
{
SDA = 1;
delay5us();
SCL = 1;
delay5us();
SDA = 0;
delay5us();
}
void respons()
{
uchar i = 0;
SCL = 1;
delay5us();
while((SDA==1)&&(i<250))
i++;
SCL = 0;
delay5us();
}
void stop()
{
SDA = 0;
delay5us();
SCL = 1;
delay5us();
SDA = 1;
delay5us();
}
void writebyte(uchar DAT) //發(fā)送
{
uchar i,temp;
temp = DAT;
for(i=0;i<8;i++)
{
temp = temp<<1;
SCL = 0;
delay5us();
SDA = CY;
delay5us();
SCL = 1;
delay5us();
}
SCL = 0;
delay5us();
SDA = 1;
delay5us();
}
uchar readbyte() //接受
{
uchar i,k;
SCL = 0;
delay5us();
SDA = 1;
delay5us();
for(i=0;i<8;i++)
{
SCL = 1;
delay5us();
k = (k<<1)|SDA;
SCL = 0;
delay5us();
}
return (k);
}
void write_add(uchar address,uchar DAT)
{
start();
writebyte(0xA0);
respons();
writebyte(address);
respons();
writebyte(DAT);
respons();
stop();
}
uchar read_add(uchar address)
{
uchar DAT;
start();
writebyte(0xA0);
respons();
writebyte(address);
respons();
start();
writebyte(0xA1);
respons();
DAT = readbyte();
stop();
return(DAT);
}
void write_com(int com)
{
EN = 0;
RS = 0;
RW = 0;
P0 = com;
delayms(1);
EN = 1;
delayms(5);
EN = 0;
}
void write_date(int date)
{
EN = 0;
RS = 1;
RW = 0;
P0 = date;
delayms(1);
EN = 1;
delayms(5);
EN = 0;
}
void lcdset()
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void SPI_Write(uchar dat)
{
uchar i;
DCLK = 0;
for(i=0; i<8; i++)
{
DIN = dat >> 7;
dat <<= 1;
DCLK = 0;
DCLK = 1;
}
}
uint SPI_Read(void)
{
uint i, dat = 0;
DCLK = 0;
for(i=0; i<12; i++)
{
dat <<= 1;
DCLK = 1;
DCLK = 0;
dat |= DOUT;
}
return dat;
}
uint Read_AD_Data(uchar cmd)
{
uchar i;
uint AD_Value;
DCLK = 0;
CS = 0;
SPI_Write(cmd);
for(i=6; i>0; i--);
DCLK = 1;
_nop_();
_nop_();
DCLK = 0;
_nop_();
_nop_();
AD_Value=SPI_Read();
CS = 1;
return AD_Value;
}
void datapros()
{
uint temp;
static uint j;
if(j==50)
{
j=0;
temp = Read_AD_Data(0x94);
}
j++;
if(temp>0&&temp<400)
{
t =0;
sec1 = 0;
sec2 = 0;
sec3 = 0;
sec4 = 0;
}
if(temp>400&&temp<800)
{
t =1;
sec1 = 1;
sec2 = 1;
sec3 = 1;
sec4 = 1;
}
if(temp>800&&temp<1200)
{
t =2;
sec1 = 2;
sec2 = 2;
sec3 = 2;
sec4 = 2;
}
if(temp>1200&&temp<1600)
{
t =3;
sec1 = 3;
sec2 = 3;
sec3 = 3;
sec4 = 3;
}
if(temp>1600&&temp<2000)
{
t =4;
sec1 = 4;
sec2 = 4;
sec3 = 4;
sec4 = 4;
}
if(temp>2000&&temp<2400)
{
t =5;
sec1 = 5;
sec2 = 5;
sec3 = 5;
sec4 = 5;
}
if(temp>2400&&temp<2800)
{
t =6;
sec1 = 6;
sec2 = 6;
sec3 = 6;
sec4 = 6;
}
if(temp>2800&&temp<3600)
{
t =7;
sec1 = 7;
sec2 = 7;
sec3 = 7;
sec4 = 7;
}
if(temp>3600&&temp<4000)
{
t =8;
sec1 = 8;
sec2 = 8;
sec3 = 8;
sec4 = 8;
}
if(temp>4000&&temp<4400)
{
t =9;
sec1 = 9;
sec2 = 9;
sec3 = 9;
sec4 = 9;
}
}
void display()
{
if(s==0)
{
write_com(0x80);
for(i=0;i<7;i++)
{
write_date(table1[i]);
}
}
if(s==1)
{
write_com(0x80);
for(i=0;i<14;i++)
{
write_date(table3[i]);
}
write_com(0x80+0x40+k);
write_date(0x30+t);
}
if(s==2)
{
write_com(0x80);
for(i=0;i<15;i++)
{
write_date(table4[i]);
}
}
if(s==3)
{
write_com(0x80);
for(i=0;i<5;i++)
{
write_date(table5[i]);
}
}
if(s==4)
{
write_com(0x80);
for(i=0;i<15;i++)
{
write_date(table6[i]);
}
write_com(0x80+0x46+k1);
write_date(0x30+sec1);
write_com(0x80+0x46+k1);
write_date(0x30+sec2);
write_com(0x80+0x46+k1);
write_date(0x30+sec3);
write_com(0x80+0x46+k1);
write_date(0x30+sec4);
}
if(s==5)
{
write_com(0x80);
for(i=0;i<11;i++)
{
write_date(table7[i]);
}
}
}
void keyscan();
void check_password();
void main()
{
init();
lcdset();
old1 = read_add(1);
old2 = read_add(2);
old3 = read_add(3);
old4 = read_add(4);
// if(sec > 100) //防止首次讀數(shù)據(jù)出錯(cuò)
// sec = 0;
while(1)
{
datapros();
keyscan();
display();
}
}
void keyscan()
{
if(key1==0)
{
delayms(1);
if(key1==0)
{
lcdset();
s = 1;
display();
while(!key1);
}
}
if(key2==0)
{
delayms(1);
if(key2==0)
{
switch(wei)
{
case 0: NEW1 = t; break;
case 1: NEW2 = t; break;
case 2: NEW3 = t; break;
case 3: NEW4 = t; break;
}
wei++;
s = 1;
k++;
if(k>=4)
k=0;
display();
if(wei >=4)
check_password();
while(!key2);
}
}
if(key3==0)
{
delayms(1);
if(key3==0)
{
s = 4;
while(!key3);
}
}
if(key4==0)
{
delayms(1);
if(key4==0)
{
switch(wei1)
{
case 0: old1 = sec1; write_add(1,old1);break;
case 1: old2 = sec2; write_add(2,old2);break;
case 2: old3 = sec3; write_add(3,old3);break;
case 3: old4 = sec4; write_add(4,old4);break;
}
wei1++;
k1++;
if(k1>=4)
{
k1=0;
}
display();
if(wei1 >=4)
{
lcdset();
s = 5;
display();
}
while(!key4);
}
}
}
void check_password()
{
if((NEW1==old1)&&(NEW2==old2)&&(NEW3==old3)&&(NEW4==old4))
{
lcdset();
s = 2;
display();
}
else
{
lcdset();
s = 3;
display();
}
}
|