|
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar key[]="7777"; //初始密碼
#define I2CDelay() {_nop_();_nop_();_nop_();_nop_();}
sbit DOUT = P3^7;
sbit CLK = P3^6;
sbit DIN = P3^4;
sbit CS = P3^5; //eeprom 定義
sbit lcden=P2^7;
sbit lcdrs=P2^6;
sbit lcdrw=P2^5; //LCD1602定義
sbit key2=P3^0; //比較函數(shù)
sbit key3=P3^2; //確認(rèn)鍵
uchar code table[]="012345789";
uint bai,num,keynum1,d1,d2,d3,d4;
void delay(uint i)
{
while(i--);
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void SPI_Write(uchar dat)
{
uchar i;
CLK = 0;
for(i=0; i<8; i++)
{
DIN = dat >> 7;
dat <<= 1;
CLK = 0;
CLK = 1;
}
}
uint SPI_Read(void)
{
uint i, dat=0;
CLK = 0;
for(i=0; i<12; i++)
{
dat <<= 1;
CLK = 1;
CLK = 0;
dat |= DOUT;
}
return dat;
}
uint Read_AD_Data(uchar cmd)
{
uchar i;
uint AD_Value;
CLK = 0;
CS = 0;
SPI_Write(cmd);
for(i=6; i>0; i--);
CLK = 1;
_nop_();
_nop_();
CLK = 0;
_nop_();
_nop_();
AD_Value=SPI_Read();
CS = 1;
return AD_Value;
}
void write_com(uint com)
{
lcdrs=0;
P0=com;
lcden=0;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void write_date(uint date)
{
lcdrs=1;
P0=date;
lcden=0;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void init_lcd()
{
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void datapros()
{
uint temp;
static uchar i;
if(i==10)
{
i=0;
temp = Read_AD_Data(0x94);
}
i++;
}
void display()
{
uint temp;
bai=temp%1000/100; //將繼電器阻值百位作為每一次輸入的密碼
write_com(0x80);
write_date(table[bai]);
}
void compare() //比較函數(shù) 比較設(shè)定數(shù)組和輸入數(shù)組
{
if(d1==key[0]&&d2==key[1]&&d3==key[2]&&d4==key[3])
{
write_com(0x80+4);
write_date('1'); //若每一位數(shù)組都相同,則在1602液晶上顯示1
}
else
{
write_com(0x80+5);
write_date('0'); //若并非每一位數(shù)組都相同,則在1602液晶上顯示0
}
}
void keypro()
{
if(key2==0)
{
delayms(5);
if(key2==0)
{
compare();
}
while(!key2);
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
keynum1++;
while(!key3);
if(keynum1==1)
{
write_com(0x80+0x40);
write_date(table[bai]);
d1=table[bai];
}
if(keynum1==2)
{
write_com(0x80+0x40+1);
write_date(table[bai]);
d2=table[bai];
}
if(keynum1==3)
{
write_com(0x80+0x40+2);
write_date(table[bai]);
d3=table[bai];
}
if(keynum1==4)
{
write_com(0x80+0x40+3);
write_date(table[bai]);
d4=table[bai];
}
}
}
}
void main()
{
init_lcd();
while(1)
{
keypro();
datapros();
display();
}
}
|
|