密码锁程序修改-
密码锁程序
1、设计一个密码锁的控制电路,当输入正确代码时,输出开锁信号以推动执行机构工作,用红灯亮、绿灯熄灭表示关锁,用绿灯亮、红灯熄灭表示开锁;2、在锁的控制电路中储存一个可以修改的4位二进制代码,当开锁按钮开关的输入代码等于储存代码时,开锁;3、从第一个按钮触动后的30秒内若未将锁打开,则电路长报警5S,若输入密码错误1或2次,则每次短报警1S,若输错三次密码则长报警。
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity lock isport(clk_1k:in std_logic; --1024HZ频率输入管脚enter_2,enter_1: in std_logic; --设密码确认及输入密码确认datain:in std_logic_vector(3 downto 0); --密码数据输入speaker:out std_logic; --喇叭led_g,led_r:out std_logic); --绿灯及红灯end entity lock;architecture behave of lock issignal ram:std_logic_vector(3 downto 0);signal judge:std_logic;signal clk:std_logic;signal turn_on,turn_off:std_logic;beginprocess(Clk_1k)variable clk_count:std_logic_vector(8 downto 0):="000000000";beginif clk_1k'event and clk_1k='1' then --分频if clk_count<511 thenclk_count:=clk_count+1;elseclk_count:="000000000";clk<=not clk;end if;end if;end process;process(datain,enter_1) --设置密码beginif enter_1'event and enter_1='1' thenram<=datain;end if;end process;process(clk_1k) --判断第一位密码按下时开始计时beginif clk_1k'event and clk_1k='1' thenif enter_1='0' thenjudge<='0';end if;if judge='0' and enter_1='1' thenif datain/=ram then judge<='1';end if;end if;end if;end process;process(judge,clk,enter_2)variable count:std_logic_vector(4 downto 0):="00000"; --判断自第一个按键开始的时间是否超30秒variable judge_sh:std_logic_vector(1 downto 0):="00"; --判断输入错误密码次数variable switch:std_logic:='0'; --判断是否锁定键盘beginif clk'event and clk='1' thenif enter_1='0' then --数据复位count:="00000";judge_sh:="00";switch:='0';end if;if switch='0' thenif judge='1' thenif count<"11110" then --30 秒计时 count:=count+1;if enter_2='1' thenif datain = ram thenturn_on<='1';turn_off<='0';switch:='1'; --开锁elseif judge_sh<"10" thenjudge_sh:=judge_sh+1;turn_on<='1';turn_off<='1';s witch:='0'; -elseturn_on<='0';turn_off<='1';switch:='1'; -- 3次 end if;end if;elseturn_on<='0';turn_off<='0';switch:='0'; --等待下次输入end if;elseturn_on<='0';turn_off<='1';switch:='1';end if;end if;end if;end if;end process;process(clk,clk_1k,turn_on)variable count:std_logic_vector(3 downto 0):="0000"; --长报警时间variable count_sh:std_logic_vector(1 downto 0):="00"; --短报警时间variable temp,temp_sh:std_logic:='0'; --判断是短报警或长报警beginif clk'event and clk='1' thenif enter_1='0' then --数据复位count:="0000";count_sh:="00";temp:='0';temp_sh:='0';end if;if turn_on='0' and turn_off='1' thenif count<"0101" then --响5秒count:=count+1;temp:='1';led_g<='0';led_r<='1';elsetemp:='0';end if;elsif turn_on='1' and turn_off='0' thenled_g<='1';led_r<='0';elsif turn_on='1' and turn_off='1' thentemp_sh:='1'; --响1秒elsif turn_on='0' and turn_off='0' thenled_g<='0';led_r<='1';temp_sh:='0';else null;end if;end if;speaker<=(temp or temp_sh) and clk_1k; --驱动喇叭end process;课程 EDA技术课程设计题目电子密码锁专业姓名学号主要内容、基本要求、主要参考资料等主要内容:设计一个密码锁的控制电路,第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,当输入正确代码时,输出开锁信号以推动执行机构工作。
Digital_lock(电子密码锁程序——完整版)
Digital_lock(电子密码锁程序——完整版)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include#include#include#include"KEY_4x4.h"#include"LCD_1602.h"#include"I2C.h"#define uint unsigned int#define uchar unsigned charuchar code table0[]=" ";uchar code table1[]="PLESSE ID";uchar code table2[]="WELCOME";uchar code table3[]="HAPPY";uchar code table4[]="ERROR";uchar code table5[]="****";uchar code table6[]="ERROR AGAIN";uchar code table8[]="SUCCEED";uchar code table9[]="OK";uchar code table10[]="Change Password";uchar code table11[]="Y/N";uchar code table12[]="New Password";uchar code table13[]="Succeed";uchar code table14[]="NOT FORGET";uchar code table15[]="Keyboard Locked";uchar code table16[]="S_users Y/N";uchar code table17[]="YOU NOT S_user"; uchar code table18[]="S_user Password"; uchar code table19[]="S_user Password"; uchar code table20[]="S_user ID";uchar code table21[]="Remember:";uchar code table22[]="Init Password";sbit yellow=P2^5; // 上锁指示灯sbit red=P2^6; //密码错误信号sbit green=P2^7; //已开锁指示信号sbit blue=P2^4; //修改密码指示信号bit keyscan_flag;//键盘有键按下标志bit BJCB=0; //密码正确错误标志bit BJ=0; //报警标志位bit SJ=0; //锁键盘标志位bit super_flag=0;//超级用户密码是否正确标志bit come_flag=0; //用户输入标志位bit finish_flag=0; //密码输完标志位bit error_alarm_flag=0;// 密码错误报警标志bit right_alarm_flag=0;//密码正确报警标志uchar PSWD0[10]=0; //密码输入缓存存储单元uchar PSWD1[10]=0; //读出密码缓存存储单元uchar PSWD2[4]={8,8,8,8};//用户初始密码存储单元uchar PSWD3[4]={1,1,1,1};//超级用户密码存储单元uchar m,num,wo,count=0;void delay1(uint x){uchar i;for(;x>0;x--)for(i=200;i>0;i--);}/************************************************************** *函数功能:第一次烧片时将初始密码烧到24c02*************************************************************** */void burn_frist(void) //{uchar i;for(i=0;i<4;i++){I2C_write_data(i,PSWD2[i]);delay1(20);}delay1(20);for(i=0;i<4;i++){I2C_write_data(i+10,PSWD3[i]);delay1(20);}}/************************************************************** *函数功能:报警声音*************************************************************** /void alarm_error(uint t){uint n;for(;t>0;t--){for(n=0;n<300;n++);BEEP=~BEEP; //取反输出到喇叭的信号}}void alarm_right(uint t){uint n;for(;t>0;t--){for(n=0;n<500;n++);BEEP=~BEEP; //取反输出到喇叭的信号}}/************************************************************** 函数功能:显示各个提示**************************************************************/ void display0(void)/* 显示输入的数字 */{write_1602_com(0x80+0x45+wo);write_1602_data(num+48);delay1(1800);write_1602_com(0x80+0x45+ wo++);write_1602_data('*');void display1(void) /* 上电时显示 */{uchar length=0;length=strlen(table0);write_1602_com(0x80);display(table0,length); // PLESSE IDlength=strlen(table0);write_1602_com(0x80+0x40);display(table0,length);length=strlen(table1);write_1602_com(0x83);display(table1,length);}void display2(void) /* 第1、2次密码错误显示 */ {uchar length=0;length=strlen(table0);write_1602_com(0x80);display(table0,length);length=strlen(table6); //ERROR AGAINwrite_1602_com(0x82);display(table6,length);// length=strlen(table5); // ****// write_1602_com(0x80+0x45);// display(table5,length);}void display3(void) /* 第3次密码输入错误显示 */uchar length=0;length=strlen(table0);write_1602_com(0x80);display(table0,length);length=strlen(table4); // ERRORwrite_1602_com(0x85);display(table4,length);//length=strlen(table5); //****//write_1602_com(0x80+0x45);//display(table5,length);}void display4(void) /* 密码输入正确显示 */ {uchar length=0;length=strlen(table0);write_1602_com(0x80);display(table0,length);length=strlen(table2); //WELCOME write_1602_com(0x84);display(table2,length);length=strlen(table3); //HAPPYwrite_1602_com(0x80+0x45);display(table3,length);}void display5(void) /*提示修改密码显示 */ {uchar length=0;write_1602_com(0x80);display(table0,length);length=strlen(table10);// change password write_1602_com(0x80);display(table10,length);length=strlen(table0);write_1602_com(0x80+0x40);display(table0,length);length=strlen(table11);// Y/Nwrite_1602_com(0x80+0x46);display(table11,length);}void display6(void) /*提示新密码输入显示 */ {uchar length=0;length=strlen(table0);write_1602_com(0x80);display(table0,length);length=strlen(table12);// new password write_1602_com(0x82);display(table12,length);length=strlen(table0);write_1602_com(0x80+0x40);display(table0,length);}void display7(void)/* 提示密码修改正确显示 */ {uchar length=0;write_1602_com(0x80);display(table0,length);length=strlen(table13);//succeedwrite_1602_com(0x84);display(table13,length);length=strlen(table0);write_1602_com(0x80+0x40);display(table0,length);length=strlen(table14);//NOT FORGETwrite_1602_com(0x80+0x42);display(table14,length);}void display8(void)/* 3次输入密码错误后,进入超级用户提示显示 */{uchar length=0;length=strlen(table0);write_1602_com(0x80);display(table0,length);length=strlen(table15); //Keyboard Lockedwrite_1602_com(0x80);display(table15,length);length=strlen(table16); //S_users Y/Nwrite_1602_com(0x80+0x41);display(table16,length);}void display9(void) /* 非法超级用户 */{uchar length=0;length=strlen(table0);write_1602_com(0x80);display(table0,length);length=strlen(table17); //YOU NOT S_user write_1602_com(0x80);display(table17,length);length=strlen(table0);write_1602_com(0x80);display(table0,length);length=strlen(table15); //Keyboard Locked write_1602_com(0x80);display(table15,length);}void display10(void) /* 正确超级用户进入显示 */ {uchar length=0;length=strlen(table0);write_1602_com(0x80);display(table0,length);length=strlen(table18); //S_user Password write_1602_com(0x80);display(table18,length);length=strlen(table0);write_1602_com(0x80+0x40);display(table0,length);}void display11(void) /* 超级用户密码输入提示 */{uchar length=0;length=strlen(table0);write_1602_com(0x80);display(table0,length); // S_user IDlength=strlen(table20);write_1602_com(0x82);display(table20,length);length=strlen(table0);write_1602_com(0x80+0x40);display(table0,length);}void display12(void) /* 显示初始密码提示用户记住密码*/ {uchar i,length;length=strlen(table0);write_1602_com(0x80);display(table0,length); //Init Passwordlength=strlen(table22);write_1602_com(0x80);display(table22,length);length=strlen(table21);write_1602_com(0x80+0x40);//Remember:display(table21,length);length=strlen(PSWD2);write_1602_com(0x80+0x4c);for(i=0;i<length;i++){write_1602_data(PSWD2[i]+48);}}/************************************************************* 函数功能:从键盘扫描密码**************************************************************/ void key(void){if(keyscan_flag==1 && num<=9){write_1602_com(0x80+0x45+wo);write_1602_data(num+48);delay1(1800);write_1602_com(0x80+0x45+ wo++);write_1602_data('*');PSWD0[m++]=num;//*password=num;//password++;}}/************************************************************** *******函数功能:密码判断*************************************************************** ******/void judge_password(void){uchar i;if(keyscan_flag==1 && num==15) {keyscan_flag=0;m=0;for(i=0;i<4;i++) //从24c02里读出密码{PSWD1[i]=I2C_read_data(i);delay1(10);}for(i=0;i<4;i++){if(PSWD1[i]!=PSWD0[i]){BJCB=1;break;}elseBJCB=0;}wo=0;}}void super_judge_password(void) {uchar i;if(keyscan_flag==1 && num==15) </length;i++){keyscan_flag=0;for(i=0;i<4;i++) //从24c02里读出密码{PSWD1[i]=I2C_read_data(i+10);delay1(10);}for(i=0;i<4;i++){if(PSWD1[i]!=PSWD0[i]){super_flag=1;break;}elsesuper_flag=0;}wo=0;}}/************************************************************** ********函数功能:判断密码是否正确以及修改密码*************************************************************** ********/void pass_word(void){uchar i;uchar m=0,length=0;//uchar *password;//password=PSWD0;loop: yellow=0;green=1;red=1;display1();if(SJ==0){m=0;do{// key();keyscan_flag=0; //键盘标志位num=keyscan();if(keyscan_flag==1 && num<=9){display0();PSWD0[m++]=num;}if(keyscan_flag==1 && num==10||num==11||num==12||num==13){red=0;delay1(2000);red=1;goto loop;}}while(num!=15);if(m!=4){for(i=m;i<4;i++){PSWD0[i]=0;}}judge_password(); //密码判断/* 密码错误相关处理 */if(BJCB){count++;if(count!=3){yellow=1;red=0;BJCB=0; //清第一次和第二次报警error_alarm_flag=1;display2();/* 密码错误报警声 */for(i=0;i<3;i++){alarm_error(200);delay1(2000);}red=1;goto loop;}else if(count==3){red=0;count=0;BJCB=0;yellow=1;error_alarm_flag=1;display3(); //第3次密码输入错误显示/* 密码错误报警声 */for(i=0;i<5;i++){alarm_error(200);delay1(2000);}display8();//进入超级用户提示显示do{keyscan_flag=0;num=keyscan();if(num==14){ // 15表示 Ybreak; // 14表示 N}}while(num!=15);/* Y 进入超级密码设置 N 跳出超级密码设置但键盘被锁 */ if(keyscan_flag && num==15){display11();// 超级用户密码输入提示m=0;do{keyscan_flag=0;num=keyscan();if(keyscan_flag==1 && num<=9){display0();PSWD0[m++]=num;}}while(num!=15);super_judge_password(); //密码判断if(super_flag){display9(); //非法超级用户SJ=1; //锁键盘delay1(4000);}else //是超级用户{display10(); //显示超级用户display12(); // 显示初始密码提示用户记住密码/* 再次将初始密码写入 */delay1(50);for(i=0;i<4;i++){I2C_write_data(i,PSWD2[i]);delay1(20);}delay1(50);do{keyscan_flag=0;num=keyscan();}while(num!=15);num=0;}}if(keyscan_flag && num==14) {SJ=1; //锁键盘}red=1;m=0;delay1(4000);goto loop;}}/* 密码正确处理 */else{red=1;green=0; //表示密码正确yellow=1;right_alarm_flag=1;m=0; //密码个数清零display4();alarm_right(700);}LOOP1: do{keyscan_flag=0;num=keyscan();if(keyscan_flag){keyscan_flag=0;switch(num){case 11:{blue=0; //修改密码标记green=1;display5(); //提示修改密码do{keyscan_flag=0;num=keyscan();if(num==14){ // 14表示 Nbreak; // 15表示 Y}}while(num!=15);/* Y 从新向24c02写新密码 N跳出 */ if(keyscan_flag==1 && num==15){display6();m=0;wo=0;do{keyscan_flag=0;num=keyscan();if(keyscan_flag==1 && num<=9) {PSWD0[m++]=num;display0();}if(m==10){goto LOOP1; //超出10位密码范围}}while(num!=15);if(m!=10 && num==15) //{for(i=m;i<10;i++){PSWD0[i]=0;}}if(keyscan_flag && num==15) {keyscan_flag=0;for(i=0;i<4;i++) //一个向24c02里写{I2C_write_data(i,PSWD0[i]);delay1(20);}display7();//提示修改密码成功}do{keyscan_flag=0;num=keyscan();}while(num!=15); //锁锁返回wo=0;blue=1;goto loop;}/* 不修改密码跳到初始界面 */else if(keyscan_flag && num==14) {blue=1;wo=0;goto loop;}}break;case 14:{goto loop;}break;default: goto loop;}}}while(keyscan_flag!=0);//如果设置密码键按下goto LOOP1;}}void init_timer(void){TMOD=0x01; //定时器工作在方式1TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;EA=1;}void main(){//uchar i;//uchar m=0,length=0;//uchar *password;//password=PSWD0;m=0;num=0;wo=0;count=0;init_timer();I2C_init();init_1602();// burn_frist(); //第一次烧片时用// while(1)// {pass_word();// }for(;;);}void timer0() interrupt 1{uint i;TL0=(65536-50000)%256; // 重装计数初值TH0=(65536-50000)/256; // 对TH0 TL0赋值5MS定时if(error_alarm_flag){for(i=0;i<3;i++){alarm_error(200);}}if(right_alarm_flag){//for(i=0;i<3;i++)//{alarm_right(1000);// }} }。
电子密码锁程序代码
#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define lint long intsbit sda=P0^0;sbit scl=P0^1;sbit L1=P0^4;sbit L2=P0^6;void write_date(uchar,uchar);uchar code tab1[]={0,1,2,3,4,5,6,7,8,9};uchar code tab2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchar code wela[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选编码uchar code Error[]={0x71,0x77,0x38,0x6d,0x79};uchar mima[8];uchar mima1[8];uchar num=20,temp,i=0,k=0,flag=0,flag1=2,flag2=2,flag3=0,flag4=0,a=0,b=0; //定义存储器,实现掉电保存void delay(){ ; ; }void start() //开始信号{sda=1;delay();scl=1;delay();sda=0;delay();}void stop() //停止{sda=0;delay();scl=1;delay();sda=1;delay();}void respons() //应答{uchar i;scl=1;delay();while((sda==1)&&(i<250))i++;scl=0;delay();}//显示函数//写入一字节数据void write_byte(uchar dat){uchar i,temp;temp=dat;for(i=0;i<8;i++){temp=temp<<1;scl=0;delay();sda=CY;delay();scl=1;delay();}scl=0;delay();sda=1;delay();}//读取一字节数据uchar read_byte(){uchar i,k;scl=0;delay();sda=1;delay();for(i=0;i<8;i++){scl=1;delay();k=(k<<1)|sda;scl=0;delay();}return k;}//大延时void delay1(uchar x){uchar y,z;for(y=x;y>0;y--)for(z=100;z>0;z--);}void write_date(uchar date,uchar add) {start();write_byte(0xa0);respons();write_byte(add);respons();write_byte(date);respons();stop();}//各种显示函数void display1(){for(i=0;i<5;i++){P2=wela[i];P1=Error[i];delay1(3);}}void display2(){P2=0xfe;P1=0x3f;delay1(3);}void display(uchar k){uchar j;for(j=0;j<=k;j++){P2=wela[j];P1=0xff;delay1(3);}}uchar read_add(uchar address) {uchar date;start();write_byte(0xa0);respons();write_byte(address);respons();start();write_byte(0xa1);respons();date=read_byte();stop();return date;}void init(){sda=1;delay();scl=1;delay();TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=0;TR0=0;ET1=0;TR1=0;for(i=0;i<8;i++){uchar add;add=i+2;mima[i]=read_add(add);}}uchar keyscan(){P3=0xfe;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay1(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case 0xee:num=0;break;case 0xde:num=1;break;case 0xbe:num=2;break;case 0x7e:num=3;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xfd;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay1(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case 0xed:num=4;break;case 0xdd:num=5;break;case 0xbd:num=6;break;case 0x7d:num=7;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xfb;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay1(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case 0xeb:num=8;break;case 0xdb:num=9;break;case 0xbb:num=10;break;case 0x7b:num=11;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xf7;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay1(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case 0xe7:num=12;break;case 0xd7:num=13;break;case 0xb7:num=14;break;case 0x77:num=15;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}if(num==11){flag++;num=20;k=0;}//修改密码if(flag==1){if(flag2==2){P2=0x00;P1=0x31;}else if(flag4==0)display(k-1);if(num>=0&&num<=9&&flag3==0){flag2=1;if(k<8){mima1[k]=num;k++;}num=20;}//删除键if(num==12&&flag3==0){mima1[k]=0;k--;num=20;}//第一次判断if(num==10&&flag3==0){for(i=0;i<8;i++){if(mima[i]==mima1[i]){flag1=1;// flag2=1;}else{flag1=0;// flag2=0;i=8;}}num=20;k=0;}if(flag1==1) //输入新密码并保存{if(flag2==1){flag3=1;flag4=1;P2=0x00;P1=0x3f;}if(num>=0&&num<=9){flag2=0;flag4=0;if(k<8){mima1[k]=num;k++;}num=20;}if(num==12){mima1[k]=0;k--;num=20;}if(num==10){for(i=0;i<8;i++){uchar add;add=i+2;write_date(mima1[i],add);delay1(100);mima[i]=read_add(add);}num=20;k=0;flag2=2;}}if(flag1==0){flag3=1;display1();flag4=1;ET0=1;TR0=1;}}//输入密码开锁if(flag==0){if(flag2==2){P2=0x00;P1=0xff;}else if(flag3==0)display(k-1);if(num>=0&&num<=9&&flag3==0){flag2=0;mima1[k]=num;k++;num=20;}if(num==12&&flag3==0){mima1[k]=0;k--;num=20;}if(num==10&&flag3==0){for(i=0;i<8;i++){if(mima[i]==mima1[i]){flag1=1;}else{flag1=0;i=8;}}num=20;k=0;}if(flag1==1){flag3=1;TR1=1;}if(flag1==0){ display1();if(num!=20){display1();a=0;num=20;}flag3=1;ET0=1;TR0=1;}}if(flag==2){flag=0;}return num;}void main(){init();while(1){keyscan();}}void time0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256 ;a++;if(flag1==0){L1=0;display1();}if(a>=60){a=0;flag1=2;flag2=2;flag3=0;flag4=0;TR0=0;ET0=0;}}void time1() interrupt 3{TH1=(65536-50000)/256;TL1=(65536-50000)%256 ;b++;if(flag1==1){L2=0;display2();}if(b>=40){b=0;L2=1;flag1=2;flag2=2;flag3=0;ET1=0;TR1=0;}}。
门禁密码修改方法教程
门禁密码修改方法教程门禁密码修改方法教程门禁密码是保护个人安全和财产安全的重要手段之一。
定期更改门禁密码可以有效增加安全性。
以下是门禁密码修改的方法教程,详细介绍了几种常见的修改密码的方式。
一、使用机械键盘密码1. 找到门禁机旁边的机械键盘控制台。
2. 输入原密码,按下"确认"键,以便进入密码修改界面。
3. 输入新密码,按下"确认"键,再次输入新密码,以确保输入正确。
4. 按下"确认"键,完成密码修改操作。
5. 测试新密码是否生效,确认后即可使用新密码进行进出门禁。
二、使用门禁软件修改密码1. 找到门禁软件图标,双击打开软件。
2. 在软件界面上找到"密码修改"或"设置"选项,点击进入。
3. 输入原密码,进行身份验证。
4. 输入新密码,并再次确认新密码。
5. 点击"保存"或"确认"按钮,完成密码修改操作。
6. 关闭软件,测试新密码是否生效。
三、通过门禁系统管理员修改密码1. 找到门禁系统管理员的联系方式,例如电话或电子邮件。
2. 联系管理员,说明需要修改密码的原因,并提供必要的身份验证信息。
3. 管理员根据安全标准和验证程序,协助你修改密码。
4. 注意在电话或邮件中不要透露个人信息或密码。
5. 测试新密码是否生效,确认后即可使用新密码进行进出门禁。
四、通过门禁生产厂家或服务提供商修改密码1. 找到门禁设备的生产厂家或服务提供商的联系方式,例如电话、邮箱或官方网站。
2. 联系生产厂家或服务提供商,说明需要修改密码的原因,并提供必要的身份验证信息。
3. 根据生产厂家或服务提供商的要求,提供相关信息,并按照指导进行操作。
4. 等待生产厂家或服务提供商的回复,他们将帮助你修改密码。
5. 在收到修改密码的指导后,根据要求进行操作,测试新密码是否生效。
需要注意的是,修改门禁密码时应当保持严格的安全性,避免泄露个人信息和密码。
密码锁编程 matlab程序
密码锁编程 matlab程序密码锁编程 Matlab 程序引言概述:密码锁编程是一种常见的应用程序开发技术,它在现代生活中起到了重要的作用。
本文将介绍如何使用 Matlab 编程语言来开发一个密码锁程序。
通过这个程序,我们可以实现密码的输入、验证和控制等功能,以保护重要信息和财产的安全。
正文内容:1. 密码输入界面1.1 设计用户界面:使用 Matlab 的 GUI 工具箱,创建一个密码输入界面。
1.2 输入密码功能:通过文本框或按钮等控件,允许用户输入密码。
1.3 密码长度限制:设置密码的最小和最大长度,确保密码的安全性。
2. 密码验证功能2.1 密码加密算法:使用 Matlab 提供的加密函数,对用户输入的密码进行加密。
2.2 存储密码:将加密后的密码存储在数据库或文件中,以供后续验证使用。
2.3 密码比对:在用户再次输入密码时,对输入的密码与存储的密码进行比对,判断其是否一致。
3. 锁定与解锁功能3.1 密码错误次数限制:设置密码输入错误的次数限制,达到限制后锁定密码输入。
3.2 锁定时间设置:在密码输入错误次数达到限制后,设置一段时间的锁定时间,以防止暴力破解。
3.3 解锁方式:在锁定时间结束后,允许用户通过输入特定的解锁密码或通过其他验证方式解锁密码。
4. 安全性增强功能4.1 防止密码截获:使用 SSL/TLS 等安全协议,对密码传输过程进行加密,防止密码被截获。
4.2 强制密码更改:定期要求用户更改密码,以增加密码的安全性。
4.3 防止暴力破解:设置密码输入次数限制、锁定时间和复杂度要求,以防止暴力破解密码。
5. 扩展功能5.1 多用户支持:允许多个用户使用密码锁,每个用户拥有独立的密码和权限。
5.2 远程控制:通过网络连接,允许用户远程控制密码锁,进行密码的输入和验证。
5.3 日志记录:记录密码输入、验证和控制的日志,以便后续审计和追踪。
总结:通过本文的介绍,我们了解了如何使用 Matlab 编程语言开发一个密码锁程序。
课程设计(论文)-PLC控制四位密码锁的程序模板
课程设计任务书一、设计任务:PLC控制四位密码锁的程序。
二、设计要求:1.密码锁共有7个按钮,启动,更改,后台复位,4个输入键,2.系统启动后,在规定时间内开锁,累计3次输入错误将不能再输入,需后台复位,按照顺序和按压次数依次按下4个按钮完成输入,然后执行开锁动作,3.按下停止按钮,系统复位,可重新输入。
目录一.PLC的简介-----------------------------------------------------------------------4 1.PLC的发展历程-------------------------------------------------------------------4 2.PLC的构成-------------------------------------------------------------------------53.CPU的构成---------------------------------------------------------------------------64.I/O模块--------------------------------------------------------------------------------75.电源模块-------------------------------------------------------------------------------76.底板或机架----------------------------------------------------------------------------77.PLC系统的其它设备----------------------------------------------------------------7 8.PLC的通信联网--------------------------------------------------------------------8 二.三菱FX系列PLC简介及型号说明---------------------------------------------91.FX系列PLC型号的说明----------------------------------------------------------102.控制说明-------------------------------------------------------------------------------113.密码锁的PLC控制输入/输出接线图--------------------------------------------124.控制程序梯形图----------------------------------------------------------------------135.工作原理-------------------------------------------------------------------------------146.指令码----------------------------------------------------------------------------------15 参考文献---------------------------------------------------------------------------------18一.PLC的简介:一、PLC的发展历程在工业生产过程中,大量的开关量顺序控制,它按照逻辑条件进行顺序动作,并按照逻辑关系进行连锁保护动作的控制,及大量离散量的数据采集。
51单片机密码锁制作的程序和流程图(可编辑修改word版)
void Timer0() interrupt 1 //50ms
{
TH0=0x3C;//(65535-50000)/256 TL0=0xAF;//(65535-50000)%256
timer++;
}
2.0负责实现具体操作的 process_char.c 文件
#include<reg52.h> #include<string.h> #include"mydefine.h"
i=0;
}
break;
}
lcd_display(flag_display);
}
else
{
TR0=1;//开始计时等待
}
DC_Moter(); resume_password();
if(flag_clear)//恢复密码和开锁键_外部中断有效时重新计时
{
flag_clear=0; timer=0;
}
if(timer==100)//10 秒后不允许更改密码
改进:
1.0 密码锁的秘密没有存储,因而在掉电时最新的密码将丢失,重新上电后密码将恢复成为初始密码。这使得每次换电池或停电后密码都得恢复一次,给使用带来不便,但是为了要存储一个最多只有十几字节的密码就增加一个存储器、似乎不是很值,最好是所选的单片机自带这样的存储器(容量很小、如 32B)。当然如果电源来自市电的话,就不会经常掉电了。
flag_compare;//比较输入与密码|相等时返回 1,否则返回 0
static flag_amend;//修改密码时的标识第一次输入前=1,输入后置2
第二次输入前=2,输入后置0
flag_display=0;//确认键操作的返回值根据返回值可以确定显
密码锁编程 matlab程序
一、背景介绍密码锁是一种常见的安全设备,通过输入密码来开启或关闭设备。
密码锁编程是指使用计算机编程语言对密码锁进行控制和设置。
MATLAB是一种功能强大的编程语言和工程软件,可以用来实现密码锁的编程。
二、密码锁编程的基本原理1. 密码输入与验证:用户通过键盘输入密码,程序接收并验证密码的正确性。
2. 开锁与关锁:当密码输入正确时,程序可以通过控制电子锁实现开锁操作;密码错误时,程序可以记录错误次数并进行报警。
3. 程序界面设计:可以通过MATLAB的图形界面设计工具创建用户友好的交互界面,提供输入密码和显示结果的功能。
三、密码锁编程的具体步骤1. 设置密码:首先需要设定一个初始密码,并将其储存在程序中。
2. 用户输入:程序需要接收用户输入的密码。
3. 验证密码:程序对用户输入的密码进行验证,判断是否与设定的初始密码一致。
4. 开锁与关锁:如果密码验证通过,程序可以通过控制电子锁实现开锁操作;如果密码错误,程序可以进行相应的处理。
5. 界面设计:通过MATLAB的图形界面设计工具创建交互界面,包括输入密码框、确认按钮和显示结果的部分。
四、密码锁编程的技术要点1. 数据处理:程序需要对用户输入的密码进行适当的加密和比对,确保密码的安全性。
2. 控制操作:程序需要调用相应的接口函数,实现对电子锁的控制和操作。
3. 用户交互:程序需要设计良好的用户界面,让用户能够方便地进行密码输入和了解操作结果。
五、密码锁编程的应用领域1. 家用密码锁:可以用MATLAB编程实现智能门锁、保险柜等设备的密码管理。
2. 商用密码锁:可以将MATLAB编程应用在银行保险柜、企业办公室等需要高安全性的场合。
3. 教育科研:密码锁编程也可以作为MATLAB编程教学和科研实验的一个具体应用案例。
六、密码锁编程的未来发展随着科技的不断发展和智能化水平的提高,密码锁编程也将在更广泛的领域得到应用。
随着物联网和大数据技术的兴起,密码锁编程还可以与其他领域的技术进行深度融合,实现更加智能、安全的密码管理系统。
模块四答案电气控制与PLC课后习题答案
模块四PLC应用指令的应用任务一8盏流水灯控制程序思考和练习1.什么是位元件?什么是字元件?两者有什么区别?答:只具有接通(ON或1)或断开(OFF或0)两种状态的元件称为位元件。
将多个位元件按一定的规律组合起来就称为字元件,也称位组件。
位元件只能单个取用,而字元件是位元件的组合所以只用一条指令即可同时对多个字元件进行操作。
2.位元件如何组成字元件?请举例说明。
答:位元件组合以KnP的形式表示,每组由4个连续的位元件组成,称为位元件,其中P 为位元件的首地址,n为组数(n=1~8)。
4个单元K4组成16位操作数,如K4M10表示由M25~ M10组成的16位数据。
3.数据寄存器有哪些类型?具有什么特点?试简要说明。
32位数据寄存器如何组成?答:数据寄存器可分为:通用数据寄存器、锁存数据寄存器、文件寄存器、特殊数据寄存器、变址寄存器。
锁存数据寄存器有断电保持功能,文件寄存器只能用外部设备进行写入操作,特殊数据寄存器用来监控PLC内部的各种工作方式和元件,例如电池电压、扫描时间等,变址寄存器(V、Z)除了和普通的数据寄存器有相同的使用方法外,还常用于修改器件的地址编号。
32位数据寄存器由两个16为数据寄存器组成。
4.应用指令的组成要素有几个?其执行方式有几种?其操作数有几类?答:应用指令的组成要素共有五个(1)应用指令编号(2)助记符(3)数据长度(4)执行形式(5)操作数。
应用指令有脉冲执行型和连续执行型两种。
操作数分为源操作数、目标操作数和其它操作数。
5. 试问如下软元件为何种软元件?由几位组成?X1、D20、S20、K4X0、V2、X10、K2Y0、M19答:X1、S20、X10、M19是位元件;D20、K4X0、V2、K2Y0是字元件;D20、V2是16位数据寄存器,K4X0是16位、K2Y0是8位。
6.执行指令语句“MOV K5 K1Y0”后,Y0~Y3的位状态是什么?答:Y0~Y3的状态是“0101”7.执行指令语句“DMOV H5AA55 D0”后,D0、D1中存储的数据各是多少?答:D1存储的数据是(0000 0000 0000 0101),D0存储的数据是(1010 1010 0101 0101)8.试用MOV指令编写电动机Y-△降压起动程序。
密码门锁怎么改密码
密码门锁怎么改密码
一般来说,电子密码门锁的密码修改有三种方式。
一是初始化,从里面按一个键几秒钟,重新输入密码;第二,如果是总控的锁,可以从总机的电脑修改;三是用与锁匹配的机械钥匙设置初始化密码。
现在,我们来详细介绍一下第一种密码修改方法。
1.按下外面板底部的电源键,按下' * '键三次,蜂鸣器会发出很长的声音。
2.输入旧密码,然后按“#”键确认。
蜂鸣器会发出很长的声音,LED灯会闪烁。
3.输入一个6 ~ 12位的新密码,按“#”键确认。
蜂鸣器会发出很长的声音。
4.再次输入相同的新密码,并按“#”键确认。
注意:在设置过程中,如果输入错误,系统将退出设置程序。
如果输入正确,蜂鸣器会发出长音(或音乐)表示成功,LED灯熄灭。
c++语言密码锁程序循环代码
c++语言密码锁程序循环代码一、引言在网络安全领域,密码锁是一种常用的安全工具,它为用户提供了一种保护敏感数据的方法。
在C语言中,我们可以编写一个简单的密码锁程序,通过循环代码实现密码验证和锁定功能。
本文将介绍如何使用C语言编写密码锁程序循环代码。
二、循环代码实现1.初始化密码锁首先,我们需要定义一个密码锁对象,包括密码、锁定时间等属性。
可以使用结构体或类来实现密码锁对象。
```ctypedefstruct{charpassword[20];intlockTime;}PasswordLock;```2.循环密码验证在密码锁程序中,我们需要实现一个循环代码,用于不断地验证用户输入的密码是否正确。
可以使用while循环来实现这个功能。
```cPasswordLocklock;while(1){//获取用户输入的密码charinputPassword[20];printf("请输入密码:");fgets(inputPassword,sizeof(inputPassword),stdin);inputPassword[strcspn(inputPassword,"\n")]='\0';//去除换行符//验证密码是否正确if(strcmp(inputPassword,lock.password)==0){printf("密码正确,欢迎访问!\n");break;//密码正确,退出循环}else{printf("密码错误,请重新输入。
\n");}}```3.循环锁定时间设置为了保护敏感数据不被未经授权的用户访问,我们需要设置一个锁定时间,在用户输入错误密码后自动锁定程序。
可以使用定时器函数来实现这个功能。
```c//设置锁定时间为5分钟inttimeout=5*60;//秒数转换为毫秒数sleep(timeout);//等待锁定时间结束```三、其他注意事项1.在循环密码验证中,应该考虑输入缓冲区溢出的问题,避免使用fgets函数获取密码输入,可以使用scanf函数配合scanf_s函数来保证输入缓冲区足够大。
plc密码锁程序设计总结
plc密码锁程序设计总结
密码锁程序设计是基于PLC(可编程逻辑控制器)的一种应用,用于控制和管理一个密码锁系统。
设计密码锁程序时,需要考虑以
下几个方面:
1. 输入设备,密码锁系统通常包括数字键盘或触摸屏等输入设备,用于输入密码。
在PLC程序设计中,需要考虑如何读取和处理
这些输入信号。
2. 密码验证,设计程序时需要考虑如何验证输入的密码。
这可
能涉及到密码的存储和比对,以及对输入密码的逻辑判断。
3. 控制输出,一旦密码验证通过,程序需要控制输出设备(如
电磁锁、指示灯等)以执行相应的操作。
在PLC程序设计中,需要
考虑如何控制这些输出设备。
4. 安全性考虑,密码锁系统设计需要考虑安全性,包括防止密
码被破解和防止非法操作。
在PLC程序设计中,需要加入相应的安
全性措施。
5. 用户界面,密码锁系统通常需要一个用户界面,用于显示提
示信息和操作指导。
在PLC程序设计中,需要考虑如何设计和控制
这个用户界面。
总的来说,密码锁程序设计需要综合考虑输入设备、密码验证、控制输出、安全性和用户界面等方面,以实现一个安全可靠的密码
锁系统。
门禁密码修改方法教程
门禁密码修改方法教程门禁系统是现代社会中常见的一种安全管理设备,它可以有效控制人员出入的权限,保障办公场所和住宅区的安全。
而门禁密码作为门禁系统中最常用的一种验证方式,其安全性和保密性就显得尤为重要。
在日常使用中,我们可能会因为各种原因需要修改门禁密码,下面就为大家介绍一下门禁密码修改的方法。
首先,我们需要确认自己对应的门禁系统类型,因为不同的门禁系统可能有不同的密码修改方式。
一般来说,门禁系统的密码修改方法可以分为两种,一种是通过门禁系统管理软件进行修改,另一种是通过门禁系统设备本身进行修改。
接下来,我们将分别介绍这两种方法的具体步骤。
如果你的门禁系统支持通过管理软件进行密码修改,那么首先你需要打开门禁系统的管理软件,并登录管理员账号。
在登录成功后,你可以找到“密码管理”或“用户管理”等相关选项,然后选择需要修改密码的用户账号,进行密码修改操作。
在进行密码修改时,建议选择一个复杂度较高的密码,包括数字、字母和特殊符号,以提高密码的安全性。
如果你的门禁系统不支持通过管理软件进行密码修改,那么你可以通过门禁系统设备本身进行密码修改。
一般来说,门禁系统设备会配备一个键盘或者触摸屏,你可以通过这些设备进行密码修改操作。
具体的步骤可能会因设备型号而有所不同,但一般来说,你可以在设备界面上找到“密码管理”或“用户管理”等相关选项,然后按照提示进行密码修改操作。
无论是通过管理软件还是通过设备本身进行密码修改,我们都需要注意以下几点,首先,要确保密码修改操作是在安全的环境下进行的,避免他人窥视或偷窥密码;其次,要牢记新密码,避免因忘记密码而导致不必要的麻烦;最后,要及时测试新密码是否生效,确保密码修改操作成功。
总的来说,门禁密码的安全性对于门禁系统的安全管理至关重要。
通过本文介绍的方法,相信大家已经对门禁密码的修改有了更清晰的认识,希望大家在日常使用中能够严格遵守门禁密码管理规定,确保门禁系统的安全运行。
如果大家在实际操作中遇到问题,可以及时咨询门禁系统的相关技术人员,以获得更详细的帮助和指导。
密码锁程序
/**************************************说明**********************************************************//*密码锁上电后按下k1生效,LED0和LED1亮掉电后密码不会重置为初始密码。
初始密码为111111,密码最长允许6位,键位设置:k1-k4为特殊功能键;s6-s21分别表示0-16;输入密码;单击k2则开始输入密码(LED0亮),6位密码输入完毕后自动对比密码若密码连续三次输入错误,则则蜂鸣器响(持续三秒)在输入密码时,可按k3清除已经输入的密码,更改密码时不可用重置密码:在密码锁打开的前提下,单击k4后开始输入新密码,再次单击s3确认新密码;*//****************************************************************************** ***********************/#include<reg52.h>#include<string.h>#define Uint unsigned int#define Uchar unsigned charUchar code a[6]={1,1,1,1,1,1},b[6];Uchar code num_0[]=" Program Start! ";Uchar code num_1[]="Password Input! ";Uchar code num_2[]=" It's Open! ";Uchar code num_3[]="Password correct";Uchar code num_4[]="***&Warning&*** ";Uchar code num_5[]="Password mistake";Uchar code num_6[]="-----";Uchar code num_7[]="*";Uchar code num_8[]=" Change! ";Uchar code num_9[]=" The Password ";Uchar code num_10[]="Mistake 3 Times!";sbit beep=P2^0;sbit led0=P2^1;sbit led1=P2^2; //位定义需要的接口sbit k1=P3^0;sbit k2=P3^1;sbit k3=P3^2;sbit k4=P3^3;sbit lcden=P2^7;sbit lcdrw=P2^6;sbit lcdrs=P2^5;Uchar temp,num,tt,x,z,m,bianming,cishu,detection_duli,detection_matrix,i_password,c_password;void init(); //声明初始化函数void delay(Uint); //声明延时函数Uchar keyduli(); //声明独立按键判断函数Uchar matrix();void write_com(Uchar);void write_data(Uchar); //声明矩阵按键判断函数void main(){Uchar *p1,*p2;p1=&a;p2=&b;init();while(1){detection_duli=keyduli(); //调用独立按键判断函数if(detection_duli==1) //判断k1是否按下,按下则密码锁上锁{/*液晶显示程序num_0*/for(num=0;num<16;num++)write_data(num_0[num]);/*显示程序截止*/led0=0;led1=0;while(1){detection_duli=keyduli();if(detection_duli==2) //判断k2是否按下,按下则开始输入密码{led0=1;led1=1;/*液晶显示程序*/write_com(0x01);write_com(0x80);for(num=0;num<16;num++)write_data(num_1[num]);write_com(0x80+0x40);for(num=0;num<5;num++)write_data(num_6[num]);write_com(0x80+0x4b);for(num=0;num<5;num++)write_data(num_6[num]);/*显示程序截止*/while(i_password) //密码验证后则跳出循环{detection_matrix=matrix(); //调用矩阵按键判断函数if(detection_matrix!=0) //判断矩阵键盘是否有输入{*(p2+x)=detection_matrix; //将输入数据存入数组bwrite_com(0x80+0x45+x);write_data(num_7[0]);x++;detection_duli=keyduli();if(detection_duli==3) //如果k3按下则清除所输入数据x=0;if(x==6){x=0;if(strcmp(a,b)==0) //判断密码是否一致{led0=0;bianming=1;/*液晶显示程序*/write_com(0x01);write_com(0x80);for(num=0;num<16;num++)write_data(num_2[num]);write_com(0x80+0x40);for(num=0;num<16;num++)write_data(num_3[num]);}else //密码不一致则:{bianming=0;/*液晶显示程序*/write_com(0x01);write_com(0x80);for(num=0;num<16;num++)write_data(num_4[num]);write_com(0x80+0x40);for(num=0;num<16;num++)write_data(num_5[num]);/*显示程序截止*/cishu++;if(cishu==3) //三次输入错误则蜂鸣器响三秒{cishu=0;write_com(0x80+0x40);for(num=0;num<16;num++)write_data(num_10[num]);/*显示程序截止*/beep=0;TR0=1;if(tt==60)beep=1;}}i_password=0;if(bianming==1) //判断密码锁是否打开{detection_duli=keyduli(); //按下k4则更改密码if(detection_duli==4);{led1=0;/*液晶显示程序*/write_com(0x01);write_com(0x80);for(num=0;num<16;num++)write_data(num_8[num]);write_com(0x80+0x40);for(num=0;num<16;num++)write_data(num_9[num]);/*显示程序截止*/while(c_password) //若密码达到6位则跳出循环{/*液晶显示程序*/write_com(0x01);write_com(0x80);for(num=0;num<5;num++)write_data(num_6[num]);write_com(0x80+0x4b);for(num=0;num<5;num++)write_data(num_6[num]);/*显示程序截止*/detection_matrix=matrix();if(detection_matrix!=0){*(p1+x)=detection_matrix; //将输入数据存入数组ax++;write_com(0x80+0x45+x);write_data(num_7[0]);if(x==6){c_password=0;x=0;}}}}}}}}}}}}}void init() //初始化函数{x=0;z=0;i_password=1;c_password=1;num=0;cishu=0;lcdrw=0; //初始化1602液晶lcden=0;bianming=0;write_com(0x38);write_com(0x0f);write_com(0x06);write_com(0x01);write_com(0x80);TMOD=0x01; //设置TMOD工作模式为定时器0工作TH0=(65536-50000)/256; //初始化定时器0TL0=(65536-50000)%256;EA=1; //开总中断ET0=0; //开定时器0中断}void delay(Uint c) //误差0us{Uchar a, b; //0.01sfor (c;c>0;c--){for (b=38;b>0;b--){for (a=130;a>0;a--);}}}Uchar keyduli() //独立按键判断{P3=0xff;if(k1==0|k2==0|k3==0|k4==0){if(k1==0){delay(1);if(k1==0){while(!k1);delay(1);while(!k1);return(1); //若按键S2被按下,则函数返回值为1}}if(k2==0){delay(1); //delay()函数防按键抖动if(k2==0){while(!k2);delay(1);while(!k2);return(2); //若按键S3被按下,则函数返回值为2 }}if(k3==0){delay(1);if(k3==0){while(!k3);delay(1);while(!k3);return(3); //若按键S2被按下,则函数返回值为3 }}if(k4==0){delay(1);if(k4==0){while(!k4);delay(1);while(!k4);return(4); //若按键S2被按下,则函数返回值为4 }}}return (0);}Uchar matrix(){Uchar KeyValue;char a = 0;P1=0xf0;if(P1!=0xf0)//读取按键是否按下{delay(1);//延时10ms进行消抖if(P1!=0xf0)//再次检测键盘是否按下{//测试列P1=0xf0;switch(P1){case(0X70): KeyValue=0;break;case(0Xb0): KeyValue=4;break;case(0Xd0): KeyValue=8;break;case(0Xe0): KeyValue=12;break;}//测试行P1=0x0f;switch(P1){case(0X07): KeyValue=KeyValue+4;break;case(0X0b): KeyValue=KeyValue+3;break;case(0X0d): KeyValue=KeyValue+2;break;case(0X0e): KeyValue=KeyValue+1;break;}while((a<50) && (P1!=0xf0)) //检测按键松手检测{delay(1);a++;}if(KeyValue<10)return (KeyValue);else return (0);}else return (0);}else return (0);}void write_com(Uchar com) //液晶写指令函数{lcdrs=0;P0=com;delay(1);lcden=1;delay(1);lcden=0;}void write_data(Uchar shuju) //液晶写数据函数{lcdrs=1;P0=shuju;delay(1);lcden=1;delay(1);lcden=0;}void zhongduan0 () interrupt 0 //中断函数{TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt++;}。
PLC应用指令的运用—密码锁控制程序设计
16位运算的输入 32位运算的输入
密码锁控制程序
(一)触点比较指令
FNC编号
224
取
225
比
226
较
指
228
令
229
230
232
串
233
联
比
234
较
236
指
令
237
238
240
并
241
联
比
242
比较条件 [S1]=[S2] [S1]>[S2] [S1]<[S2] [S1]≠[S2] [S1]≤[S2] [S1]≥[S2]
逻辑功能 [S1]与[S2]相等 [S1]大于[S2] [S1]小于[S2] [S1]与[S2]不相等 [S1]小于等于[S2] [S1]大于等于[S2]
并联触点比较指令应用
触点比较指令举例
(二)简易定时报时器程序
1.控制要求
应用计数器与触点比较指令,构成24小 时可设定定时时间的控制器,15min为一设定 单位,共96个时间单位。
控制器的控制要求:早上6:30,电铃 (Y0)每秒响1次,6次后自动停止;9:00~ 17:00,起动住宅报警系统(Y1);晚上18: 00开园内照明(Y2);晚上22:00关园内照明 (Y2)。
[D]:Y、M、S
❖ 梯形图
X000
[S1] [S2] [S] [D]
[ ZCP K100 K120 C30 M3]
M3
C30的当前值< K100时,M3 = ON
(Y000)
M4
K100≤ C30的当前值≤K120时,M4 = ON
毕业设计-基于AT89C51单片机的电子密码锁的设计
毕业设计(论文)题目:电子密码锁的设计学院:电气与信息工程学院专业:电子信息工程姓名:学号: ********* 指导老师:**完成时间: 2013年5月28日摘要随着经济社会发展,人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出。
传统的机械锁,由于其构造简单,安全性能低,无法满足人们的需要。
随着电子产品向智能化和微型化的不断发展,数字密码锁作为防盗卫士的作用显得尤为重要。
而单片机以其实用,功能强大,价格低廉等功能,已成为电子产品研制和开发中首选的控制器。
本文从经济实用的角度出发,阐述一个基于单片机的液晶显示电子密码锁的设计与实现。
系统采用ATMEL公司的AT89C51单片机作为系统核心,液晶显示器LCD1602作为输出设备显示系统提示信息,4*4矩阵键盘作为输入设备,CMOS串行E2PROM存储器AT24C02作为数据存储器,配合蜂鸣器、继电器等电路构成整个系统硬件;系统软件采用C语言编写。
设计的系统液晶显示,密码修改方便,具有报警、锁定等功能,使用便捷简单,符合住宅、办公用锁需求,具有一定的实用价值。
关键词:单片机,密码锁,AT89C51,LCD1602,AT24C02AbstractWith the development of our society and the i mprovement of people’s living standard, how to ensure the family security is becoming more and more important in particular. Traditional mechanical lock is unable to meet the need of us because of its simple structure and low security. Nowadays, electronic products become smarter and smaller, electronic password anti-theft lock plays a more important role as the security guards. The MCU with its practical, strong function, low price and other functions , has become the preferred controller in electronic product research and development.This article is written from the economic perspective, elaborates the design and implementation of a LCD electronic password anti-theft lock which is based on MCU. This system is composed of AT89C51 which is designed as the core of this system, LCD1602 as the output device to display the message of this system, 4 * 4 matrix keyboard as the input device, a CMOS serial E2PROM AT24C02 as the data storage, and a buzzer, relay circuit.The software of the system is written in C language. The system displays in a LCD, it can change password easily, and has the function of alarming, locking, and so on. This system has some practical value, and it is simple and easy to use, meets the demand of residential and the need of office lock.Key Words: MCU, Password-Lock, AT89C51, LCD1602, AT24C02目录摘要 (I)Abstract ............................................................................................................................. I I 目录 ................................................................................................................................. I II 1引言 . (1)1.1课题的背景和意义 (1)1.2课题的研究现状 (1)1.3课题研究内容 (2)2 数字密码锁总体设计 (3)2.1 系统方案论证 (3)2.1.1 采用数字电路的设计方案 (3)2.1.2 采用以单片机为核心设计方案 (4)2.2 基于单片机的数字密码锁的设计原理 (5)3 系统硬件设计 (6)3.1 主要元器件介绍 (6)3.1.1 主控芯片AT89C51的的介绍 (6)3.1.2 继电器的介绍 (9)3.1.3 存储芯片AT24C02的介绍 (10)3.1.4 LCD1602显示器的介绍 (10)3.1.5 矩阵键盘模块的介绍 (11)3.2 系统硬件部分 (12)3.2.1 系统电源部分 (12)3.2.2 键盘输入部分 (13)3.2.3 密码存储部分 (14)3.2.4 显示部分 (14)3.2.5 报警部分 (15)3.2.6开锁部分 (16)4 系统软件设计 (17)4.1 系统程序流程图 (17)4.1.1主程序流程图 (17)4.1.2 键功能程序流程图 (18)4.1.3 修改密码程序流程图 (19)4.1.4 开锁程序流程图 (20)4.2 子程序举例 (21)4.2.1 按键扫描子程序 (21)4.2.2 显示子程序 (22)4.2.3 开锁子程序 (22)4.3 系统软件调试及结果 (24)4.3.1 Proteus软件介绍 (24)4.3.2 系统软件调试 (25)4.3.3 仿真结果 (25)5 硬件系统制作及调试 (29)5.1焊接注意事项 (29)5.2硬件调试问题及解决办法 (30)5.3硬件调试效果 (31)总结 (34)致谢 (35)参考文献 (36)附录 (37)附录A 电路原理图 (37)附录B 系统总体程序 (38)1引言1.1课题的背景和意义随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤为突出,传统的机械锁由于其构造简单,被撬的事件屡见不鲜。
数字密码锁
第1章概述在当今社会中,人们对于隐私的保护和对物品安全的重视程度与日俱增。
因此,使用了现代电子技术的电子密码锁便有了广泛的应用前景。
本次所设计的电子密码锁,能够实现该两位十进制并行密码保护,当输入的密码与锁内密码一致时,绿灯亮,开锁;当输入的密码与锁内的密码不一致时,红灯亮,不能开锁。
密码锁的密码可由用户自行设置,并可在共阴极七段数码管上显示所输入的密码。
为人们的财产、信息安全提供了可靠地保障。
VHDL语言:VHDL(Very-High-Speed Integrated Circuit Hardware Descri ption Language)即超高速积体电路硬件描述语言,在基于CPLD/FPGA和A SIC的数位系统设计中有着广泛的应用。
VHDL语言诞生于1983年,1987年被美国国防部和IEEE确定为标准的硬件描述语言。
自从IEEE发布了VHDL 的第一个标准版本IEEE 1076-1987后,各大EDA公司都先后推出了自己的支持VHDL的EDA工具。
VHDL在电子设计行业得到了广泛的认同。
此后IEEE 又先后发布了IEEE 1076-1993和IEEE 1076-2000版本。
它的主要特点有:功能强大、设计灵活,支持广泛、易于修改,强大的系统硬件描述能力和很强的移植能力。
本次设计基于VHDL语言,对并行两位电子密码锁进行设计,并对设计过程进行了详细描述。
采用VHDL语言进行电子密码锁的设计可使设计工作简洁直观,快速实现既定功能。
电子密码锁在对财产安全保护等方面都有着重要作用,应用前景非常广泛。
开锁代码为二位十进制数,当输入代码的位数和位值与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮开锁指示灯LT。
否则,系统进入“错误”状态,并发出报警信号。
开锁程序由设计者确定,并要求锁内给定的密码是可调的,且预置方便,保密性好。
并行数字锁的报警方式是点亮指示灯LF,并使喇叭鸣叫来报警,直到按下复位开关,报警才停止。
plc密码锁的课程设计
plc密码锁的课程设计一、课程目标知识目标:1. 学生能理解PLC(可编程逻辑控制器)的基本原理和功能,掌握密码锁系统的设计要求。
2. 学生能够运用PLC编程软件进行基本的程序编写,实现密码锁的启停、密码验证等功能。
3. 学生能够掌握密码锁系统中涉及的传感器、执行器等硬件设备的连接和使用。
技能目标:1. 学生能够独立设计并搭建一个简单的PLC密码锁控制系统。
2. 学生能够运用逻辑思维和问题解决能力,对PLC密码锁程序进行调试和优化。
3. 学生能够通过小组合作,进行有效的沟通与协作,共同完成PLC密码锁的安装和调试。
情感态度价值观目标:1. 学生能够提高对工程技术和自动化的兴趣,培养创新意识和探索精神。
2. 学生能够认识到科技在生活中的应用,增强学以致用的意识。
3. 学生能够在课程中培养良好的团队合作精神,提高沟通与协作能力,尊重他人的意见和贡献。
课程性质:本课程为实践性较强的课程,结合理论知识与动手实践,培养学生的实际操作能力。
学生特点:学生具备一定的电子技术基础知识,对PLC和密码锁有一定了解,但对实际操作和程序编写尚不熟练。
教学要求:教师需关注学生的动手实践能力,注重理论与实践相结合,引导学生通过小组合作,培养团队精神和沟通能力。
在教学过程中,关注学生的学习进度,及时调整教学策略,确保学生能够达到预定的课程目标。
二、教学内容1. 理论知识:- PLC的基本原理与结构- 密码锁的工作原理及设计要求- PLC编程软件的使用方法- 传感器、执行器等硬件设备的连接与调试2. 实践操作:- PLC密码锁系统的搭建- PLC程序编写与调试- 密码锁功能的实现(启停、密码验证等)- 系统优化与故障排查3. 教学大纲:- 第一周:PLC基本原理与结构学习,认识传感器、执行器等硬件设备- 第二周:密码锁工作原理及设计要求,学习PLC编程软件的使用方法- 第三周:分组进行PLC密码锁的搭建,初步编写程序,实现基本功能- 第四周:调试与优化PLC密码锁系统,进行故障排查4. 教材章节:- 《PLC原理与应用》第四章:PLC的基本指令与编程方法- 《自动化设备与应用》第三章:传感器与执行器的应用- 《电子技术实践》第五节:PLC控制系统设计实例教学内容安排和进度根据学生的实际操作能力和学习进度进行调整,确保学生在掌握理论知识的基础上,充分锻炼实践操作能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
由此键盘改为列1 列2 列3 列4行1 1 2 3 A行2 4 5 6 B行3 7 8 9 C行4 * 0 # D对应上面的键盘及键盘的键值编码方法,各按键及其编码的对应关系如下表所示:按键行号列号键值编码1 1 1 11H(00010001)2 1 2 21H(00100001)3 1 3 41H(01000001)A 1 4 81H(10000001)4 2 1 12H(00010010 )5 2 2 22H(00100010)6 2 3 42H(01000010)B 2 4 82H(10000010)7 3 1 14H(00010100)8 3 2 24H(00100100)9 3 3 44H(01000100)C 3 4 84H(10000100)* 4 1 18H(00011000)0 4 2 28H(00101000)# 4 3 48H(01001000)D 4 4 88H(10001000)四位共阴数码管SM420564管脚图C4 a f C3 C2 b12 11 10 9 8 7SM4205641 2 3 4 5 6e d Dp c g C1六.程序详解#ifndef _PWLOCK_H // 防止PWLock.h被重复引用#define _PWLOCK_H#include <reg52.h>#include <absacc.h>#include <stdio.h>#include <math.h>#define uchar unsigned char#define uint unsigned intuchar digbit; // 字位uchar wordbuf[4]; // 字型码缓冲区uchar t1count; // 定时器1由50ms累积到1s所用的计数器uchar count; // 密码位计数uchar pw[4]; // 初始密码存储区uchar pwbuf[4]; // 输入密码存储区bit enterflag; // 确认键按下与否标志bit pwflag; // 密码正确与否标志bit showflag; // 数码管显示与否标志sbit green=P2^6;sbit red=P2^7;void display(void); // 显示函数#endif#include "PWLock.h"/* 键消抖延时函数*/void delay(void){uint i;for (i=10000;i>0;i--);}/* 键扫描函数*/uchar keyscan(void){uchar scancode,tmpcode;P1 = 0xf0; // 发全0行扫描码if ((P1&0xf0)!=0xf0) // 若有键按下{delay(); // 延时去抖动if ((P1&0xf0)!=0xf0) // 延时后再判断一次,去除抖动影响{scancode = 0xfe;while((scancode&0x10)!=0) // 逐行扫描{P1 = scancode; // 输出行扫描码if ((P1&0xf0)!=0xf0) // 本行有键按下{tmpcode = (P1&0xf0)|0x0f;/* 返回特征字节码,为1的位即对应于行和列*/return((~scancode)+(~tmpcode));}else scancode = (scancode<<1)|0x01; // 行扫描码左移一位}}}return(0); // 无键按下,返回值为0}/* 定时器0中断服务子程序,2ms定时动态扫描显示*/void time0_int(void) interrupt 1{/* 重置2ms定时*/TH0 =-2000/256;TL0 = -2000%256;if (showflag==1)display(); // 调用显示函数}/* 定时器1中断服务子程序,50ms*/void time1_int(void) interrupt 3{uchar k;/* 重置50ms定时*/TH1 = -50000/256;TL1 = -50000%256;if (t1count<20){t1count++;}else // 计时到1s{TR1 = 0; // 关闭计数器1t1count = 0;green = 1; // 绿灯不亮red = 1; // 红灯不亮showflag = 1; // 打开数码管显示digbit = 0x01; // 从数码管第1位开始动态显示for (k=0;k<4;k++) // 显示8888wordbuf[k] = 8;}}/* 根据共阴极字型编码表获取0~9,A~B字型代码*/uchar getcode(uchar i){uchar p;switch (i){case 0: p=0x3f; break; /* 0 */case 1: p=0x06; break; /* 1 */case 2: p=0x5B; break; /* 2 */case 3: p=0x4F; break; /* 3 */case 4: p=0x66; break; /* 4 */case 5: p=0x6D; break; /* 5 */case 6: p=0x7D; break; /* 6 */case 7: p=0x07; break; /* 7 */case 8: p=0x7F; break; /* 8 */case 9: p=0x67; break; /* 9 */case 10: p=0x77; break; /* A */case 11: p=0x7C; break; /* B */case 12: p=0x39; break; /* C */case 13: p=0x5E; break; /* D */case 14: p=0x79; break; /* E */case 15: p=0x71; break; /* F */default: break;}return(p);}/* 显示函数*/void display(void){uchar i;switch (digbit){case 1: i=0; break;case 2: i=1; break;case 4: i=2; break;case 8: i=3; break;default: break;}P2 = 0xC0; // 关闭显示P0 = getcode(wordbuf[i]); // 送字型码P2 = digbit|0xC0; // 送字位码if (digbit<0x08) // 共4位digbit = digbit*2; // 左移一位elsedigbit = 0x01;}/* 密码比较函数*/bit pwcmp(void){bit flag;uchar i;for (i=0;i<4;i++){if (pw[i]==pwbuf[i])flag = 1;else{flag = 0;i = 4;}}return(flag);}/* 主程序*/void main(){uchar j,key;P2 = 0xC0; // 关闭数码管显示TMOD = 0x11; // T0,T1工作方式1/* 2ms 定时设置*/TH0 = -2000/256;TL0 =-2000%256;/* 50ms 定时设置*/TH1 = -50000/256;TL1 = -50000%256;/* 启动计数器0,关闭计数器1 */TR0 = 1;ET0 = 1;TR1 = 0;ET1 = 1;EA = 1;count = 0; // 初始没有输入密码,计数器设为0 enterflag = 0; // 没有按下确认键pwflag = 0; // 密码标志先置为0green = 1; // 绿灯不亮red = 1; // 红灯不亮/* 假设内定密码为9376 */pw[0] = 9;pw[1] = 3;pw[2] = 7;pw[3] = 6;digbit = 0x01; // 从第一位数码管开始动态扫描/* 刚加电时,显示8888 */for (j=0;j<4;j++)wordbuf[j] = 8;showflag = 1; // 打开数码管显示while(1){key = keyscan(); // 调用键盘扫描函数switch(key){case 0x28: // 4行2列,数字0 if (count<4){wordbuf[count] = 0x0f; // 对应密码位上显示“F”pwbuf[count] = 0;count++;}break;case 0x11: // 1行1列,数字1 if (count<4){wordbuf[count] = 0x0f; // 对应密码位上显示“F"pwbuf[count] = 1;count++;}break;case 0x21: // 1行2列,数字2 if (count<4){wordbuf[count] = 0x0f; // 对应密码位上显示“F"pwbuf[count] = 2;count++;}break;case 0x41: // 1行3列,数字3 if (count<4){wordbuf[count] = 0x0f; // 对应密码位上显示“F"pwbuf[count] = 3;}break;case 0x12: // 2行1列,数字4 if (count<4){wordbuf[count] = 0x0f; // 对应密码位上显示“F"pwbuf[count] = 4;count++;}break;case 0x22: // 2行2列,数字5 if (count<4){wordbuf[count] = 0x0f; // 对应密码位上显示“F"pwbuf[count] = 5;count++;}break;case 0x42: // 2行3列,数字6 if (count<4){wordbuf[count] = 0x0f; // 对应密码位上显示“F"pwbuf[count] = 6;count++;}break;case 0x14: // 3行1列,数字7 if (count<4){wordbuf[count] = 0x0f; // 对应密码位上显示“F"pwbuf[count] = 7;count++;}break;case 0x24: // 3行2列,数字8 if (count<4){wordbuf[count] = 0x0f; // 对应密码位上显示“F"pwbuf[count] = 8;count++;}break;case 0x44: // 3行3列,数字9{wordbuf[count] = 0x0f; // 对应密码位上显示“F"pwbuf[count] = 9;count++;}break;case 0x48: // 4行3列,#键enterflag = 1; // 确认键按下if (count==4) // 只有输入4个密码后按确认键才作密码比较{delay( );pwflag = pwcmp();}elsepwflag = 0; // 否则直接pmflag赋0break;case 0x18: // 4行1列,取消键(*)count = 0; // 密码计数清零for (j=0;j<4;j++){wordbuf[j] = 8; // 数码管显示8888pwbuf[j] = 0x0f; // 用FFFF清除已经输入的密码}break;default:break;}if (enterflag==1) // 如果按下确认键{enterflag = 0; // 标志位置回0count = 0; // 密码位计数器清零for (j=0;j<4;j++)pwbuf[j] = 0x0f; // 用FFFF清除已经输入的密码delay( );showflag = 0; // 关闭数码管显示P2=0xC0;TR1 = 1; // 计数器1开始计数t1count = 0; // 定时器1由50ms累积到1s所用的计数器if (pwflag==1)green = 0; // 绿灯亮elsered = 0; // 红灯亮}}}。