51单片机密码锁制作的程序和流程图_第1页
51单片机密码锁制作的程序和流程图_第2页
51单片机密码锁制作的程序和流程图_第3页
51单片机密码锁制作的程序和流程图_第4页
51单片机密码锁制作的程序和流程图_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、51单片机密码锁制作的程序和流程图(很详细)、基本组成:单片机小系统+4*4矩阵键盘+ 1 6 0 2显示+ D C电机 基本电路:Word资料键盘和和显示键盘接P1 口,液晶的电源的开、关通过 P2.7 口控制五善>.- D9U2 QPFoCOJPLERNhzD &EXT. 电机(控制口 P2.4)二、基本功能描述:1 .验证密码、修改密码a)锁的初始密码是123456(密码最长为10位,最短为1位)。2 .恢复初始密码a)系统可以恢复初始密码, 否则一旦忘记密码而又不能恢复初始密码,该锁就永远打不开。但是又不能让用户自行修改密码, 否则其他人也可以恢复该初始密码, 使得锁的安

2、全性 大大下降。3 .使系统进入低功耗状态a)在实际使用中,锁只有在开门时才被使用。因而在大多数的时间里,应该让锁进入休 眠状态、以降低功耗,这使系统进入掉电状态,可以大大降低系统功耗。b)同时将LCD背光灯关闭4 . DC电机模拟开锁动作。a)DC电机启动时解除开锁把手的锁定,允许通过把手开锁。DC电机不直接开锁, 使得DC电机的功率不用太大,系统的组成和维护将变得简单,功耗也降了下来。三、密码锁特点说明:1.0输入将被以字符形式输入,最长为10位。超过10位时系统将自动截取前 10位、但不作密码长度溢出提示。2.0开锁10秒后不允许更改密码、并提示修改超时进入初始态,需要重新输入密码方可

3、再次修改密码。3.0系统未使用存储器存储密码故掉电后密码自动恢复为初始密码。4.0若2分钟内无任何操作,系统自动进入省电模式运行 ,同时关闭液晶显示,以节省电 力。5.0输入密码正确后、电机允许开锁时间为5秒,5秒后需要再次输入密码才可以再次开锁。6.0修改密码键和恢复初始密码键最好置于室内。这是Proteus仿真结果:LCD7LM016LPass!LL1 口 L0N*巴苫日mnJ岸 likd knT ,= ml CM L o CTij ml J 叫密码正确时电机启动、电机将持续 5秒:开锁辛 D10:-1M007.*TEXTm«"1 M. «'a 专TE

4、XT这是键盘:开锁键是接INTO引脚接的一个独立按键,用于唤醒CPU工作、进而开启整个系统 LCO1- lwo电)一 一,一 |二 : |Abandon chanSc«! 58SS2SS8 鳞嬖 " . U J L o| E 00 t S 4 , 44 -.改进:1.0密码锁的秘密没有存储,因而在掉电时最新的密码将丢失,重新上电后密码将恢复成为初始密码。这使得每次换电池或停电后密码都得恢复一次,给使用带来不便,但是为了要存储一个最多只有十几字节的密码就增加一个存储器、似乎不是很值,最好是所选的单片机自带这样的存储器(容量很小、如32B)。当然如 果电源来自市电的话,就不会经

5、常掉电了。2.0系统的最好再增加电源监测的设计,在电池电力不够时发出提示。 这时还可以增加备用电池,这样就可以保证系统不会掉电。但是这些都要依赖于成本。3.0液晶的显示最好采用中文。通过对1602的CGRAM的操作可以实现中文显示使得用户界面更好。主函数:W拓化i讷色桁(赳匕 thk alhw-fl.小在fl作曲甫前 ZLlWNh4色就厅<UWKfFft 鹏_0则值,/收示箱八解好小呼汨常叫1 b-fi. f JTLBftMfwkI IJC-inhlc 即,邛0丽舒莪同mCStM】朱卿I、林 * *WHTmcn;rAJTf普印sbh M-F)也 4QASWdI i I'k n&#

6、39;i 1 / Aiefnjp-ke>tx>arrd irmtri< kl唁慎KUi肝加符口UL 1¥fjr 1 PAi?乜加:也搞!lla!iLi r«fcip. . J 力丛 i ll'U 工绅- ill ,nm:n| p1K0 l.华;” .7:IKI) II. -X :l: :l -)liincrl/'itHNK琳曾人行,通ItjZU(x6«n. lCirr rraier:; D llfcOE! !1时;学心id,3於 kL.'f:.Wvk Jqx U(- Ibewr"也m«w能器电翱;4k

7、展自打“双,n: & M L节演:网kitii>b_m 5 AHa电乱纪例情 kd d,l制。"退HE心悔队M:甜卜杯用短产值;也如工,山、,开他一】l g “OyM;记汴模日丧门利然 士仔临队“,7助面看cpuHihlO;确认固执"豫通舟M年务bk_i 呷B中川口*里匕* & NiH袅/胸M点螂不科康也III体岷o-iy12|吟犷U III."t 耨索累 遍区“二仃.Mkkr z /小 mriic I2Q _上_(铝i索JX_/确认函数_ con巾rm()操作: 0_等'0'置于输入table_input结尾(table_i

8、nput口的长度返回值在length里面)根据操作标识选择任务:1_确认密码:判定输入密码正确与否2修改密码:确认第一次输入并保存要求第二次输入比较两次输入是否相同根据比较结果选择任务:修改失败,进入输入密码态修改成功,将输入复制到table_password口确认函数_con巾rm()相关标识位目录:flag_display;/根据其值可以确定显示信息flag_confirm;/确认键根据此标识判定任务,默认为0_即为确定密码状态flag_allow;/允许修改密码标识,在密码比较正确时置1flag_amend;/第一/二次输入新密码标识flag_M;/允许电机开锁标识相关变量sbit M=

9、P3A6;/ 电机控制口flag_confirm;/操作任务标识位flag_compare;比较输入与密码|相等时返回1,否则返回0static flag_amend;/修改密码时的标识第一次输入前=1,输入后置2第二次输入前=2,输入后置0flag_display=0;/确认键操作的返回值根据返回值可以确定显示信息flag_allow;/允许改密码标识,在密码比较正确时置1,不正确时置0process_char()函数:_M;DC 电机控制口process_char()函数二ength;跟踪记录输入table_input11的字符长度(<=10)lcd_display()函数中标识位f

10、lag_display的值与意义:=0:不显示|不刷新显示=1:密码错误=2:密码正确=3:请输入新密码=4:请再次输入新密码=5:密码修改成功=6:密码修改失败=7:显示输入密码状态_The password!=8:放弃修改密码=9:已开锁流图不怎么清晰、不过下一篇就是程序了,可以从程序推出流图。程序比较多,所以写成了几个文件,同时应用了相当多的标识位来进行信号传递。我觉得边看程序边画它的流程图会更好地帮助我们读程序1.0 main.c 文件#include<reg52.h>#include<string.h>#include"mydefine_2.h”st

11、atic void delay(unsigned int N)/N ms 延时 _12MHz/准确性高unsigned int i=0,j=0;for(i=1;i<=N;i+)for(j=1;j<=355;j+);void clock()key_clock=0;delay(15);key_clock=1;void init()key_LCD=0;init_1602();TMOD=0x01;TH0=0x3C;/=(65535-5000)/256TL0=0xAF;/(65535-5000)%256EA=1;ET0=1;TR0=0;EA=1;外部中断0唤醒CPU(空闲方式)EX0=1;I

12、T0=1;command(0x80);lcd_display(7);void main()init();while(1)temp=keyboard_matrix();/ 扫描输入if(temp)/有按键输入信息clock();/按键声TR0=0;关闭计时timer=0;receive(temp);/ 输入的字符串长度为 length( <= 10)if(i!=length) 输入时显示"*"command(0xC0+length);/为显示密码输入设定位置display,*');i=length;switch(temp)/根据按键号调用任务/修改密码case

13、12: if(flag_allow) && (flag_amend=0) 输入密码正确的条件下可以更改tablejnput0='0'flag_display=3;/请输入新密码flag_confirm=1;/确认键进入确认修改密码功能flag_amend=1;/每次按下修改键时都是第一次输入新密码length=0;/重按修改键时也是第一次输入新密码i=0;elseflag_confirm=0;/ 恢复初始态flag_amend=0;lcd_display(1); 密码不正确delay(500);flag_display=7;length=0;i=0;break;

14、case 11: /取消command(0xC0+length);/ 擦出显示display。');/显示后光标J1示地址又加了 1command(0xC0+length);/重置光标_显示地址|实为将光标拉回来 i=0;if(length > 0)length-;/input口 位置后退一位break;case 10: confirm。;/ 确定i=0;break;case 13: /修改密码的过程中取消修改密码|将系统置于初始态即可if(flag_amend=1) | (flag_amend=2)flag_amend=0;flag_confirm=0;lcd_display(

15、8);delay(500);flag_display=7;length=0;i=0;break;lcd_display(flag_display);elseTR0=1;开始计时等待DC_Moter();resume_password();if(flag_clear)恢复密码和开锁键_外部中断有效时重新计时flag_clear=0;timer=0;if(timer=100)/10 秒后不允许更改密码flag_allow=0;flag_amend=0;flag_confirm=0;length=0;i=0;lcd_display;/显示初始态,以提示修改超时if(timer=1200)/ =2分钟

16、后休眠|空闲方式TR0=0;timer=0;clear_system();/恢复初始态i=0;key_clock=0;delay(250);key_clock=1;PCON|=0x01;lcd_display;/唤醒CPU后显示初始态void int0() interrupt 0key_LCD=0;/开液晶电源key_clock=0;delay(250);key_clock=1;flag_clear=1;void Timer0() interrupt 1 /50msTH0=0x3C;/(65535-50000)/256TL0=0xAF;/(65535-50000)%256 timer+;2.0

17、 负责实现具体操作的 process_char.c文件#include<reg52.h>#include<string.h>#include"mydefine.h"sbit key_self=P2A1;/独立按键,用于恢复初始密码sbit key_LED=P2A0;sbit key_M=P2A4;/DC 电机控制 口sbit key_LCD=P2A7;/ 液晶电源控制口extern bit flag_clear;/恢复密码和开锁键_外部中断的有效标识extern unsigned int timer;/定时器0计数时段标记_50ms 一次定时中断ex

18、tern unsigned char length=0;/ 跟踪记录输入 table_input11的字符长度 (<=10)extern unsigned char flag_display=0;/根据其值可以确定显示信息extern unsigned char flag_confirm=0;/确认键根据此标识判定任务,默认为0即为确定密码状态extern unsigned char flag_allow=0;/允许修改密码标识,在密码比较正确时置 1extern unsigned char flag_amend=0;/ 第一/二次输入新密码标识unsigned char flag_M=

19、0;/允许电机开锁标识extern void command(unsigned char command);extern void display(unsigned char date);/向I2C地址为address处写入数据dateextern void whte_12c(unsigned char address,unsigned char date);读出I2C地址为address处的数据extern unsigned char read_12c(unsigned char address);static void delay(unsigned int N)/N ms 延时 /准确性高

20、unsigned int i=0,j=0;for(i=1;i<=N;i+)for(j=1;j<=355;j+);/休眠前清除table_input中的值extern void clear_system()table_input0='0'/ 恢复初始态length=0;flag_allow=0;flag_confirm=0;flag_amend=0;flag_clear=0;key_LCD=1;关液晶电源接收键盘输入|以字符形式存入table_input11extern void receive(unsigned char temp)按键在松手时读取按键号,故不会重复

21、读取按键值if(temp && length<=9)/ 如此,则无按键时执行效率高switch(temp)case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9: table_inputlength+=temp+48;/ 以字符形式存入table_input11break;Word资料case 14: table_inputlength+=48;/ 字符 0/根据任务选择显示信息extern void lcd_display(unsigned char temp)unsigned char i=0,*p

22、=NULL;if(temp)switch(temp)/选择显示信息case 1: p=table_error;/ 密码不正确 break;case 2: p=table_pass;/密码正确break;case 3: p=table_new;/ 请输入新密码 break;case 4: p=table_again;/请再次输入新密码 break;case 5: p=table_changed;/ 密码修改成功break;case 6: p=table_fail;/ 密码修改失败break;case 7: p=table_enter;/ 显示输入密码:The password!break;cas

23、e 8: p=table_abandon;/ 放弃修改密码break;case 9: p=table_close;/ 锁闭break;case 10: p=table_resume;/ 锁闭break;command(0x01);delay(1);command(0x80);while(*p!='0')display(*(p+);flag_display=0;/显示后清0,避免重复显示/确认extern void confirm(void)unsigned char flag_compare=0;/用于记录比较输入与密码的结果|相等时返回1,否则返回0unsigned char

24、 flag_compare_2=0;/用于记录对两次输入的新密码的比较结果|相等时返回1,否则返回0unsigned char i=0;if(length > 0)/输入不为空table_inputlength='0'length=0;/输入字符串长度清0if(flag_confirm)修改密码switch(flag_amend)case 1: strcpy(table_newpassword,table_input);/ 第一次输入新密码table_input1='0'/避免第一次输入的内容在放弃修改时再次被利用flag_amend=2;flag_dis

25、play=4;/请再次输入密码break;case 2: flag_compare_2=strcmp(table_input,table_newpassword);/ 第二次输入新密码flag_amend=0;/清0,允许再次修改flag_confirm=0;/进入初始之确认密码状态if(!flag_compare_2)/两次输入相同=0strcpy(table_password,table_input);table_input1='0'/避免修改完成后再次被利用,造成重复修改,同时避免刚修改了就是pass状态lcd_display(5);/ 修改成功delay(500);fl

26、ag_display=7;elselcd_display(6); 修改失败delay(500);flag_display=7;break;else验证密码flag_compare=strcmp(table_input,table_password);if(!flag_compare)/ 密码正确=0flag_allow=1;/允许修改密码flag_M=1;/允许开锁flag_display=2;/ 密码正确信息:Pass!table_input1='0'/改变输入,使不致出乱else/密码错误flag_allow=0;/不允许修改密码lcd_display(1);/ 密码错误信

27、息:Error!delay(500);flag_display=7;Word资料/电机控制extern void DC_Moter()if(flag_M)/允许开锁flag_M=0;key_M=0;/ 开锁key_LED=0;delay(1250);key_M=1;key_LED=1;timer=0;lcd_display(7);/ 进入初始态恢复初始密码extern void resume_password()Word资料if(!key_self)=0delay(3);if(!key_self)/=0while(!key_self) ;/=0strcpy(table_password,tab

28、le_original);flag_clear=1;lcd_display(10);delay(500);lcd_display;确认函数_ con巾rm()操作:0_等'0'置于输入table_input结尾(table_input口的长度返回值在length里面)根据操作标识选择任务:1_确认密码:判定输入密码正确与否2修改密码:确认第一次输入并保存要求第二次输入比较两次输入是否相同根据比较结果选择任务:修改失败,进入输入密码态修改成功,将输入复制到table_password口确认函数_con巾rm()相关标识位目录flag_display;根据其值可以确定显示信息fla

29、g_confirm;/确认键根据此标识判定任务,默认为0_即为确定密码状态flag_allow;/允许修改密码标识,在密码比较正确时置1flag_amend;/第一/二次输入新密码标识flag_M;/允许电机开锁标识相关变量sbit M=P3A6;/ 电机控制口flag_confirm;/操作任务标识位flag_compare;比较输入与密码|相等时返回1,否则返回0static flag_amend;/修改密码时的标识第一次输入前=1,输入后置2第二次输入前=2,输入后置0flag_display=0;/确认键操作的返回值根据返回值可以确定显示信息flag_allow;/允许改密码标识,在密

30、码比较正确时置1,不正确时置0process_char()函数:_M;/DC 电机控制口process_char()函数二ength;/跟踪记录输入table_input11的字符长度(<=10)lcd_display()函数中标识位flag_display的值与意义:=0:不显示|不刷新显示=1:密码错误=2:密码正确=3:请输入新密码=4:请再次输入新密码=5:密码修改成功=6:密码修改失败=7:显示输入密码状态_The password!=8:放弃修改密码=9:已开锁3.0定义各个数组的头文件mydefine.hextern unsigned char table_input11=

31、0;/ 接收键盘输入unsigned char table_password11="123456”;/ 密文unsigned char table_newpassword11="456" / 接收新密码unsigned char code table_original11="123456”; / 初始密码/显示信息unsigned char code table_pass=”Pass!"/ 成功进入unsigned char code table_error="Operate Error!"/ 密码错误信息unsigned

32、char code table_enter="The password:"/ 输入密码unsigned char code table_new="New password:"/ 输入新密码unsigned char code table_again="Enter again:" / 再次输入新密码unsigned char code table_changed="Changed!"/ 密码修改成功unsigned char code table_fail="Fail changce!"/ 密码修

33、改失败unsigned char code table_abandon="Abandon changce!"/ 放弃修改密码unsigned char code table_close="Locked!"/ 锁闭unsigned char code table_resume="Resumed!"/ 恢复初始密码4.0 头文件 mydefine_2.h定义了各个外部文件向主函数用到的操作函数和外部变量#ifndef _mydefine_2_h_#define _mydefine_2_h_sbit key_LED=P2A0;sbit key_clock=P3A3;/ 蜂鸣器sbit key_LCD=P2A7;/ 液晶电源控制口extern bit flag_clear=0;/恢复密码和开锁键_外部中断的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论