本文中电子密码锁将实现以下功能:
1.通过矩阵键盘来输入密码,如果密码正确则门打开,如果密码不正确提示剩余输入次数,次数为0则锁定2分钟后才能再输入。
2.门打开后等待关门信号(本文中用P3^4接按键模拟),待收到信号后表示门已关闭。
3.可以通过按键来修改密码,修改前需要验证原密码。
4.支持掉电保存功能。
5. 为了防止密码被窃取,本文中的密码采用ASCII存放,并且存放地址无规则(可根据自己需求修改)。
特别说明:
1. 由于代码长度过大,请大家用大内存的单片机测试(本文中采用STC90C58RD+ 12T单片机);
2. CPU时钟请用11.0592MHz(液晶画点部分用22.1184MHz测试时失败!估计是速度过高);
3. 本文中的EEprom采用的是STC单片机内部EEProm,如果大家要用24Cxx系列或其它存储器请自行修改代码;
4. 由于测试最小系统接口限制,请大家测试时自行修改接口定义(液晶接口、矩阵接口、独立按键接口);
5. 本文中开、关门控制接口程序中没有引出,只用到“Door”这个逻辑型变量,大家在做实物时请自行定义一个接口,并赋该变量值即可!
6. 第一次使用时(用STC自带EEProm)请先写入初始密码(将主程序屏蔽的那7行代码解除屏蔽,写入后再屏蔽掉即可!),程序中的初始密码为“888888”;
7. 本文中采用的是12864图形液晶(不带字库的),请大家务必注意!!!
8. 本文只简单的实现的密码锁的基础功能,需要更高级功能的朋友请自行添加!
9. 由于个人能力有限,程序中难免存在BUG, 遇到BUG请大家及时反馈以便在后期加以修正。
最后祝大家身体健康,万事如意!
外观图
欢迎界面
工作界面
门关闭提示
密码输入错误提示
修改密码界面
外观图
#include "reg52.h"#include "intrins.h" #include "Variable.h" #include "EEProm.h" #include "Function.h" #include "L12864.h" #include "L12864_Windows.h" #include "Key_Alone.h" #include "Key_44.h" #include "math.h" void main(void) { //IapEraseSector(0x8000);//擦除第一个扇区 //IapProgramunsigned(1,0x38);//写数据 //IapProgramunsigned(9,0x38);//写数据 //IapProgramunsigned(6,0x38);//写数据 //IapProgramunsigned(8,0x38);//写数据 //IapProgramunsigned(0,0x38);//写数据 //IapProgramunsigned(3,0x38);//写数据 ReadPassWord();//读出密码到本地 InitTimer0();//定时器中断初始化 L12864_init(); L12864_Windows_Init();//载入初始化界面 L12864_Delay1S(); L12864_Windows_Input(0);//载入密码输入0次界面 MODE=1;//置模式一 输入开门密码模式 while(1) { Key_44_KeySan(); Key_44_KeyHandle(); } } void Timer0Interrupt(void) interrupt 1 { TH0 = 0x0B8; TL0 = 0x00; ms++; if(ms==50) { ms=0; s--; if(s==-1) { s=59; fen--; } if(fen>=2) { Unit=0; } else { Unit=1; } } } ★===================主程序结束=================== ★=================== 全 局 变 量 =================== #define Count 3 #define ErrMin 2 unsigned char jianzhi; unsigned char MODE; //模式 0=不能输入 1=输入开门密码 2=修改密码 3=输入新密码1 4=输入新密码2 5=门已经开启 6=等待时间 unsigned char InPutCount=0; //输入计次 unsigned char ErrCount=Count; //输入错误计次 unsigned char ErrWait=ErrMin; //错误等待时间 bit KeyAvailable; //key按键可用 bit Door=1; //门状态 0=开 1=关 bit NextCycle_MODE3,NextCycle_MODE4; unsigned char InPutPassWord[6]; unsigned char InPutPassWordNew1[6]; unsigned char InPutPassWordNew2[6]; unsigned char PassWord[6]={0,0,0,0,0,0}; unsigned char ms,NewS,Newfen,s=59,fen=ErrMin; bit Unit; //倒计时单位 0为分钟 1为秒 ★==================全局变量结束=================== ★================== EEProm代码=================== sfr IAP_DATA = 0xE2; //Flash 数据注册 sfr IAP_ADDRH = 0xE3; //Flash 地址高位 sfr IAP_ADDRL = 0xE4; //Flash 地址低位 sfr IAP_CMD = 0xE5; //Flash 命令注册 sfr IAP_TRIG = 0xE6; //Flash 命令触发 sfr IAP_CONTR = 0xE7; //Flash 控制方式注册 #define CMD_IDLE 0 //Stand-By #define CMD_READ 1 //字节读取 #define CMD_PROGRAM 2 //字节编程 #define CMD_ERASE 3 //扇区擦除 #define ENABLE_IAP 0x81 //if SYSCLK<20MHz #define IAP_ADDRESS 0x08000 //注意 地址必须加上这个8000 不然就是操作的单片机内存 void IapIdle(void) { IAP_CONTR = 0; IAP_CMD = 0; IAP_TRIG = 0; IAP_ADDRH = 0x80; IAP_ADDRL = 0; } unsigned char IapReadunsigned (unsigned int V) { unsigned char dat; unsigned int addr; addr=V+IAP_ADDRESS; IAP_CONTR = ENABLE_IAP; IAP_CMD = CMD_READ; IAP_ADDRL = addr; IAP_ADDRH = addr >> 8; IAP_TRIG = 0x46; IAP_TRIG = 0xb9; _nop_(); dat = IAP_DATA; IapIdle(); return dat; } void IapProgramunsigned (unsigned int V, unsigned char dat) { unsigned int addr; addr=V+IAP_ADDRESS; IAP_CONTR = ENABLE_IAP; IAP_CMD = CMD_PROGRAM; IAP_ADDRL = addr; IAP_ADDRH = addr >> 8; IAP_DATA = dat; IAP_TRIG = 0x46; IAP_TRIG = 0xb9; _nop_(); IapIdle(); } void IapEraseSector(unsigned int addr) { IAP_CONTR = ENABLE_IAP; IAP_CMD = CMD_ERASE; IAP_ADDRL = addr; IAP_ADDRH = addr >> 8; IAP_TRIG = 0x46; IAP_TRIG = 0xb9; _nop_(); IapIdle(); } ★================EEProm代码结束=================== ★=================Function代码==================== void InitTimer0(void) //20ms中断初始化 { TMOD = 0x01; TH0 = 0x0B8; TL0 = 0x00; EA = 1; ET0 = 1; TR0 = 0; } bit PassWordCheck(void) { unsigned char i; bit ReturnV; ReturnV=1; for(i=0;i<6;i++) { if(InPutPassWord[i]!=PassWord[i]) { ReturnV=0; } } return ReturnV; } bit PassWordCheckNew(void) { unsigned char i; bit ReturnV; ReturnV=1; for(i=0;i<6;i++) { if(InPutPassWordNew1[i]!=InPutPassWordNew2[i]) { ReturnV=0; } } return ReturnV; } void ClrarPassBuf(void) {unsigned char i; for(i=0;i<6;i++) { InPutPassWord[i]=0; InPutPassWordNew1[i]=0; InPutPassWordNew2[i]=0; } } void ReadPassWord(void) { PassWord[0]=IapReadunsigned(1); PassWord[1]=IapReadunsigned(9); PassWord[2]=IapReadunsigned(6); PassWord[3]=IapReadunsigned(8); PassWord[4]=IapReadunsigned(0); PassWord[5]=IapReadunsigned(3); } void WriteNewPassWord(void) { unsigned char i; IapEraseSector(0x8000); //擦除第一个扇区 不擦除写不了 IapProgramunsigned(1,InPutPassWordNew2[0]); IapProgramunsigned(9,InPutPassWordNew2[1]); IapProgramunsigned(6,InPutPassWordNew2[2]); IapProgramunsigned(8,InPutPassWordNew2[3]); IapProgramunsigned(0,InPutPassWordNew2[4]); IapProgramunsigned(3,InPutPassWordNew2[5]); for(i=0;i<6;i++) { PassWord[i]=InPutPassWordNew2[i]; } } ★===============Function代码结束=================== ★================12864底层代码==================== /* ◆------ L12864驱动底层函数 ------◆ STC90C58RD+ 11.0592MHz 画点只能在11.0592MHz下运行 !!!改变晶振请重写延时函数 */ #include "L12864_CODE.h" #define L12864_Port P0 #define L12864_Data P2 #define L12864_comm 0 //常量 写命令 #define L12864_data 1 //常量 写数据 #define L12864_Screen_L 1 //常量 左屏 #define L12864_Screen_R 2 //常量 右屏 #define L12864_Screen_LR 3 //常量 左右屏 #define L12864_Screen_NULL 0//常量 无 /****************************************************************** - 说明:端口定义 - 备注:无 ******************************************************************/ sbit L12864_RST = L12864_Port^3; //复位端,低电平有效。 sbit L12864_CS2 = L12864_Port^2; //右屏片选(高电平有效) sbit L12864_CS1 = L12864_Port^4; //左屏片选(高电平有效) sbit L12864_E = L12864_Port^5; //读写使能,高电平有效,下降沿锁定数据。 sbit L12864_RW = L12864_Port^6; //读/写选择:高电平为读数据,低电平为写数据。 sbit L12864_RS = L12864_Port^7; //数据/指令选择:高电平为数据,低电平为指令。 /****************************************************************** - 功能描述:延时子程序 - 入口参数:长整数型 - 参 数 值:0-65535 - 返回说明:无 - 备 注:无 ******************************************************************/ void L12864_Delayus(unsigned int V) { while(V--); } void L12864_Delay50us(void) { unsigned char a,b; for(b=1;b>0;b--) for(a=20;a>0;a--); } void L12864_Delay1S(void) { unsigned char a,b,c; for(c=175;c>0;c--) for(b=22;b>0;b--) for(a=118;a>0;a--); } /****************************************************************** - 功能描述:写数据(命令)子函数 - 入口参数:x,dat - 参 数 值:x=0 ro 1 dat=0x00-0xff; - 返回说明:无 - 备 注:X=0 写命令 x=1 写数据 ******************************************************************/ void L12864_Write(bit x,unsigned char dat) { if(x) L12864_RS=1; else L12864_RS=0; // RS置高电平 L12864_RW=0; // RW置低电平 L12864_Data=dat; // 写入数据 L12864_E=1; // E下降沿 L12864_Delayus(5); L12864_E=0; } /****************************************************************** - 功能描述:读数据子程序 - 入口参数:无 - 参 数 值:无 - 返回说明:无 - 备 注: ******************************************************************/ unsigned char L12864_Read(void) { unsigned char dat; L12864_Data=0xff; //读空操作 L12864_RS=1; //the data L12864_RW=1; //read L12864_E=1; // E下降沿 L12864_E=1; // L12864_E=0; // L12864_Data=0xff; //读空操作 L12864_RS=1; //the data L12864_RW=1; //read L12864_E=1; // E下降沿 dat=L12864_Data; // L12864_E=0; // return dat; // } /****************************************************************** - 功能描述:初始化子程序 - 入口参数:无 - 参 数 值:无 - 返回说明:无 - 备 注: ******************************************************************/ void L12864_init(void)//初始化12864 { L12864_Delay50us(); //延时40ms以上 L12864_RST=1; //RST上升沿复位 L12864_Delayus(2); L12864_RST=0; L12864_Delayus(5); L12864_RST=1; L12864_CS1=1; //片选 L12864_CS2=1; L12864_Delayus(5); L12864_Write(L12864_comm,0x3e);//关显示 L12864_Delayus(5); L12864_Write(L12864_comm,0x3f);//开显示 L12864_Delayus(5); L12864_CS1=0; //关闭片选 L12864_CS2=0; } /****************************************************************** - 功能描述:清屏子程序 - 入口参数:无 - 参 数 值:无 - 返回说明:无 - 备 注: ******************************************************************/ void L12864_ClearScreen(void) {unsigned char x,y; L12864_CS1=L12864_CS2=1; //选中屏 L12864_Write(L12864_comm,0xc0); //定义起始行 for(x=0;x<8;x++) { L12864_Write(L12864_comm,0xb8+x); //定义页 for(y=0;y<64;y++) { L12864_Write(L12864_comm,0x40+y); //定义列 L12864_Write(L12864_data,0x00); //写数据 } } } /****************************************************************** - 功能描述:画点子程序 - 入口参数:X,Y,DOT - 参 数 值:X=0-127 Y=0-63 DOT=0 or 1 - 返回说明:无 - 备 注:X,Y为要画点的坐标位置 DOT表示画点(1)或清点(0) ******************************************************************/ void L12864_DrawDot(unsigned char X,unsigned char Y,bit DOT) { unsigned char X2,Y2,Temp; unsigned char code Tab[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; if(X>127)X=127; //如果X超出范围 则X为最大位置 if(Y>63)Y=63; //如果Y超出范围 则Y为最大位置 if(X<64) //如果X小于64 则选择左半屏 { L12864_CS1=1; L12864_CS2=0; X2=X; } else //如果X大于等于64则选择右半屏 { L12864_CS1=0; L12864_CS2=1; X2=X-64; } Y2=Y/8; //定义Y所在页的位置 L12864_Write(L12864_comm,0xc0); //设定行地址,固定! L12864_Write(L12864_comm,0xb8+Y2); //设定页地址 L12864_Write(L12864_comm,0x40+X2); //设定列地址 Temp=L12864_Read(); //读出当前位置的值,记住 读了以后需要再重新写Y地址 if(DOT) //如果dian=1 则画点 Temp = Temp|(Tab[Y&7]); // else //如果dian=0 则清点 Temp = Temp&(~Tab[Y&7]);// L12864_Write(L12864_comm,0x40+X2); //重新设定列地址 L12864_Write(L12864_data,Temp); //写新数据 } /****************************************************************** - 功能描述:显示图片子程序 - 入口参数:代码表名称,是否反色(1表示反色,0表示正常) - 参 数 值:无 - 返回说明:无 - 备 注:图片尺寸: 128 * 64 取模方式: 纵向取模下高位,数据排列:从上到下从左到右 ******************************************************************/ void L12864_DrawPicture(unsigned char code * tp,bit DOT) { unsigned char x,y,temp; //用于给显示坐标计数! unsigned int add=0; //用于给显示数据计数! L12864_CS1=1,L12864_CS2=0; //首次运行选中左屏! for(temp=0;temp<2;temp++) //一屏分两次显示! { L12864_Write(L12864_comm,0xc0); //定义起始行! for(x=0;x<64;x++) //一个半屏有64列!循环64次! { for(y=0;y<8;y++) //一屏有8页,循环8次! { L12864_Write(L12864_comm,0x40+x); //定义新的列! L12864_Write(L12864_comm,0xb8+y); //定义新的页! if(!DOT) L12864_Write(L12864_data,tp[add]); //写入当前显示数据! else L12864_Write(L12864_data,~tp[add]); //写入当前显示数据! add++; //下一个显示数据! } } L12864_CS1=0,L12864_CS2=1; //左屏显示完毕,换右屏! } } /****************************************************************** - 功能描述:写16*16字符子程序 - 入口参数:屏选,x,y,字符表名,字符表中第几个成员 - 参 数 值:x=0-48 y=0-6 - 返回说明:无 - 备 注:字符尺寸: 16 * 6 取模方式: 纵向取模下高位,数据排列:从上到下从左到右 ******************************************************************/ void L12864_Draw1616(unsigned char ping,unsigned char x,unsigned char y,unsigned char *p,unsigned char num) { unsigned char a,b,c=0; switch(ping) { case 0:L12864_CS1=0;L12864_CS2=0;break; case 1:L12864_CS1=1;L12864_CS2=0;break; case 2:L12864_CS1=0;L12864_CS2=1;break; case 3:L12864_CS1=1;L12864_CS2=1;break; default:L12864_CS1=1;L12864_CS2=0; } L12864_Write(L12864_comm,0xc0); //设定行地址,固定! if(y>6)y=6; if(x>48)x=48; for(a=0;a<2;a++) { L12864_Write(L12864_comm,0xb8+y+a); //设定页地址 for(b=0;b<16;b++) { L12864_Write(L12864_comm,0x40+x+b); //设定列地址 L12864_Write(L12864_data,p[32*num+c]); c++; } } } /****************************************************************** - 功能描述:写16*8字符子程序 - 入口参数:屏选,x,y,字符表名,字符表中第几个成员 - 参 数 值:x=0-56 y=0-6 - 返回说明:无 - 备 注:字符尺寸: 16 * 6 取模方式: 纵向取模下高位,数据排列:从上到下从左到右 ******************************************************************/ void L12864_Draw1608(unsigned char ping,unsigned char x,unsigned char y,unsigned char *p,unsigned char num) { unsigned char a,b,c=0; switch(ping) { case 0:L12864_CS1=0;L12864_CS2=0;break; case 1:L12864_CS1=1;L12864_CS2=0;break; case 2:L12864_CS1=0;L12864_CS2=1;break; case 3:L12864_CS1=1;L12864_CS2=1;break; default:L12864_CS1=1;L12864_CS2=0; } L12864_Write(L12864_comm,0xc0); //设定行地址,固定! if(y>6)y=6; if(x>56)x=56; for(a=0;a<2;a++) { L12864_Write(L12864_comm,0xb8+y+a); //设定页地址 for(b=0;b<8;b++) { L12864_Write(L12864_comm,0x40+x+b); //设定列地址 L12864_Write(L12864_data,p[16*num+c]); c++; } } } ★==============12864底层代码结束=================== ★=============12864多窗口处理代码=================== //窗口_初始化 | L12864_Windows_Init(); void L12864_Windows_Init(void) { unsigned char i; L12864_ClearScreen(); //清屏 L12864_Draw1616(L12864_Screen_L,32,0,Char_1616_Text,0); //汉字_欢 L12864_Draw1616(L12864_Screen_L,48,0,Char_1616_Text,1); //汉字_迎 L12864_Draw1616(L12864_Screen_R,0,0,Char_1616_Text,2); //汉字_使 L12864_Draw1616(L12864_Screen_R,16,0,Char_1616_Text,3); //汉字_用 L12864_Draw1616(L12864_Screen_L,16,4,Char_1616_Bmp,0); //图标_锁 L12864_Draw1616(L12864_Screen_L,32,4,Char_1616_Text,4); //汉字_电 L12864_Draw1616(L12864_Screen_L,48,4,Char_1616_Text,5); //汉字_子 L12864_Draw1616(L12864_Screen_R,0,4,Char_1616_Text,6); //汉字_密 L12864_Draw1616(L12864_Screen_R,16,4,Char_1616_Text,7); //汉字_码 L12864_Draw1616(L12864_Screen_R,32,4,Char_1616_Text,8); //汉字_锁 for(i=20;i<108;i++) { L12864_DrawDot(i,55,1); L12864_DrawDot(i,60,1); } for(i=55;i<61;i++) { L12864_DrawDot(20,i,1); L12864_DrawDot(108,i,1); } for(i=20;i<108;i++) { L12864_DrawDot(i,57,1); L12864_DrawDot(i,58,1); L12864_Delayus(2000); } } //窗口_输入密码(次数) | L12864_Windows_Input(); void L12864_Windows_Input(unsigned char InPutV) { L12864_ClearScreen(); //清屏 if(InPutV>6) InPutV=6; L12864_Draw1616(L12864_Screen_L,0,0,Char_1616_Text,9); //汉字_请 L12864_Draw1616(L12864_Screen_L,16,0,Char_1616_Text,10); //汉字_输 L12864_Draw1616(L12864_Screen_L,32,0,Char_1616_Text,11); //汉字_入 L12864_Draw1616(L12864_Screen_L,48,0,Char_1616_Text,12); //汉字_开 L12864_Draw1616(L12864_Screen_R,0,0,Char_1616_Text,13); //汉字_门 L12864_Draw1616(L12864_Screen_R,16,0,Char_1616_Text,6); //汉字_密 L12864_Draw1616(L12864_Screen_R,32,0,Char_1616_Text,7); //汉字_码 L12864_Draw1616(L12864_Screen_R,48,0,Char_1616_Symbol,0); //字符_冒号 L12864_Draw1616(L12864_Screen_L,16,3,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_L,32,3,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_L,48,3,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_R,0,3,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_R,16,3,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_R,32,3,Char_1616_Symbol,1); //字符_下划线 if(InPutV==1) { L12864_Draw1616(L12864_Screen_R,32,3,Char_1616_Symbol,2); //字符_星号 } if(InPutV==2) { L12864_Draw1616(L12864_Screen_R,16,3,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,3,Char_1616_Symbol,2); //字符_星号 } if(InPutV==3) { L12864_Draw1616(L12864_Screen_R,0,3,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,16,3,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,3,Char_1616_Symbol,2); //字符_星号 } if(InPutV==4) { L12864_Draw1616(L12864_Screen_L,48,3,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,0,3,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,16,3,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,3,Char_1616_Symbol,2); //字符_星号 } if(InPutV==5) { L12864_Draw1616(L12864_Screen_L,32,3,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_L,48,3,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,0,3,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,16,3,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,3,Char_1616_Symbol,2); //字符_星号 } if(InPutV==6) { L12864_Draw1616(L12864_Screen_L,16,3,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_L,32,3,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_L,48,3,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,0,3,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,16,3,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,3,Char_1616_Symbol,2); //字符_星号 } } //窗口_输入错误(次数) | L12864_Windows_Error(); void L12864_Windows_Error(unsigned char ErrV) { L12864_ClearScreen(); //清屏 if(ErrV>0) { L12864_Draw1616(L12864_Screen_L,16,3,Char_1616_Text,6); //汉字_密 L12864_Draw1616(L12864_Screen_L,32,3,Char_1616_Text,7); //汉字_码 L12864_Draw1616(L12864_Screen_L,48,3,Char_1616_Text,10); //汉字_输 L12864_Draw1616(L12864_Screen_R,0,3,Char_1616_Text,11); //汉字_入 L12864_Draw1616(L12864_Screen_R,16,3,Char_1616_Text,14); //汉字_错 L12864_Draw1616(L12864_Screen_R,32,3,Char_1616_Text,15); //汉字_误 L12864_Draw1616(L12864_Screen_L,0,6,Char_1616_Text,18); //汉字_还 L12864_Draw1616(L12864_Screen_L,16,6,Char_1616_Text,19); //汉字_有 L12864_Draw1608(L12864_Screen_L,32,6,Char_1608_Num,ErrV/10); L12864_Draw1608(L12864_Screen_L,40,6,Char_1608_Num,ErrV%10); L12864_Draw1616(L12864_Screen_L,48,6,Char_1616_Text,20); //汉字_次 L12864_Draw1616(L12864_Screen_R,0,6,Char_1616_Text,10); //汉字_输 L12864_Draw1616(L12864_Screen_R,16,6,Char_1616_Text,11); //汉字_入 L12864_Draw1616(L12864_Screen_R,32,6,Char_1616_Text,21); //汉字_机 L12864_Draw1616(L12864_Screen_R,48,6,Char_1616_Text,22); //汉字_会 } } //窗口_错误等待(数值,单位) | L12864_Windows_ErrorWait(); void L12864_Windows_ErrorWait(unsigned char MinV,bit Unit) { L12864_ClearScreen(); if(Unit) { L12864_Draw1616(L12864_Screen_L,0,3,Char_1616_Bmp,0); //图标_锁 L12864_Draw1616(L12864_Screen_L,16,3,Char_1616_Text,9); //汉字_请 L12864_Draw1608(L12864_Screen_L,32,3,Char_1608_Num,MinV/10); L12864_Draw1608(L12864_Screen_L,40,3,Char_1608_Num,MinV%10); L12864_Draw1616(L12864_Screen_L,48,3,Char_1616_Text,42); //汉字_秒 L12864_Draw1616(L12864_Screen_R,0,3,Char_1616_Text,27); //汉字_后 L12864_Draw1616(L12864_Screen_R,16,3,Char_1616_Text,28); //汉字_重 L12864_Draw1616(L12864_Screen_R,32,3,Char_1616_Text,29); //汉字_试 } else { L12864_Draw1616(L12864_Screen_L,0,3,Char_1616_Bmp,0); //图标_锁 L12864_Draw1616(L12864_Screen_L,16,3,Char_1616_Text,9); //汉字_请 L12864_Draw1608(L12864_Screen_L,32,3,Char_1608_Num,MinV/10); L12864_Draw1608(L12864_Screen_L,40,3,Char_1608_Num,MinV%10); L12864_Draw1616(L12864_Screen_L,48,3,Char_1616_Text,25); //汉字_分 L12864_Draw1616(L12864_Screen_R,0,3,Char_1616_Text,26); //汉字_钟 L12864_Draw1616(L12864_Screen_R,16,3,Char_1616_Text,27); //汉字_后 L12864_Draw1616(L12864_Screen_R,32,3,Char_1616_Text,28); //汉字_重 L12864_Draw1616(L12864_Screen_R,48,3,Char_1616_Text,29); //汉字_试 } } //窗口_门打开 | L12864_Windows_Door_Open(); void L12864_Windows_Door_Open(void) { L12864_ClearScreen(); //清屏 L12864_Draw1616(L12864_Screen_L,32,3,Char_1616_Text,13); //汉字_门 L12864_Draw1616(L12864_Screen_L,48,3,Char_1616_Text,16); //汉字_已 L12864_Draw1616(L12864_Screen_R,0,3,Char_1616_Text,12); //汉字_开 L12864_Draw1616(L12864_Screen_R,16,3,Char_1616_Text,17); //汉字_启 } //窗口_门关闭 | L12864_Windows_Door_Close(); void L12864_Windows_Door_Close(void) { L12864_ClearScreen(); //清屏 L12864_Draw1616(L12864_Screen_L,32,3,Char_1616_Text,13); //汉字_门 L12864_Draw1616(L12864_Screen_L,48,3,Char_1616_Text,16); //汉字_已 L12864_Draw1616(L12864_Screen_R,0,3,Char_1616_Text,23); //汉字_关 L12864_Draw1616(L12864_Screen_R,16,3,Char_1616_Text,24); //汉字_闭 } //窗口_修改密码_输入原密码(次数) | L12864_ChangePass_In(); void L12864_ChangePass_In(unsigned char InPutV) { L12864_ClearScreen(); //清屏 if(InPutV>6) InPutV=6; L12864_Draw1616(L12864_Screen_L,0,0,Char_1616_Symbol,3); //字符_【 L12864_Draw1616(L12864_Screen_L,16,0,Char_1616_Text,6); //汉字_密 L12864_Draw1616(L12864_Screen_L,32,0,Char_1616_Text,7); //汉字_码 L12864_Draw1616(L12864_Screen_L,48,0,Char_1616_Text,34); //汉字_修 L12864_Draw1616(L12864_Screen_R,0,0,Char_1616_Text,35); //汉字_改 L12864_Draw1616(L12864_Screen_R,16,0,Char_1616_Symbol,4); //字符_】 L12864_Draw1616(L12864_Screen_L,0,3,Char_1616_Text,9); //汉字_请 L12864_Draw1616(L12864_Screen_L,16,3,Char_1616_Text,10); //汉字_输 L12864_Draw1616(L12864_Screen_L,32,3,Char_1616_Text,11); //汉字_入 L12864_Draw1616(L12864_Screen_L,48,3,Char_1616_Text,30); //汉字_原 L12864_Draw1616(L12864_Screen_R,0,3,Char_1616_Text,6); //汉字_密 L12864_Draw1616(L12864_Screen_R,16,3,Char_1616_Text,7); //汉字_码 L12864_Draw1616(L12864_Screen_R,32,3,Char_1616_Symbol,0); //字符_冒号 L12864_Draw1616(L12864_Screen_L,16,5,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_L,32,5,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_L,48,5,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_R,0,5,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,1); //字符_下划线 if(InPutV==1) { L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } if(InPutV==2) { L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } if(InPutV==3) { L12864_Draw1616(L12864_Screen_R,0,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } if(InPutV==4) { L12864_Draw1616(L12864_Screen_L,48,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,0,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } if(InPutV==5) { L12864_Draw1616(L12864_Screen_L,32,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_L,48,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,0,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } if(InPutV==6) { L12864_Draw1616(L12864_Screen_L,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_L,32,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_L,48,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,0,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } } //窗口_修改密码_输入新密码(次数) | L12864_ChangePass_NewIn1(); void L12864_ChangePass_NewIn1(unsigned char InPutV) { L12864_ClearScreen(); //清屏 if(InPutV>6) InPutV=6; L12864_Draw1616(L12864_Screen_L,0,0,Char_1616_Symbol,3); //字符_【 L12864_Draw1616(L12864_Screen_L,16,0,Char_1616_Text,6); //汉字_密 L12864_Draw1616(L12864_Screen_L,32,0,Char_1616_Text,7); //汉字_码 L12864_Draw1616(L12864_Screen_L,48,0,Char_1616_Text,34); //汉字_修 L12864_Draw1616(L12864_Screen_R,0,0,Char_1616_Text,35); //汉字_改 L12864_Draw1616(L12864_Screen_R,16,0,Char_1616_Symbol,4); //字符_】 L12864_Draw1616(L12864_Screen_L,0,3,Char_1616_Text,9); //汉字_请 L12864_Draw1616(L12864_Screen_L,16,3,Char_1616_Text,10); //汉字_输 L12864_Draw1616(L12864_Screen_L,32,3,Char_1616_Text,11); //汉字_入 L12864_Draw1616(L12864_Screen_L,48,3,Char_1616_Text,31); //汉字_新 L12864_Draw1616(L12864_Screen_R,0,3,Char_1616_Text,6); //汉字_密 L12864_Draw1616(L12864_Screen_R,16,3,Char_1616_Text,7); //汉字_码 L12864_Draw1616(L12864_Screen_R,32,3,Char_1616_Symbol,0); //字符_冒号 L12864_Draw1616(L12864_Screen_L,16,5,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_L,32,5,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_L,48,5,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_R,0,5,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,1); //字符_下划线 if(InPutV==1) { L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } if(InPutV==2) { L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } if(InPutV==3) { L12864_Draw1616(L12864_Screen_R,0,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } if(InPutV==4) { L12864_Draw1616(L12864_Screen_L,48,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,0,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } if(InPutV==5) { L12864_Draw1616(L12864_Screen_L,32,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_L,48,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,0,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } if(InPutV==6) { L12864_Draw1616(L12864_Screen_L,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_L,32,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_L,48,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,0,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } } //窗口_修改密码_再输入一次 | L12864_ChangePass_NewIn2(); void L12864_ChangePass_NewIn2(unsigned char InPutV) { L12864_ClearScreen(); //清屏 if(InPutV>6) InPutV=6; L12864_Draw1616(L12864_Screen_L,0,0,Char_1616_Symbol,3); //字符_【 L12864_Draw1616(L12864_Screen_L,16,0,Char_1616_Text,6); //汉字_密 L12864_Draw1616(L12864_Screen_L,32,0,Char_1616_Text,7); //汉字_码 L12864_Draw1616(L12864_Screen_L,48,0,Char_1616_Text,34); //汉字_修 L12864_Draw1616(L12864_Screen_R,0,0,Char_1616_Text,35); //汉字_改 L12864_Draw1616(L12864_Screen_R,16,0,Char_1616_Symbol,4); //字符_】 L12864_Draw1616(L12864_Screen_L,0,3,Char_1616_Text,9); //汉字_请 L12864_Draw1616(L12864_Screen_L,16,3,Char_1616_Text,32); //汉字_再 L12864_Draw1616(L12864_Screen_L,32,3,Char_1616_Text,10); //汉字_输 L12864_Draw1616(L12864_Screen_L,48,3,Char_1616_Text,11); //汉字_入 L12864_Draw1616(L12864_Screen_R,0,3,Char_1616_Text,33); //汉字_一 L12864_Draw1616(L12864_Screen_R,16,3,Char_1616_Text,20); //汉字_次 L12864_Draw1616(L12864_Screen_R,32,3,Char_1616_Symbol,0); //字符_冒号 L12864_Draw1616(L12864_Screen_L,16,5,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_L,32,5,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_L,48,5,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_R,0,5,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,1); //字符_下划线 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,1); //字符_下划线 if(InPutV==1) { L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } if(InPutV==2) { L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } if(InPutV==3) { L12864_Draw1616(L12864_Screen_R,0,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } if(InPutV==4) { L12864_Draw1616(L12864_Screen_L,48,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,0,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } if(InPutV==5) { L12864_Draw1616(L12864_Screen_L,32,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_L,48,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,0,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } if(InPutV==6) { L12864_Draw1616(L12864_Screen_L,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_L,32,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_L,48,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,0,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,16,5,Char_1616_Symbol,2); //字符_星号 L12864_Draw1616(L12864_Screen_R,32,5,Char_1616_Symbol,2); //字符_星号 } } //窗口_修改密码_密码验证失败 | L12864_CheckPass_Err(); void L12864_CheckPass_Err(void) { L12864_ClearScreen(); //清屏 L12864_Draw1616(L12864_Screen_L,0,0,Char_1616_Symbol,3); //字符_【 L12864_Draw1616(L12864_Screen_L,16,0,Char_1616_Text,6); //汉字_密 L12864_Draw1616(L12864_Screen_L,32,0,Char_1616_Text,7); //汉字_码 L12864_Draw1616(L12864_Screen_L,48,0,Char_1616_Text,34); //汉字_修 L12864_Draw1616(L12864_Screen_R,0,0,Char_1616_Text,35); //汉字_改 L12864_Draw1616(L12864_Screen_R,16,0,Char_1616_Symbol,4); //字符_】 L12864_Draw1616(L12864_Screen_L,16,4,Char_1616_Text,6); //汉字_密 L12864_Draw1616(L12864_Screen_L,32,4,Char_1616_Text,7); //汉字_码 L12864_Draw1616(L12864_Screen_L,48,4,Char_1616_Text,40); //汉字_验 L12864_Draw1616(L12864_Screen_R,0,4,Char_1616_Text,41); //汉字_证 L12864_Draw1616(L12864_Screen_R,16,4,Char_1616_Text,38); //汉字_失 L12864_Draw1616(L12864_Screen_R,32,4,Char_1616_Text,39); //汉字_败 } //窗口_修改密码_修改成功 | L12864_ChangePass_OK(); void L12864_ChangePass_OK(void) { L12864_ClearScreen(); //清屏 L12864_Draw1616(L12864_Screen_L,0,0,Char_1616_Symbol,3); //字符_【 L12864_Draw1616(L12864_Screen_L,16,0,Char_1616_Text,6); //汉字_密 L12864_Draw1616(L12864_Screen_L,32,0,Char_1616_Text,7); //汉字_码 L12864_Draw1616(L12864_Screen_L,48,0,Char_1616_Text,34); //汉字_修 L12864_Draw1616(L12864_Screen_R,0,0,Char_1616_Text,35); //汉字_改 L12864_Draw1616(L12864_Screen_R,16,0,Char_1616_Symbol,4); //字符_】 L12864_Draw1616(L12864_Screen_L,32,4,Char_1616_Text,34); //汉字_修 L12864_Draw1616(L12864_Screen_L,48,4,Char_1616_Text,35); //汉字_改 L12864_Draw1616(L12864_Screen_R,0,4,Char_1616_Text,36); //汉字_成 L12864_Draw1616(L12864_Screen_R,16,4,Char_1616_Text,37); //汉字_功 } //窗口_修改密码_修改失败 | L12864_ChangePass_Error(); void L12864_ChangePass_Error(void) { L12864_ClearScreen(); //清屏 L12864_Draw1616(L12864_Screen_L,0,0,Char_1616_Symbol,3); //字符_【 L12864_Draw1616(L12864_Screen_L,16,0,Char_1616_Text,6); //汉字_密 L12864_Draw1616(L12864_Screen_L,32,0,Char_1616_Text,7); //汉字_码 L12864_Draw1616(L12864_Screen_L,48,0,Char_1616_Text,34); //汉字_修 L12864_Draw1616(L12864_Screen_R,0,0,Char_1616_Text,35); //汉字_改 L12864_Draw1616(L12864_Screen_R,16,0,Char_1616_Symbol,4); //字符_】 L12864_Draw1616(L12864_Screen_L,32,4,Char_1616_Text,34); //汉字_修 L12864_Draw1616(L12864_Screen_L,48,4,Char_1616_Text,35); //汉字_改 L12864_Draw1616(L12864_Screen_R,0,4,Char_1616_Text,38); //汉字_失 L12864_Draw1616(L12864_Screen_R,16,4,Char_1616_Text,39); //汉字_败 } ★===========12864多窗口处理代码结束================== ★============模拟关门(独立按键)代码=================== unsigned char KeyAloneV; sbit Key_Door = P3^5; void keysan_Alone(void) { if(Key_Door==0) KeyAloneV=1; if(Key_Door==1&&KeyAloneV==1) { KeyAloneV=0; Door=1; } } ★============模拟关门(独立按键)代码结束================ ★=============矩阵键盘扫描、处理代码================== #define Key_44_Data P1 //宏定义矩阵键盘接口 unsigned char zhi,a,hang,lie; /****************************************************************** - 功能描述:延时子程序 - 入口参数:长整数型 - 参 数 值:0-65535 - 返回说明:无 - 备 注:无 ******************************************************************/ void Key_44_Delay(unsigned char i) { unsigned char x; for(x=80;x>0;x--) for(i;i>0;i--); } /****************************************************************** - 功能描述:矩阵键盘扫描子程序 - 入口参数:无 - 参 数 值:无 - 返回说明:无 - 备 注:无 ******************************************************************/ void Key_44_KeySan(void) { Key_44_Data=0x0f; //给4行赋高电平,4列赋低电平 if(Key_44_Data!=0x0f) //判断是否有键按下 Key_44_Delay(5); //按键消除抖动 if(Key_44_Data!=0x0f) //再次判断是否有键按下 { hang=Key_44_Data; //把行的值暂存 a=1; //按键按下标志位置1 Key_44_Data=0xf0; //给4列赋高电平,4行赋低电平 lie=Key_44_Data; //把列的值暂存 zhi=lie|hang; //将行值和列值相或得出键值 } if((Key_44_Data==0x0f)&&(a==1)) //判断是否松手 Key_44_Delay(5); //按键松手消除抖动 if((Key_44_Data==0x0f)&&(a==1)) //再次判断是否松手 { a=0; //按键按下标志位清零 switch(zhi) //比较读键值 { case 0x77:jianzhi=15;break; //按键D case 0x7b:jianzhi=14;break; //按键C case 0x7d:jianzhi=13;break; //按键B case 0x7e:jianzhi=12;break; //按键A修改密码 case 0xb7:jianzhi=10;break; //按键#确认 case 0xbb:jianzhi=9;break; //按键9 case 0xbd:jianzhi=6;break; //按键6 case 0xbe:jianzhi=3;break; //按键3 case 0xd7:jianzhi=0;break; //按键0 case 0xdb:jianzhi=8;break; //按键8 case 0xdd:jianzhi=5;break; //按键5 case 0xde:jianzhi=2;break; //按键2 case 0xe7:jianzhi=11;break; //按键*取消 case 0xeb:jianzhi=7;break; //按键7 case 0xed:jianzhi=4;break; //按键4 case 0xee:jianzhi=1;break; //按键1 } if(jianzhi<13) //如果按下的是0-9 确认 取消 修改密码键 则按键有效 { KeyAvailable=1; } } } /****************************************************************** - 功能描述:矩阵键盘处理子程序 - 入口参数:无 - 参 数 值:无 - 返回说明:无 - 备 注:无 ******************************************************************/ void Key_44_KeyHandle(void) { if(KeyAvailable) { //----- 模式=1 输入开门密码模式 if(MODE==1) //如果当前为输入开门密码模式 { if((InPutCount<=5) && (jianzhi<=9)) //当前输入的是0-9 并且输入不足6位 { InPutPassWord[InPutCount]=jianzhi+0x30; InPutCount++; L12864_Windows_Input(InPutCount); } if((jianzhi==10) &&(InPutCount==6)) //如果按下确认键并且密码输入完整 { if(PassWordCheck()) { L12864_Windows_Door_Open(); //密码正确 门已经开启 ErrCount=Count; //输入错误计次归位 Door=0; //置门打开标志位 0表示打开 MODE=5; } else { MODE=0; ErrCount--; if(ErrCount>0) { L12864_Windows_Error(ErrCount); L12864_Delay1S(); //延时3秒 InPutCount=0; L12864_Windows_Input(InPutCount); MODE=1; } else { L12864_Windows_ErrorWait(ErrWait,0); MODE=6; } } } if(jianzhi==11) //如果按下取消键 { ClrarPassBuf(); InPutCount=0; L12864_Windows_Input(InPutCount); MODE=1; } if(jianzhi==12) //如果按下修改密码键 { InPutCount=0; L12864_ChangePass_In(InPutCount); MODE=2; //设置当前为修改密码模式 } } //----- 模式=2 修改密码模式 if(MODE==2) //如果当前为修改密码模式 { if((InPutCount<=5) && (jianzhi<=9)) //当前输入的是0-9 并且输入不足6位 { InPutPassWord[InPutCount]=jianzhi+0x30; InPutCount++; L12864_ChangePass_In(InPutCount); } if(jianzhi==10) //如果按下确认键 { if(PassWordCheck()) { InPutCount=0; L12864_ChangePass_NewIn1(InPutCount); MODE=3; } else { L12864_CheckPass_Err(); L12864_Delay1S(); //延时3秒 InPutCount=0; L12864_Windows_Input(InPutCount); MODE=1; } } if(jianzhi==11) //如果按下取消键 { ClrarPassBuf(); InPutCount=0; L12864_Windows_Input(InPutCount); MODE=1; } } //----- 模式=3 输入新密码1 if(MODE==3) { if((InPutCount<=5) && (jianzhi<=9)) //当前输入的是0-9 并且输入不足6位 { InPutPassWordNew1[InPutCount]=jianzhi+0x30; InPutCount++; L12864_ChangePass_NewIn1(InPutCount); } if((NextCycle_MODE3) && (jianzhi==10)) //如果按下确认键 { if(InPutCount==6) { InPutCount=0; L12864_ChangePass_NewIn2(InPutCount); MODE=4; } } if(jianzhi==11) //如果按下取消键 { ClrarPassBuf(); InPutCount=0; L12864_Windows_Input(InPutCount); MODE=1; } if(MODE==3) NextCycle_MODE3=1; else NextCycle_MODE3=0; } //----- 模式=4 输入新密码2 if(MODE==4) { if((InPutCount<=5) && (jianzhi<=9)) //当前输入的是0-9 并且输入不足6位 { InPutPassWordNew2[InPutCount]=jianzhi+0x30; InPutCount++; L12864_ChangePass_NewIn2(InPutCount); } if((NextCycle_MODE4) && (jianzhi==10)) //如果按下确认键 { if(PassWordCheckNew()) { WriteNewPassWord(); L12864_ChangePass_OK(); } else { L12864_ChangePass_Error(); } L12864_Delay1S(); //延时3秒 InPutCount=0; L12864_Windows_Input(InPutCount); MODE=1; } if(jianzhi==11) //如果按下取消键 { ClrarPassBuf(); InPutCount=0; L12864_Windows_Input(InPutCount); MODE=1; } if(MODE==4) NextCycle_MODE4=1; else NextCycle_MODE4=0; } //----- 模式=5 等待关门 if(MODE==5) { while(Door==0) { keysan_Alone(); } //此时门已经关闭 L12864_Windows_Door_Close(); L12864_Delay1S(); //延时3秒 InPutCount=0; L12864_Windows_Input(InPutCount); MODE=1; } //----- 模式=6 等待时间到 if(MODE==6) { TR0=1; fen=ErrMin; while(fen>=1) { if(Unit)//为1 单位为秒 { if(NewS!=s) { L12864_Windows_ErrorWait(s,1); NewS=s; } } else //否则单位为分钟 { if(Newfen!=fen) { L12864_Windows_ErrorWait(fen,0); Newfen=fen; } } L12864_Delay1S(); if((fen==0) && (s==-1)) { break; } } TR0=0; ms=0; s=59; Unit=0;//单位切换为分 fen=ErrMin; ErrCount=Count; InPutCount=0; L12864_Windows_Input(InPutCount); MODE=1; } } KeyAvailable=0; } ★============矩阵键盘扫描、处理代码结束================ ★=================12864Code===================== unsigned char code Char_1608_Num[]={ 0x00,0xF0,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x0F,0x10,0x10,0x10,0x10,0x0F,0x00,/*"0",0*/ 0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,0x10,0x10,0x00,/*"1",1*/ 0x00,0x10,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x14,0x12,0x11,0x10,0x10,0x00,/*"2",2*/ 0x00,0x10,0x08,0x88,0x88,0x88,0x70,0x00,0x00,0x08,0x10,0x10,0x10,0x10,0x0F,0x00,/*"3",3*/ 0x00,0x00,0x80,0x60,0x10,0xF8,0x00,0x00,0x00,0x03,0x02,0x02,0x12,0x1F,0x12,0x00,/*"4",4*/ 0x00,0xF8,0x88,0x88,0x88,0x88,0x08,0x00,0x00,0x08,0x10,0x10,0x10,0x10,0x0F,0x00,/*"5",5*/ 0x00,0xE0,0x10,0x88,0x88,0x88,0x00,0x00,0x00,0x0F,0x11,0x10,0x10,0x10,0x0F,0x00,/*"6",6*/ 0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,0x00,0x00,0x18,0x06,0x01,0x00,0x00,0x00,/*"7",7*/ 0x00,0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x00,0x0F,0x10,0x10,0x10,0x10,0x0F,0x00,/*"8",8*/ 0x00,0xF0,0x08,0x08,0x08,0x88,0xF0,0x00,0x00,0x00,0x11,0x11,0x11,0x08,0x07,0x00,/*"9",9*/ 0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,/*"/",10*/ }; unsigned char code Char_1616_Text[]={ 0x04,0x34,0xC4,0x04,0xC4,0x3C,0x20,0x10,0x0F,0xE8,0x08,0x08,0x28,0x18,0x00,0x00,//汉字_00 欢 0x10,0x08,0x06,0x01,0x82,0x8C,0x40,0x30,0x0C,0x03,0x0C,0x10,0x60,0xC0,0x40,0x00, 0x40,0x42,0x44,0xC8,0x00,0xFC,0x04,0x02,0x82,0xFC,0x04,0x04,0x04,0xFE,0x04,0x00,//汉字_01 迎 0x00,0x40,0x20,0x1F,0x20,0x47,0x42,0x41,0x40,0x7F,0x40,0x42,0x44,0x63,0x20,0x00, 0x40,0x20,0xF8,0x07,0x04,0xF4,0x14,0x14,0x14,0xFF,0x14,0x14,0x14,0xF6,0x04,0x00,//汉字_02 使 0x00,0x00,0xFF,0x00,0x80,0x43,0x45,0x29,0x19,0x17,0x21,0x21,0x41,0xC3,0x40,0x00, 0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFF,0x02,0x00,0x00,//汉字_03 用 0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x7F,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00, 0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,//汉字_04 电 0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00, 0x80,0x80,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x80,0xC0,0x80,0x00,//汉字_05 子 0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x10,0x4C,0x24,0x04,0xF4,0x84,0x4D,0x56,0x24,0x24,0x14,0x84,0x24,0x54,0x0C,0x00,//汉字_06 密 0x00,0x01,0xFD,0x41,0x40,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0xFC,0x00,0x00,0x00, 0x02,0x82,0xF2,0x4E,0x43,0xE2,0x42,0xFA,0x02,0x02,0x02,0xFF,0x02,0x80,0x00,0x00,//汉字_07 码 0x01,0x00,0x7F,0x20,0x20,0x7F,0x08,0x09,0x09,0x09,0x0D,0x49,0x81,0x7F,0x01,0x00, 0x80,0x40,0x70,0xCF,0x48,0x48,0x00,0xE2,0x2C,0x20,0xBF,0x20,0x28,0xF6,0x20,0x00,//汉字_08 锁 0x00,0x02,0x02,0x7F,0x22,0x92,0x80,0x4F,0x40,0x20,0x1F,0x20,0x20,0x4F,0x80,0x00, 0x20,0x22,0xEC,0x00,0x20,0x22,0xAA,0xAA,0xAA,0xBF,0xAA,0xAA,0xEB,0xA2,0x20,0x00,//汉字_09 请 0x00,0x00,0x7F,0x20,0x10,0x00,0xFF,0x0A,0x0A,0x0A,0x4A,0x8A,0x7F,0x00,0x00,0x00, 0x88,0x68,0x1F,0xC8,0x0C,0x28,0x90,0xA8,0xA6,0xA1,0x26,0x28,0x10,0xB0,0x10,0x00,//汉字_10 输 0x09,0x09,0x05,0xFF,0x05,0x00,0xFF,0x0A,0x8A,0xFF,0x00,0x1F,0x80,0xFF,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x01,0xE2,0x1C,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//汉字_11 入 0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0xC0,0x40,0x00, 0x80,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x83,0xC2,0x80,0x00,//汉字_12 开 0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00, 0x00,0xFC,0x01,0x02,0x06,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0x02,0x00,//汉字_13 门 0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00, 0x80,0x40,0x70,0xCF,0x48,0x48,0x48,0x48,0x7F,0x48,0x48,0x7F,0xC8,0x68,0x40,0x00,//汉字_14 错 0x00,0x02,0x02,0x7F,0x22,0x12,0x00,0xFF,0x49,0x49,0x49,0x49,0xFF,0x01,0x00,0x00, 0x40,0x42,0xC4,0x0C,0x00,0x40,0x5E,0x52,0x52,0xD2,0x52,0x52,0x5F,0x42,0x00,0x00,//汉字_15 误 0x00,0x00,0x7F,0x20,0x12,0x82,0x42,0x22,0x1A,0x07,0x1A,0x22,0x42,0xC3,0x42,0x00, 0x00,0x02,0xF2,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFF,0x02,0x00,0x00,0x00,//汉字_16 已 0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00, 0x00,0x00,0x00,0xFC,0x44,0x44,0x44,0x45,0x46,0x44,0x44,0x44,0x44,0x7E,0x04,0x00,//汉字_17 启 0x40,0x20,0x18,0x07,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFF,0x02,0x00, 0x20,0x22,0xEC,0x00,0x04,0x04,0x04,0x84,0xE4,0x1C,0x84,0x04,0x04,0x06,0x04,0x00,//汉字_18 还 0x40,0x20,0x1F,0x20,0x44,0x42,0x41,0x40,0x5F,0x40,0x40,0x41,0x43,0x66,0x20,0x00, 0x04,0x04,0x04,0x84,0xE4,0x3C,0x27,0x24,0x24,0x24,0x24,0xF4,0x24,0x06,0x04,0x00,//汉字_19 有 0x04,0x02,0x01,0x00,0xFF,0x09,0x09,0x09,0x09,0x49,0x89,0x7F,0x00,0x00,0x00,0x00, 0x00,0x02,0x04,0x8C,0x40,0x00,0x20,0x18,0x17,0xD0,0x10,0x50,0x38,0x10,0x00,0x00,//汉字_20 次 0x02,0x02,0xFF,0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x0C,0x10,0x60,0xC0,0x40,0x00, 0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFC,0x04,0x04,0x04,0xFE,0x04,0x00,0x00,0x00,//汉字_21 机 0x04,0x03,0x00,0xFF,0x80,0x41,0x20,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x70,0x00, 0x80,0x80,0x40,0x20,0x50,0x48,0x44,0x43,0x44,0x48,0x50,0x20,0x40,0xC0,0x40,0x00,//汉字_22 会 0x00,0x00,0x02,0x42,0x62,0x52,0x4E,0x42,0x42,0x52,0x62,0xC3,0x02,0x00,0x00,0x00, 0x00,0x10,0x10,0x11,0x12,0x1C,0x10,0xF0,0x10,0x18,0x14,0x13,0x1A,0x90,0x00,0x00,//汉字_23 关 0x81,0x81,0x41,0x41,0x21,0x11,0x0D,0x03,0x0D,0x11,0x21,0x21,0x41,0xC1,0x41,0x00, 0x00,0xF8,0x01,0x22,0x26,0x20,0x22,0xA2,0xFA,0x22,0x32,0x22,0x02,0xFF,0x02,0x00,//汉字_24 毕 0x00,0xFF,0x00,0x08,0x04,0x02,0x21,0x40,0x3F,0x00,0x00,0x40,0x80,0x7F,0x00,0x00, 0x00,0x80,0x40,0x20,0x98,0x86,0x80,0x80,0x83,0x8C,0x90,0x20,0xC0,0x80,0x80,0x00,//汉字_25 分 0x01,0x00,0x80,0x40,0x20,0x1F,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x01,0x00,0x00, 0x80,0x40,0x70,0xCF,0x48,0x48,0x00,0xF0,0x10,0x10,0xFF,0x10,0x10,0xF8,0x10,0x00,//汉字_26 钟 0x02,0x02,0x02,0x7F,0x22,0x12,0x00,0x07,0x02,0x02,0xFF,0x02,0x02,0x07,0x00,0x00, 0x00,0x00,0xFC,0x24,0x24,0x24,0x24,0x24,0x24,0x22,0x22,0x23,0xA2,0x30,0x20,0x00,//汉字_27 后 0x40,0x30,0x0F,0x00,0x00,0xFF,0x41,0x41,0x41,0x41,0x41,0x41,0xFF,0x01,0x00,0x00, 0x08,0x08,0x0A,0xEA,0xAA,0xAA,0xAA,0xFE,0xAA,0xAA,0xA9,0xF9,0x29,0x0C,0x08,0x00,//汉字_28 重 0x40,0x40,0x48,0x4B,0x4A,0x4A,0x4A,0x7F,0x4A,0x4A,0x4A,0x4B,0x48,0x60,0x40,0x00, 0x40,0x42,0xCC,0x00,0x10,0x90,0x90,0x90,0x90,0x90,0xFF,0x10,0x12,0x14,0x10,0x00,//汉字_29 试 0x00,0x00,0x7F,0x20,0x10,0x20,0x60,0x3F,0x10,0x10,0x01,0x3E,0x40,0x80,0x70,0x00, 0x00,0x00,0xFE,0x02,0xE2,0xA2,0xB2,0xAE,0xA2,0xA2,0xA2,0xA2,0xF3,0x22,0x00,0x00,//汉字_30 原 0x40,0x30,0x0F,0x40,0x23,0x1A,0x42,0x82,0x7E,0x02,0x02,0x0A,0x13,0x60,0x00,0x00, 0x40,0x44,0x54,0x65,0xC6,0x64,0xD6,0x44,0x40,0xFC,0x44,0x42,0xC3,0x62,0x40,0x00,//汉字_31 新 0x20,0x11,0x49,0x81,0x7F,0x01,0x05,0x29,0x18,0x07,0x00,0x00,0xFF,0x00,0x00,0x00, 0x00,0x02,0x02,0xF2,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0xFA,0x13,0x02,0x00,0x00,//汉字_32 再 0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x07,0x04,0x44,0x84,0x7F,0x04,0x06,0x04,0x00, 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00,//汉字_33 一 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x40,0x20,0xF8,0x07,0xF0,0xA0,0x90,0x4F,0x54,0x24,0xD4,0x4C,0x84,0x80,0x80,0x00,//汉字_34 修 0x00,0x00,0xFF,0x00,0x0F,0x80,0x92,0x52,0x49,0x25,0x24,0x12,0x08,0x00,0x00,0x00, 0x04,0xC4,0x44,0x44,0x44,0xFE,0x44,0x20,0xDF,0x10,0x10,0x10,0xF0,0x18,0x10,0x00,//汉字_35 改 0x00,0x7F,0x20,0x20,0x10,0x90,0x80,0x40,0x21,0x16,0x08,0x16,0x61,0xC0,0x40,0x00, 0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0x08,0x7F,0x88,0x0A,0x0C,0x08,0xC8,0x00,0x00,//汉字_36 成 0x40,0x20,0x1F,0x00,0x08,0x10,0x0F,0x40,0x20,0x13,0x1C,0x24,0x43,0x80,0xF0,0x00, 0x08,0x08,0x08,0xF8,0x0C,0x28,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0xF0,0x20,0x00,//汉字_37 功 0x08,0x18,0x08,0x0F,0x84,0x44,0x20,0x1C,0x03,0x20,0x40,0x80,0x40,0x3F,0x00,0x00, 0x00,0x40,0x20,0x1E,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x18,0x10,0x80,0x00,0x00,//汉字_38 失 0x01,0x81,0x81,0x41,0x21,0x11,0x0D,0x03,0x0D,0x11,0x21,0x21,0x41,0xC1,0x41,0x00, 0x00,0xFE,0x02,0xFA,0x02,0xFF,0x02,0x20,0x10,0xCF,0x08,0x08,0xF8,0x0C,0x08,0x00,//汉字_39 败 0x80,0x47,0x30,0x0F,0x10,0x67,0x80,0x40,0x20,0x17,0x08,0x16,0x21,0x60,0x20,0x00, 0x02,0xFA,0x02,0x02,0xFF,0x42,0x20,0x50,0x4C,0x43,0x4C,0x50,0x20,0x60,0x20,0x00,//汉字_40 验 0x10,0x31,0x11,0x49,0x89,0x7F,0x42,0x5C,0x40,0x4F,0x60,0x58,0x47,0x60,0x40,0x00, 0x20,0x20,0x21,0xE6,0x00,0x02,0x02,0xC2,0x02,0x02,0xFE,0x82,0x82,0xC3,0x82,0x00,//汉字_41 证 0x00,0x00,0x00,0x7F,0x20,0x50,0x40,0x7F,0x40,0x40,0x7F,0x40,0x40,0x60,0x40,0x00, 0x20,0x24,0x24,0xA4,0xFE,0xA3,0x22,0x80,0x70,0x00,0xFF,0x00,0x10,0x20,0x60,0x00,//汉字_42 秒 0x10,0x08,0x06,0x01,0xFF,0x00,0x81,0x80,0x40,0x20,0x17,0x08,0x04,0x03,0x00,0x00, }; unsigned char code Char_1616_Bmp[]={ 0x80,0xFC,0xFE,0x86,0x83,0x81,0x81,0x81,0x81,0x81,0x83,0x86,0xFE,0xFC,0x80,0x00,//图标_00 锁 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x81,0xE1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00, }; unsigned char code Char_1616_Symbol[]={ 0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//符号_00 冒号 0x00,0x00,0x00,0x00,0x31,0x7B,0x7B,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//符号_01 下划线 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, 0x00,0x86,0x8E,0x9C,0xB8,0xF0,0xE0,0xFE,0xFE,0xE0,0xF0,0xB8,0x9C,0x8E,0x86,0x00,//符号_02 星号 0x00,0x61,0x71,0x39,0x1D,0x0F,0x07,0x7F,0x7F,0x07,0x0F,0x1D,0x39,0x71,0x61,0x00, 0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0x7C,0x1C,0x0C,0x04,0x00,0x00,0x00,0x00,//符号_03 【 0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3E,0x38,0x30,0x20,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x04,0x0C,0x1C,0x7C,0xFC,0xFC,0xFC,0x00,0x00,0x00,0x00,//符号_04 】 0x00,0x00,0x00,0x00,0x00,0x20,0x30,0x38,0x3E,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00, }; ★================12864Code结束=================== =========================== 《 完 》 ==========================
复制代码