//1602的控制脚 sbit lcd1602_rs=P2^7; sbit lcd1602_rw=P2^6; sbit lcd1602_en=P2^5;
sbit ALAM = P2^1; sbit KEY = P3^6;
sbit open_led=P2^2;
bit operation=0; bit pass=0;
//操作标志位 //开锁指示灯(选配)
//报警
//开锁
//密码正确标志
//重置输入允许标志 //3秒按键标志位
bit ReInputEn=0;
bit s3_keydown=0;
unsigned char countt0,second; //t0中断计数器,秒计数器
void Delay5Ms(void);
unsigned char code a[]={0xFE,0xFD,0xFB,0xF7}; 描控制表
//液晶显示数据数组
unsigned char code start_line[]
= {\
//控盘扫
//声明延时函数
unsigned char code name[] = {\//显示名称 unsigned char code Correct[] = {\ 确
unsigned char code Error[] = {\
//输入错//输入正
21
误
unsigned char code codepass[] = {%unsigned char code LockOpen[] = {\ unsigned char code SetNew[]
= {\
//INPUT //OPEN
unsigned char code Input[] = {\ unsigned char code ResetOK[] = {%unsigned char code initword[] = {%unsigned char code Er_try[] unsigned char code again[]
= {\= {\
= {\
unsigned char code yourPassword[] unsigned char InputData[6]; 存区
//输入密码暂
unsigned char CurrentPassword[6]={1,3,1,4,2,0}; (只可在程序中修改)
unsigned char TempPassword[6]; unsigned char N=0;
//密码输入位数记数
//错误次数计数
//管理员密码
unsigned char ErrorCont; unsigned char t;
//正确输入计数
//重新输入计数
//输入管
unsigned char InPut_En;
unsigned char code initpassword[6]={0,0,0,0,0,0}; 理员密码后将密码初始为000000
//=====================5ms延时============================== void Delay5Ms(void) { }
unsigned int TempCyc = 5552; while(TempCyc--);
22
//===================400ms延时============================== void Delay400Ms(void) {
unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA--) {
TempCycB=7269; while(TempCycB--); } }
//==================================================================================================
//=======================================LCD1602====================================================
//==================================================================================================
#define yi 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)
#define er 0x80+0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)
//----------------延时函数,后面经常调用---------------------- void delay(uint xms)//延时函数,有参函数
23
{ }
//--------------------------写指令--------------------------- void write_1602com(uchar com)//****液晶写入指令函数**** { }
//-------------------------写数据----------------------------- void write_1602dat(uchar dat)//***液晶写入数据函数**** { }
lcd1602_rs=1;//数据/指令选择置为数据 lcd1602_rw=0; //读写选择置为写 P0=dat;//送入数据 delay(1);
lcd1602_en=1; //en置高电平,为制造下降沿做准备 delay(1);
lcd1602_en=0; //en由高变低,产生下降沿,液晶执行命令 lcd1602_rs=0;//数据/指令选择置为指令 lcd1602_rw=0; //读写选择置为写 P0=com;//送入数据 delay(1);
lcd1602_en=1;//拉高使能端,为制造有效的下降沿做准备 delay(1);
lcd1602_en=0;//en由高变低,产生下降沿,液晶执行命令 uint x,y;
for(x=xms;x>0;x--) for(y=110;y>0;y--);
24
//-------------------------写数据----------------------------- void write_string(uchar dat,unsigned char *str)//***液晶写入数据函数****
{ if(dat)
write_1602com(dat); while(*str){
write_1602dat(*str); str++;} }
//-------------------------初始化------------------------- void lcd_init(void) {
write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,
8位数据
}
//========================================================================================
//=========================================================================================
write_1602com(0x0c);//开显示不显示光标 write_1602com(0x06);//整屏不移动,光标自动右移 write_1602com(0x01);//清显示
25