51单片机密码锁程序

合集下载

51单片机密码锁制作的程序和流程图

51单片机密码锁制作的程序和流程图

51单片机密码锁制作的程序和流程图(很详细) 一、基本组成:单片机小系统+4*4矩阵键盘+1602显示+DC电机基本电路:键盘和和显示键盘接P1口,液晶的电源的开、关通过P2.7口控制电机(控制口P2.4)二、基本功能描述:1.验证密码、修改密码a)锁的初始密码是123456(密码最长为10位,最短为1位)。

2.恢复初始密码a)系统可以恢复初始密码,否则一旦忘记密码而又不能恢复初始密码,该锁就永远打不开。

但是又不能让用户自行修改密码,否则其他人也可以恢复该初始密码,使得锁的安全性大大下降。

3.使系统进入低功耗状态a)在实际使用中,锁只有在开门时才被使用。

因而在大多数的时间里,应该让锁进入休眠状态、以降低功耗,这使系统进入掉电状态,可以大大降低系统功耗。

b)同时将LCD背光灯关闭4.DC电机模拟开锁动作。

a)DC电机启动时解除开锁把手的锁定,允许通过把手开锁。

DC电机不直接开锁,使得DC电机的功率不用太大,系统的组成和维护将变得简单,功耗也降了下来。

三、密码锁特点说明:1.0 输入将被以字符形式输入,最长为10位。

超过10位时系统将自动截取前10位、但不作密码长度溢出提示。

2.0 开锁10秒后不允许更改密码、并提示修改超时_进入初始态,需要重新输入密码方可再次修改密码。

3.0 系统未使用存储器存储密码故掉电后密码自动恢复为初始密码。

4.0 若2分钟内无任何操作,系统自动进入省电模式运行,同时关闭液晶显示,以节省电力。

5.0 输入密码正确后、电机允许开锁时间为5秒, 5秒后需要再次输入密码才可以再次开锁。

6.0 修改密码键和恢复初始密码键最好置于室内。

这是Proteus仿真结果:输入密码123456:显示结果:密码正确时电机启动、电机将持续5秒:这是键盘:开锁键是接INT0引脚接的一个独立按键,用于唤醒CPU工作、进而开启整个系统密码正确时可以修改密码:再次输入新密码,两次输入相同时、更改有效当然你可以随时放弃修改密码改进:1.0 密码锁的秘密没有存储,因而在掉电时最新的密码将丢失,重新上电后密码将恢复成为初始密码。

51单片机密码锁设计

51单片机密码锁设计
{
switch(temp)
{
case 0x0e:key=1;break;
case 0x0d:key=4;break;
case 0x0b:key=7;break;
{
showcode=!showcode;
}
while(temp!=0x0f)
{
temp=P1;
temp=temp & 0x0f;
{
temp=P1;
temp=temp & 0x0f;
}
}
}
P1=0xff;
if (temp!=0x0f)
{
switch(temp)
{
case 0x0e:key=2;break;
void int0(void) // 用于数码管动态扫描
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
}
/*********************清除密码函数************************/
}
if((key>=0) && (key<10))
getcode();
else if(key==12) //删除密码键
delcode();
void getcode()
{
lock=1;
if(keycount<4)
{
if(sgin1==0) //输入密码时接收密码
{
getps[keycount]=key;

基于51单片机的电子密码锁—1

基于51单片机的电子密码锁—1

基于51单⽚机的电⼦密码锁—1这个程序是为了实现基于51单⽚机的电⼦密码锁,⽬前,程序解决了最重要之⼀的输⼊的密码和保存的正确密码相⽐较的问题。

通过定义了两个数组:uchar table2[6]; //临时密码保存uchar password[6]="123456"; //进门密码将输⼊的密码写⼊到table2[]中有⼀点需要特别注意:因为我写到table2[]数组内的是ASCII值的0-9,⽽ASCII值的0-9对应的符号却是NUT,SOH... (省略)所以在刚开始调试时,LCD1602屏幕输出的总是奇怪的字符,⽽不是我想要的0-9,通过查询ASCLL码表可以知道字符(0-9)对应的数值是48-57,所以我通过定义了⼀个新的数组,uchar smgduan[10]={48,49,50,51,52,53,54,55,56,57};以及lcd_write_data(smgduan[table2[i]]);的⽅式,实现了在LCD上输出字符0-9的功能。

在最后做两个数组⽐较时,开始同样出现了这个情况,因为数字1和字符1对应的ASCII值不同,所以password[i]不等于table2[i],需要进⾏转换,我的⽅式的是password[i]==smgduan[table2[i]];罗⾥吧嗦这个多,主要还是给未来的⾃⼰看看,当初犯得错误多么低级。

---------------------------------------------------分割线-----------------------------------------------------------------------------------下⼀版改进考虑把重复按键选择数字改成矩阵按键,加进些其他的功能。

---------------------------------------------------分割线-----------------------------------------------------------------------------------程序部分:/*这个⽅案是我写基于51单⽚机的电⼦密码锁过程中,未完成全部功能的程序。

基于51单片机的密码锁程序

基于51单片机的密码锁程序
*输入:row cloum dat
*************************************************/
void lcd_char(uchar row ,uchar cloum,uchar dat)
{
if(row==1)
{
lcd_writecom(0x80+cloum);
lcd_writedata(dat);
}
else
{
lcd_writecom(0x80+0x40+cloum);
lcd_writedata(dat);
}
}
/*********************************************
名称:lcd_string(uchar row,uchar cloum,uchar *p)
}
/********************************************************************
* 名称 : Delay_xMs()
* 功能 : 延时子程序,经过软件调试,测得延时程序大概为55us.
* 输入 : x
* 输出 : 无
***********************************************************************/
uchar init_password[6]="123456";
uchar a[5]="RIGHT";
uchar b[16]="The new password";
unsigned char code pu[282]={

基于51单片机的密码锁设计程序_

基于51单片机的密码锁设计程序_
uchar key。
uchar temp,count,aa,bb,cc。/*一般将这些变量定义在C文件中
当主函数需要时用extern引用*/
bit shu_flag,modify_flag,rst。
bit fun_flag。//功能键Байду номын сангаас志位没使用
bit down_flag,up_flag,open_flag。
write_ds1302_byte(dat)。
T_CLK=1。
T_EN=0。
}
uchar read_ds1302_data(uchar addr)
{
uchar date。
T_EN=0。
T_CLK=0。
T_EN=1。
write_ds1302_byte(addr)。
date=read_ds1302_byte()。
sda=1。
delay1()。
}
void i2c_ack()
{
uchar i。
scl=1。
delay1()。
while((sda==1)&&(i<250)) i++。
scl=0。
delay1()。
}
void i2c_nack()
{
scl=1。
delay1()。
sda=1。
scl=0。
delay1()。
lcd_rs_port=1。
lcd_rw_port =0。
lcd_en_port=0。
P0=dat。
lcd_en_port=1。
lcd_en_port=0。
}
void wtite_lcd_1602_dat(uchar x_pos,uchar y_pos,uchar dat)

基于51单片机的示波器和密码锁程序(部分)

基于51单片机的示波器和密码锁程序(部分)
GUI_Write14CnCharmin(60,180,"输入错误",RED,GREEN); //输入错误提示
for(i=0;i<2;i++)
{
FMQCX();
}
GUI_Box(50,180,130,200,BLACK); //清除输入错误提示
GUI_Line(0,100,36,100,GREEN);
GUI_Line(0,125,36,125,GREEN);
GUI_Line(0,150,36,150,GREEN);
GUI_Line(0,175,36,175,GREEN);
GUI_Line(0,200,175,200,GREEN);
SRZ[7]=SRZ[6];
SRZ[6]=SRZ[5];
SRZ[5]=SRZ[4];
SRZ[4]=SRZ[3];
SRZ[3]=SRZ[2];
SRZ[2]=SRZ[1];
SRZ[1]=SRZ[0];
SRZ[0]=KeyValue;
}
else if(KeyValue==10) //确认键
GUI_ClearScreen(BLACK); //TFT刷屏,以黑色为底色
for(i=0;i<8;i++) //按键数值赋初值,显示xxxxxxxx
{
SRZ[i]=10;
}
GUI_Box(48,30,133,50,GREEN); //四个上部显示方框
GUI_Box(48,60,133,80,GREEN);
GUI_WriteASCIImin(73,67,"S11",RED,GREEN);

51单片机密码锁程序.

51单片机密码锁程序.

/*停止条件*/ void Stop(void) { Sda=0; Scl=1; Nop(); Sda=1; Nop(); } /*应答位*/ void Ack(void) { Sda=0;
Nop(); Scl=1; Nop(); Scl=0; } /*反向应答位*/ void NoAck(void) { Sda=1; Nop(); Scl=1; Nop(); Scl=0; } /*发送数据子程序,Data 为要求发送的数据*/ void Send(uchar Data) { uchar BitCounter=8; uchar temp; do { temp=Data; Scl=0; Nop(); if((temp&0x80)==0x80) Sda=1; else Sda=0; Scl=1; temp=Data<<1; Data=temp; BitCounter--; } while(BitCounter); Scl=0; } /*读一字节的数据,并返回该字节值*/ uchar Read(void) { uchar temp=0; uchar temp1=0; //判断是否传送完成 //将待发送数据暂存 temp
= {"===Coded Lock==="}; = {" correct "}; = {" error "}; = {" pass "}; = {" open "}; = {"SetNewWordEnable"}; = {"input: "}; = {"ResetPasswordOK "};
unsigned char code initword[] unsigned char code Er_try[] unsigned char code again[]

基于51单片机多功能电子密码锁

基于51单片机多功能电子密码锁

#include <reg52.h>#define uint unsigned int#define uchar unsigned char#define KEY P3 //键盘输入端口#define No_key 20 //无按键时的返回值#define lcddata P2 //1602的数据输入端口sbit lcden= P1^2。

sbit lcdrs= P1^0。

sbit lcdrw= P1^1。

sbit light= P1^3。

sbit light1= P1^4。

uchar j 。

//用来统计输入个数的全局变量uchar aa。

//用来在定时器中计数的全局变量uchar code table[]= " Hello!"。

uchar code table1[]=" OK! " 。

uchar code table2[]="Enter please:" 。

uchar code key_table[16] ={1,2,3,10,4,5,6,11,7,8,9,12,0,13,14,15}。

uchar password[]={2,0,1,0,9,3} 。

//设定初始密码uchar save[6]。

//保存输入的数据uchar conflag 。

//确认标志uchar lockflag。

//锁键盘标志uchar startflag。

//开始标志void delay(uint z>。

//延时子函数void wright_com(uchar com>。

//写指令函数void wright_data(uchar date> 。

//写数据函数void init(>。

//初始化void display_OK(>。

// 显示OKvoid delete(>。

//删除输入的最后一个数uchar keyscan(> 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

自己做的基于单片机的密码锁设计(c语言设计)时间:2011-08-16 21:08:01 来源:作者:自己做的基于单片机的密码锁设计(c语言设计)系统说明该系统如图所示使用了80C51单片机、普通键盘、排阻、1602液晶。

该系统的功能:①该系统输入正确的密码LED灯会亮(其实就是很多操作都可以,用LED只是代表作用,主要是操作简单,效果明显。

)②系统可以修改密码;(系统断电后重启后必须用初始密码(初始密码是:000000)重新改密,当然修改的密码可以与掉电前的一样。

)具体操作:①系统开机时显示请输入密码的提示,直接输入密码#键确认②系统会自动提醒密码错误,数秒后系统会再次提醒重新输密码。

③在系统提醒输入密码的界面可以按*键修改密码,系统会提醒输入两次密码,并且会检查两次密码是否相同。

同则修改成功。

否则在数秒后可以重新按*键修改。

④在改密前(就是按了*键后系统)会提醒身份识别,请输入旧密码,系统判断旧密码正确方可更改密码。

源程序#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit lcdrs=P3^0;sbit lcdrw=P3^1;sbit lcden=P3^2;sbit h1=P1^0;sbit h2=P1^1;sbit h3=P1^2;sbit sa=P1^3;sbit sb=P1^4;sbit sc=P1^5;sbit sd=P1^6;sbit kd=P3^7;uchar code table[]=" PLEASE INPUT ";uchar code table1[]="CODE: ";uchar code table2[]=" *****WIN*****";uchar code table3[]=" PLEASE AFFIRM";uchar code table4[]=" *****FAIL*****";uchar code table5[]=" MODIFICATION";uchar code table6[]=" IDENTITY LIMITS ";uchar unm,M1,M2,M3,M4,M5,M6,sex,k1,k2,k3,k4,k5,k6,flge,flge1;uchar q1,q2,q3,q4,q5,q6,w1,w2,w3,w4,w5,w6,g;void delay(int z){int x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void delay1(int z){int x,y;for(x=z;x>0;x--)for(y=20000;y>0;y--);}void writen_com(uchar com) //1602写命令{lcdrs=0;P0=com;delay(1);lcden=1;delay(1);lcden=0;}void writen_dat(uchar dat) //1602写数据{lcdrs=1;P0=dat;delay(1);lcden=1;delay(1);lcden=0;}void main();void cheak_mima() //检查第二次确认密码是否与第一次相同{if(q1==w1){if(q2==w2){if(q3==w3){if(q4==w4){if(q5==w5){if(q6==w6){writen_com(0x01);writen_com(0x0f);writen_com(0x06);writen_com(0x80);for(unm=0;unm<14;unm++){writen_dat(table5[unm]);delay(5);}writen_com(0x80+0x40+1);for(unm=0;unm<14;unm++){writen_dat(table2[unm]);delay(5);}M1=w1;M2=w2;M3=w3;M4=w4;M5=w5;M6=w6;delay1(6);main();}/*-----------------------------------*/ //密码确认错误返回writen_com(0x01);writen_com(0x80);for(unm=0;unm<14;unm++){writen_dat(table4[unm]);delay(5);}delay1(6);main();}writen_com(0x01);writen_com(0x80);for(unm=0;unm<14;unm++){writen_dat(table4[unm]);delay(5);}delay1(6);main();}writen_com(0x01);writen_com(0x80);for(unm=0;unm<14;unm++){writen_dat(table4[unm]);delay(5);}delay1(6);main();}writen_com(0x01);writen_com(0x80);for(unm=0;unm<14;unm++){writen_dat(table4[unm]);delay(5);}delay1(6);main();}writen_com(0x01);writen_com(0x80);for(unm=0;unm<14;unm++){writen_dat(table4[unm]);delay(5);}delay1(6);main();}writen_com(0x01);writen_com(0x80);for(unm=0;unm<14;unm++){writen_dat(table4[unm]);delay(5);}delay1(6);main();}/*------------------------------------*/ //第二次确认密码void affirm_code(){P1=0x07;if(P1!=0x07)delay(1);if(P1!=0x07){P1=0x77;if(h1==0){delay(1);if(h1==0){while(!h1);writen_com(0x80+0x45+sex);writen_dat('*');switch(sex){case 0:w1=1;break;case 1:w2=1;break;case 2:w3=1;break;case 3:w4=1;break;case 4:w5=1;break;case 5:w6=1;break;}sex++;}}if(h2==0){delay(1);if(h2==0){while(!h2);writen_com(0x80+0x45+sex);writen_dat('*');{case 0:w1=2;break;case 1:w2=2;break;case 2:w3=2;break;case 3:w4=2;break;case 4:w5=2;break;case 5:w6=2;break;}sex++;}}if(h3==0){delay(1);if(h3==0){while(!h3);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:w1=3;break;case 1:w2=3;break;case 2:w3=3;break;case 3:w4=3;break;case 4:w5=3;break;case 5:w6=3;break;}sex++;}}/*-------------------------------*/ P1=0x6f;if(h1==0){delay(1);if(h1==0){while(!h1);writen_com(0x80+0x45+sex); writen_dat('*');{case 0:w1=4;break;case 1:w2=4;break;case 2:w3=4;break;case 3:w4=4;break;case 4:w5=4;break;case 5:w6=4;break;}sex++;}}if(h2==0){delay(1);if(h2==0){while(!h2);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:w1=5;break;case 1:w2=5;break;case 2:w3=5;break;case 3:w4=5;break;case 4:w5=5;break;case 5:w6=5;break;}sex++;}}if(h3==0){delay(1);if(h3==0){while(!h3);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 1:w2=6;break;case 2:w3=6;break;case 3:w4=6;break;case 4:w5=6;break;case 5:w6=6;break;}sex++;}}/*--------------------------------*/ P1=0x5f;if(h1==0){delay(1);if(h1==0){while(!h1);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:w1=7;break;case 1:w2=7;break;case 2:w3=7;break;case 3:w4=7;break;case 4:w5=7;break;case 5:w6=7;break;}sex++;}}if(h2==0){delay(1);if(h2==0){while(!h2);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 1:w2=8;break;case 2:w3=8;break;case 3:w4=8;break;case 4:w5=8;break;case 5:w6=8;break;}sex++;}}if(h3==0){delay(1);if(h3==0){while(!h3);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:w1=9;break;case 1:w2=9;break;case 2:w3=9;break;case 3:w4=9;break;case 4:w5=9;break;case 5:w6=9;break;}sex++;}}/*-----------------------------------*/ P1=0x3f;if(h2==0) //0键扫描{delay(1);if(h2==0){while(!h2);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 1:w2=0;break;case 2:w3=0;break;case 3:w4=0;break;case 4:w5=0;break;case 5:w6=0;break;}sex++;}}if(h3==0) //#键扫描{delay(1);if(h3==0){while(!h3);while(!flge1)cheak_mima();}}}}/*--------------------------------------*/ //修改密码自己做的基于单片机的密码锁设计(c语言设计)时间:2011-08-16 21:08:01 来源:作者:void set_mima(){P1=0x07;if(P1!=0x07)delay(1);if(P1!=0x07){P1=0x77;if(h1==0){delay(1);if(h1==0){while(!h1);writen_com(0x80+0x45+sex);writen_dat('*');switch(sex){case 0:q1=1;break;case 1:q2=1;break;case 2:q3=1;break;case 3:q4=1;break;case 4:q5=1;break;case 5:q6=1;break;}sex++;}}if(h2==0){delay(1);if(h2==0){while(!h2);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:q1=2;break;case 1:q2=2;break;case 2:q3=2;break;case 3:q4=2;break;case 4:q5=2;break;case 5:q6=2;break;}sex++;}}if(h3==0){delay(1);if(h3==0){while(!h3);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 1:q2=3;break;case 2:q3=3;break;case 3:q4=3;break;case 4:q5=3;break;case 5:q6=3;break;}sex++;}}P1=0x6f;if(h1==0){delay(1);if(h1==0){while(!h1);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:q1=4;break;case 1:q2=4;break;case 2:q3=4;break;case 3:q4=4;break;case 4:q5=4;break;case 5:q6=4;break;}sex++;}}if(h2==0){delay(1);if(h2==0){while(!h2);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:q1=5;break;case 2:q3=5;break;case 3:q4=5;break;case 4:q5=5;break;case 5:q6=5;break;}sex++;}}if(h3==0){delay(1);if(h3==0){while(!h3);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:q1=6;break;case 1:q2=6;break;case 2:q3=6;break;case 3:q4=6;break;case 4:q5=6;break;case 5:q6=6;break;}sex++;}}P1=0x5f;if(h1==0){delay(1);if(h1==0){while(!h1);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:q1=7;break;case 1:q2=7;break;case 3:q4=7;break;case 4:q5=7;break;case 5:q6=7;break;}sex++;}}if(h2==0){delay(1);if(h2==0){while(!h2);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:q1=8;break;case 1:q2=8;break;case 2:q3=8;break;case 3:q4=8;break;case 4:q5=8;break;case 5:q6=8;break;}sex++;}}if(h3==0){delay(1);if(h3==0){while(!h3);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:q1=9;break;case 1:q2=9;break;case 2:q3=9;break;case 3:q4=9;break;case 5:q6=9;break;}sex++;}}P1=0x3f;if(h2==0) //0键扫描{delay(1);if(h2==0){while(!h2);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:q1=0;break;case 1:q2=0;break;case 2:q3=0;break;case 3:q4=0;break;case 4:q5=0;break;case 5:q6=0;break;}sex++;}}if(h3==0) //#键扫描{delay(1);if(h3==0){while(!h3);writen_com(0x01);writen_com(0x0f);writen_com(0x06);writen_com(0x80);for(unm=0;unm<14;unm++){writen_dat(table3[unm]);delay(5);}writen_com(0x80+0x40);for(unm=0;unm<5;unm++) {writen_dat(table1[unm]);delay(5);}sex=0;while(!flge1)affirm_code();}}}}void init();void cheak_identity2(){if(k1==M1){if(k2==M2){if(k3==M3){if(k4==M4){if(k5==M5){if(k6==M6){sex=0;init();while(!flge1)set_mima();}writen_com(0x01);writen_com(0x0c);writen_com(0x06);writen_com(0x80);for(unm=0;unm<14;unm++){writen_dat(table4[unm]);delay(5);}delay1(6);main();}writen_com(0x01);writen_com(0x0c);writen_com(0x06);writen_com(0x80);for(unm=0;unm<14;unm++) {writen_dat(table4[unm]); delay(5);}delay1(6);main();}writen_com(0x01);writen_com(0x0c);writen_com(0x06);writen_com(0x80);for(unm=0;unm<14;unm++) {writen_dat(table4[unm]); delay(5);}delay1(6);main();}writen_com(0x01);writen_com(0x0c);writen_com(0x06);writen_com(0x80);for(unm=0;unm<14;unm++) {writen_dat(table4[unm]); delay(5);}delay1(6);main();}writen_com(0x01);writen_com(0x0c);writen_com(0x06);writen_com(0x80);for(unm=0;unm<14;unm++){writen_dat(table4[unm]); delay(5);}delay1(6);main();}void cheak_identity(){P1=0x07;if(P1!=0x07)delay(1);if(P1!=0x07){P1=0x77;if(h1==0){delay(1);if(h1==0){while(!h1);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:k1=1;break;case 1:k2=1;break;case 2:k3=1;break;case 3:k4=1;break;case 4:k5=1;break;case 5:k6=1;break;}sex++;}}if(h2==0)delay(1);if(h2==0){while(!h2);writen_com(0x80+0x45+sex);writen_dat('*');switch(sex){case 0:k1=2;break;case 1:k2=2;break;case 2:k3=2;break;case 3:k4=2;break;case 4:k5=2;break;case 5:k6=2;break;}sex++;}}if(h3==0){delay(1);if(h3==0){while(!h3);writen_com(0x80+0x45+sex);writen_dat('*');switch(sex){case 0:k1=3;break;case 1:k2=3;break;case 2:k3=3;break;case 3:k4=3;break;case 4:k5=3;break;case 5:k6=3;break;}sex++;}}/*-------------------------------*/P1=0x6f;if(h1==0){delay(1);if(h1==0){while(!h1);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:k1=4;break;case 1:k2=4;break;case 2:k3=4;break;case 3:k4=4;break;case 4:k5=4;break;case 5:k6=4;break;}sex++;}}if(h2==0){delay(1);if(h2==0){while(!h2);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:k1=5;break;case 1:k2=5;break;case 2:k3=5;break;case 3:k4=5;break;case 4:k5=5;break;case 5:k6=5;break;}sex++;}}if(h3==0){delay(1);if(h3==0){while(!h3);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:k1=6;break;case 1:k2=6;break;case 2:k3=6;break;case 3:k4=6;break;case 4:k5=6;break;case 5:k6=6;break;}sex++;}}/*--------------------------------*/ P1=0x5f;if(h1==0){delay(1);if(h1==0){while(!h1);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:k1=7;break;case 1:k2=7;break;case 2:k3=7;break;case 3:k4=7;break;case 4:k5=7;break;case 5:k6=7;break;}sex++;}}if(h2==0){delay(1);if(h2==0){while(!h2);writen_com(0x80+0x45+sex);writen_dat('*');switch(sex){case 0:k1=8;break;case 1:k2=8;break;case 2:k3=8;break;case 3:k4=8;break;case 4:k5=8;break;case 5:k6=8;break;}sex++;}}if(h3==0){delay(1);if(h3==0){while(!h3);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:k1=9;break;case 1:k2=9;break;case 2:k3=9;break;case 3:k4=9;break;case 4:k5=9;break;case 5:k6=9;break;}sex++;}}/*-----------------------------------*/ P1=0x3f;if(h2==0) //0键扫描{delay(1);if(h2==0){while(!h2);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:k1=0;break;case 1:k2=0;break;case 2:k3=0;break;case 3:k4=0;break;case 4:k5=0;break;case 5:k6=0;break;}sex++;}}if(h3==0) //#键扫描{delay(1);if(h3==0){while(!h3);while(!flge1)cheak_identity2();}}}}/*---------------------------------------*/ //键盘扫描void keyscan(){P1=0x07;if(P1!=0x07)delay(1);if(P1!=0x07){P1=0x77;if(h1==0){delay(1);if(h1==0){while(!h1);writen_com(0x80+0x45+sex);writen_dat('*');switch(sex){case 0:k1=1;break;case 1:k2=1;break;case 2:k3=1;break;case 3:k4=1;break;case 4:k5=1;break;case 5:k6=1;break;}sex++;}}if(h2==0){delay(1);if(h2==0){while(!h2);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:k1=2;break;case 1:k2=2;break;case 2:k3=2;break;case 3:k4=2;break;case 4:k5=2;break;case 5:k6=2;break;}sex++;}}if(h3==0){delay(1);if(h3==0){while(!h3);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:k1=3;break;case 1:k2=3;break;case 2:k3=3;break;case 3:k4=3;break;case 4:k5=3;break;case 5:k6=3;break;}sex++;}}P1=0x6f;if(h1==0){delay(1);if(h1==0){while(!h1);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:k1=4;break;case 1:k2=4;break;case 2:k3=4;break;case 3:k4=4;break;case 4:k5=4;break;case 5:k6=4;break;}sex++;}}if(h2==0){delay(1);if(h2==0){while(!h2);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:k1=5;break;case 1:k2=5;break;case 2:k3=5;break;case 3:k4=5;break;case 4:k5=5;break;case 5:k6=5;break;}}}if(h3==0){delay(1);if(h3==0){while(!h3);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:k1=6;break;case 1:k2=6;break;case 2:k3=6;break;case 3:k4=6;break;case 4:k5=6;break;case 5:k6=6;break;}sex++;}}/*--------------------------------*/ P1=0x5f;if(h1==0){delay(1);if(h1==0){while(!h1);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:k1=7;break;case 1:k2=7;break;case 2:k3=7;break;case 3:k4=7;break;case 4:k5=7;break;case 5:k6=7;break;}}}if(h2==0){delay(1);if(h2==0){while(!h2);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:k1=8;break;case 1:k2=8;break;case 2:k3=8;break;case 3:k4=8;break;case 4:k5=8;break;case 5:k6=8;break;}sex++;}}if(h3==0){delay(1);if(h3==0){while(!h3);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:k1=9;break;case 1:k2=9;break;case 2:k3=9;break;case 3:k4=9;break;case 4:k5=9;break;case 5:k6=9;break;}sex++;}/*-----------------------------------*/ P1=0x3f;if(h1==0) //*键扫描{delay(1);if(h1==0){while(!h1);writen_com(0x0f);writen_com(0x06);writen_com(0x80);for(unm=0;unm<16;unm++){writen_dat(table6[unm]);delay(5);}while(!flge1)cheak_identity();}}if(h2==0) //0键扫描{delay(1);if(h2==0){while(!h2);writen_com(0x80+0x45+sex); writen_dat('*');switch(sex){case 0:k1=0;break;case 1:k2=0;break;case 2:k3=0;break;case 3:k4=0;break;case 4:k5=0;break;case 5:k6=0;break;}sex++;}}if(h3==0) //#键扫描delay(1);if(h3==0){while(!h3);flge=1;}}}}/*-------------------------------------*/ //密码检查void init();void check_code(){if(k1==M1){if(k2==M2){if(k3==M3){if(k4==M4){if(k5==M5){if(k6==M6){writen_com(0x01);kd=0;writen_com(0x0c);writen_com(0x06);writen_com(0x80);for(unm=0;unm<14;unm++){writen_dat(table2[unm]);delay(5);}delay1(6);kd=1;main();writen_com(0x0c);writen_com(0x06);writen_com(0x80);for(unm=0;unm<14;unm++) {writen_dat(table4[unm]); delay(5);}delay1(6);main();}writen_com(0x0c);writen_com(0x06);writen_com(0x80);for(unm=0;unm<14;unm++) {writen_dat(table4[unm]); delay(5);}delay1(6);main();}writen_com(0x0c);writen_com(0x06);writen_com(0x80);for(unm=0;unm<14;unm++) {writen_dat(table4[unm]); delay(5);}delay1(6);main();}writen_com(0x0c);writen_com(0x06);writen_com(0x80);for(unm=0;unm<14;unm++) {writen_dat(table4[unm]); delay(5);}delay1(6);main();}writen_com(0x0c);writen_com(0x06);writen_com(0x80);for(unm=0;unm<14;unm++) {writen_dat(table4[unm]); delay(5);}delay1(6);main();}}writen_com(0x0c);writen_com(0x06);writen_com(0x80);for(unm=0;unm<14;unm++) {writen_dat(table4[unm]); delay(5);}delay1(6);main();}void now_mima(){M1=0;M2=0;M3=0;M4=0;M5=0;M6=0;g=0;}void init(){if(g==0)now_mima();g=1;flge1=0;flge=0;sex=0;lcdrw=0;lcden=0;writen_com(0x01);writen_com(0x38);writen_com(0x0f);writen_com(0x06);writen_com(0x80);for(unm=0;unm<14;unm++){writen_dat(table[unm]); delay(5);}writen_com(0x80+0x40);for(unm=0;unm<5;unm++) {writen_dat(table1[unm]); delay(5);}}void main(){while(1){init();set_mima();while(!flge)keyscan();check_code();}}。

相关文档
最新文档