单片机课程设计密码锁
51单片机四位密码锁课程设计
51单片机四位密码锁课程设计51单片机四位密码锁是一种常见的电子锁,它使用51单片机作为控制核心,通过输入四位密码来控制锁的开关。
本文将介绍关于51单片机四位密码锁的课程设计。
我们需要明确设计的目标和要求。
本设计的主要目标是实现一个四位密码锁系统,并且需要满足以下要求:1.能够输入四位数字密码。
2.密码输入正确时,能够解锁并输出解锁信号。
3.密码输入错误时,不能解锁。
4.能够重置密码。
接下来,我们将详细介绍设计的步骤和实现。
1.硬件设计:在硬件设计方面,我们需要准备以下器件:- 51单片机-数码管显示模块-按键模块-继电器模块-电源模块2.软件设计:在软件设计方面,我们需要编写51单片机的程序,通过编程实现密码锁的功能。
以下是设计的主要步骤:-初始化:设置输入输出引脚,并初始化时钟和数码管显示。
-输入密码:设计密码输入的函数,通过按键模块获取用户输入的密码。
-检验密码:设计密码检验的函数,将用户输入的密码与预设的密码进行比对。
-解锁信号:如果密码输入正确,输出解锁信号,通过继电器控制开关,实现解锁。
-密码错误:如果密码输入错误,通过数码管显示密码错误的提示信息。
-重置密码:设计密码重置的函数,将新设置的密码保存。
3.程序流程:根据以上设计的步骤,我们可以得到以下主要的程序流程:-初始化引脚和时钟。
-设置初始密码。
-进入主程序循环。
-接收用户输入的密码。
-检验密码是否正确。
-如果密码正确,显示解锁信号并控制继电器解锁。
-如果密码错误,显示密码错误信息。
-进入下一次循环。
4.调试和测试:完成程序编写后,我们需要进行调试和测试。
在测试过程中,我们需要输入正确和错误的密码进行验证,检查程序是否能够正常运行,并且能够正确判断和处理用户输入的情况。
5.优化改进:如果在测试中发现问题或不足之处,我们可以对程序进行优化和改进。
例如,可以增加密码输入的最大尝试次数,增加延时等待时间,增加密码保护等功能。
总结:通过对51单片机四位密码锁的课程设计,我们学习了如何使用51单片机编写程序,实现密码锁的功能。
单片机课程设计 电子密码锁
第1章设计目的1.利用所学单片机的理论知识进行软硬件整体设计,锻炼学生理论联系实际、提高我们的综合应用能力。
2.我们这次的课程设计是以单片机为基础,设计出一个具有一定功能的电子密码锁。
3.掌握一些重要芯片的功能特性及使用方法,并能运用其组合成一个简单的单片机机应用系统。
4.锻炼同学们的动手能力和独立思考的能力,巩固理论知识,加深对课堂内容的理解。
5.培养同学们对单片机的兴趣,通过课程设计调动同学们的积极性,使更多的人将来能在单片机领域有所建树。
第2章设计要求及总体思路2.1设计要求1、密码的设定,此密码是固定在程序存储器ROM中,假设预设的密“12345”共5位密码。
2、密码的输入:采用两个按键来完成密码的输入,其中一个按键为功能键,另一个按键为数字键。
在密码都已经输入完毕并且确认功能键之后,才能完成密码的输入过程。
然后进入密码的判断比较处理状态并给出相应的处理过程。
3、按键禁止功能:初始化时,允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态是在3次密码输入不正确的情况下发生的。
2.2 总体思路系统总体设计方案框图如下:图2-1一般而言,要实现相同的功能,硬件复杂的系统其软件一般较简单,而软件复杂的系统其硬件一般相对简单,本着经济性的原则,我们应该尽可能少用硬件,根据这个设计理念和设计要求,本单片机系统的设计思路如下:1)电子密码锁所用的数据的存储和运算用单片机来完。
2)因为没有专用的输入键盘,所以按键输入用计算器输入键盘代替。
按键密码从P3口输入。
3)用六位显示器显示五位密码,显示器选择动态扫描,用P0口作段控,用P2口作位控。
4)开锁信号从P1.1口输出,报警信号从P1.0口输出。
5) 按键分为功能键和数字键,具体如表2-1。
6)输入五位密码后按确认键,系统验证密码是否正确,若密码正确,则产生开锁信号,若接连三次输入错误密码,则产生报警信号。
7) 当错误输入某位密码时,可按删除键进行删除,也可按清零键对所输入的数进行整体清除。
单片机课程设计多功能密码锁
任务及设计要求1.设计一多位电子密码锁,输入密码用“F”表示,输入密码正确,绿灯亮(或显示其它标志、蜂鸣器替代),输入密码错误,红灯亮(或显示其它标志、蜂鸣器替代).2.具有确定键和取消键,在未确定之前可以取消,重新输入.3.连续输入三次错误密码,红灯闪烁,报警电路动作,键盘锁定.4.具有密码重置、修改功能.5.具有密码输入等待操作时间限制功能,超过限定时间报警.6.显示北京时间,时间可调整.7.可利用蜂鸣器添加提示音.系统原理框图硬件原理图元件清单硬件原理图仿真用原理图由于元件库缺少ADUC848,故使用了STC89C51代替仿真,因为端口两个芯片的P1口输入输出的设置不同,在仿真中修改了键盘扫描函数,以适用STC89C51的仿真.电源模块原理图有如下3种供电方式:1/5V电源适配器供电(开关往上拨、插针1下面两脚接跳线帽).2/7~12V电源适配器供电(开关往上拨、插针1上面两脚接跳线帽).3/USB供电(开关往下拨).RS232串口连接原理图该模块中采用maxin公司的max232作电平转换,接上串口转换下载线就可以从计算机上下载程序了.数码管显示模块原理本开发板采用共阴极数码管,段码由PNP三极管驱动,位码由NPN型三极管驱动.本设计中使用了低5位的数码管.蜂鸣器原理图本设计中采用无源电磁式蜂鸣器,蜂鸣器由PWM1(P2.6)控制.PWM1为片内PWM模块的输出.蜂鸣器的驱动采用普通NPN三极管.按键输入模块原理图由于P1口(用于行扫描)内部无上拉电阻,为使无键按下时行信号为高电平,故将行信号接上拉电阻,电阻大小10K即可.P2.0~P2.3为4X4矩阵式键盘列扫描信号.程序主要程序流程图程序#include <aduc848.h>#include<intrins.h>/****************************************************************************** *****类型定义******************************************************************************* *****/#define uint unsigned int#define uchar unsigned char/****************************************************************************** *****状态定义******************************************************************************* *****/#define opened 0#define new1 15#define new2 16#define succed 5#define fanin 10#define null 11#define error 12#define different 13#define tover 14/****************************************************************************** *****按键定义******************************************************************************* *****/#define enter 10#define back 11#define trevise 12#define revise 13#define cancel 14#define vain 15#define off 16#define end 17#define finish 18/****************************************************************************** *****函数声明******************************************************************************* *****/void p_base();void p_revise();void p_new1();void p_new2();void p_trevise();void p_show();uchar p_scan();void p_record();void p_delay(uint f_n);void p_state(uchar f_s);uchar p_compare(uchar *f_k1,uchar *f_k2);void p_copy(uchar *f_s,uchar *f_k);void p_rsave();void p_wsave();void p_rtime();void p_stime();void p_start();void p_stop();bit p_rack();void p_nack();uchar rbyte();void p_wbyte(uchar f_b);uchar p_rdata(uchar f_a);void p_wdata(uchar f_a,uchar f_d);/****************************************************************************** *****I/O口定义******************************************************************************* *****/sbit p00=P0^0;sbit p10=P1^0;sbit p11=P1^1;sbit p12=P1^2;sbit p13=P1^3;sbit p14=P1^4;sbit p15=P1^5;sbitp16=P1^6;sbit p17=P1^7;sbit p20=P2^0;sbit p21=P2^1;sbit p22=P2^2;sbit p23=P2^3;sbit p24=P2^4;sbit p25=P2^5;sbit p26=P2^6;sbit p27=P2^7;sbit p30=P3^0;sbit p31=P3^1;sbit p32=P3^2;sbit p33=P3^3;sbit p34=P3^4;sbit p35=P3^5;sbit p36=P3^6;sbit p37=P3^7;/****************************************************************************** *****全局变量定义******************************************************************************* *****/ucharbot,key1[9],key2[9],save[9],stime[4],s,min,h,mino,mint,ho,ht,n1=1,n2=1,lock,minu,sign,tov, state,n,sound,point=1,ts,flash=7,bright33=1,bright35=1,bright36=1,bright37=1;showlist[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0x71,0xff,0x21,0x85,0xe 1,0x7f,0x7d};uintms;/****************************************************************************** *****主函数******************************************************************************* *****/void main(){EA=1;ET0=1;TMOD=0x11;TH0=0xf9;TL0=0xdb;TR0=1;I2CCON=0xe8;sound=0;tov=1;P1=0x00;p_rsave();sign=p_rdata(40);if(sign!=1)p_new1();p_base();}/****************************************************************************** *****基础解锁函数******************************************************************************* *****/void p_base(){n=0;state=fanin;while(1){if(n==0)state=fanin;elsestate=n;bot=p_scan();if(n!=0&&tov==0){p_state(tover);main();}switch(bot){case vain:break;case enter:key1[n]=end;if(p_compare(key1,save)){p_state(succed);lock=0;point=1;state=opened;openedwhile(1){ bot=p_scan();switch(bot){case off:main();break;case back:while(1){bot=p_scan();switch(bot){case off:main();break;case enter:p_wdata(40,0);main();break;}}}}}else{p_state(error);p_record();main();}break;case cancel:main();break;case back:if(n!=0)key1[n--]=end;break;case revise:p_revise();break;case trevise:p_trevise();break;default:if(n+1==9){p_state(error);main();}key1[n++]=bot;}}}/****************************************************************************** *****密码修改函数******************************************************************************* *****/void p_revise(){n=0;p_state(fanin);state=fanin;while(1){if(n==0)state=fanin;elsestate=n;bot=p_scan();if(tov==0){p_state(tover);main();}switch(bot){case vain:break;case enter:key1[n]=end;if(p_compare(key1,save)){lock=0;point=1;p_state(succed);p_new1();}else{p_state(error);;p_record();main();}break;case cancel:main();break;case back:if(n!=0)key1[n--]=end;break;case revise:p_revise();case off:break;case trevise:p_trevise();break;default:if(n+1==9){p_state(error);main();}key1[n++]=bot;}}}/****************************************************************************** *****新密码输入函数******************************************************************************* *****/void p_new1(){n=0;state=new1;while(1){if(n==0)state=new1;elsestate=n;if((tov==0&&sign==1)||(n!=0&&tov==0)){p_state(tover);main();}bot=p_scan();switch(bot){case vain:break;case enter:key1[n]=end;p_new2();break;case cancel:main();break;case back:if(n!=0)key1[n--]=end;break;case revise:if(sign==1)p_revise();break;case trevise:p_trevise();break;default:if(n+1==9){p_state(error);main();}key1[n++]=bot;}}}void p_new2(){n=0;state=new2;while(1){if(n==0)state=new2;elsestate=n;bot=p_scan();if(tov==0){p_state(tover);main();}switch(bot){case vain:break;case enter:key2[n]=end;if(p_compare(key1,key2)){sign=1;p_copy(save,key2);lock=0;p_state(succed);p_wsave();p_wdata(40,1);main();}else{p_state(different);main();}break;case cancel:main();break;case back:if(n!=0)key2[n--]=end;break;case revise:if(sign==1)p_revise();break;case off:break;case trevise:p_trevise();break;default:if(n+1==9){p_state(error);main();}key2[n++]=bot;}}}/****************************************************************************** *****键盘扫描函数******************************************************************************* *****/uchar p_scan(){uchar f_s=vain;P2=P2&0xf0;if(P1!=0xff){p_delay(10);if(P1!=0xff){tov=1;P2=P2&0xf0;P2=P2|0x07;switch(P1){case 0xfe:f_s=1;break;case 0xfd:f_s=4;break;case 0xfb:f_s=7;break;case 0xf7:f_s=back;break;}while(P1!=0xff){sound=1;}sound=0;P2=P2&0xf0;P2=P2|0x0b;switch(P1){case 0xfe:f_s=2;break;case 0xfd:f_s=5;break;case 0xfb:f_s=8;break;case 0xf7:f_s=0;break;}while(P1!=0xff){sound=1;}sound=0;P2=P2&0xf0;P2=P2|0x0d;switch(P1){case 0xfe:f_s=3;break;case 0xfd:f_s=6;break;case 0xfb:f_s=9;break;case 0xf7:f_s=enter;break; }while(P1!=0xff){sound=1;}sound=0;P2=P2&0xf0;P2=P2|0x0e;switch(P1){case 0xfe:f_s=cancel;break;case 0xfd:f_s=off;break;case 0xfb:f_s=revise;break;case 0xf7:f_s=trevise;break; }while(P1!=0xff)sound=1;}sound=0;p_delay(10);}}return f_s;}/****************************************************************************** *****1毫秒中断函数.数码管显示函数******************************************************************************* *****/void time() interrupt 1{TH0=0xf9;TL0=0xdb;TR0=1;ms++;ms=ms%1000;p_show();if(sound)p26=!p26;if(ms==0){ts=!ts;tov++;tov=tov%11;s++;s=s%60;if(s==0){minu++;minu=minu%30;if(minu==0)lock=0;min++;min=min%60;mino=min%10;mint=min/10;if(min==0)h++;h=h%24;ho=h%10;ht=h/10;}}}}void p_show(){switch(n1){case 1:P3=0x80;if(bright37==1)P0=showlist[ht];elseP0=showlist[null];n1++;break;case 2:P3=0x20;if(bright35==1)P0=showlist[mint];elseP0=showlist[null];n1++;break;case 3:P3=0x00;p24=1;P0=showlist[state];n1++;p00=point;break;case 4:p24=0;P3=0x08;if(bright33==1)P0=showlist[mino];elseP0=showlist[null];n1++;break;case 5:P3=0x40;if(bright36==1){P0=showlist[ho];p00=0;}elseP0=showlist[null];n1=1;break;}}/****************************************************************************** *****时间修改函数******************************************************************************* *****/void p_trevise(){n2=1;p24=0;flash=7;state=null;p_stime();while(1){switch(flash){case 7:bright37=ts;break;case 3:bright33=ts;break;case 6:bright36=ts;break;case 5:bright35=ts;}if(tov==0){bright37=0;bright33=0;bright36=0;bright35=0;P3=0x00;p_state(tover);bright37=1;bright33=1;bright36=1;bright35=1;p_rtime();main();}if(bot!=finish)bot=p_scan();switch(bot){case vain:break;case finish:bright37=1;bright33=1;bright36=1;bright35=1;h=ho+ht*10;min=mino+mint*10;s=1;main();break;case enter:break;case cancel:bright37=1;bright33=1;bright36=1;bright35=1;p_rtime();main();break;case back:case revise:if(sign==1){bright37=1;bright33=1;bright36=1;bright35=1;p_rtime();p_revise();}break;case off:break;case trevise:bright37=1;bright33=1;bright36=1;bright35=1;p_rtime();p_trevise();break;default:switch(n2){case 4:mino=bot;bright33=1;bot=finish;flash=0;break;case 3:if(bot<=5){mint=bot;n2++;flash=3;bright35=1;}break;case 2:if(ht==2&&bot<=3||ht<=1&&bot<=9){ho=bot;n2++;flash=5;bright36=1;}break;case 1:if(bot<3){ht=bot;n2++;flash=6;bright37=1;}break;}}}}/****************************************************************************** *****时间存储函数******************************************************************************* *****/void p_rtime(){mino=stime[0];mint=stime[1];ho=stime[2];ht=stime[3];}/****************************************************************************** *****时间读取函数******************************************************************************* *****/void p_stime(){stime[0]=mino;stime[1]=mint;stime[2]=ho;stime[3]=ht;}/****************************************************************************** *****错误计数标志函数******************************************************************************* *****/void p_record(){lock++;minu=0;while(lock==3){sound=1;point=0;state=error;p_delay(99999);state=null;p_delay(99999);}}/****************************************************************************** *****结果显示函数******************************************************************************* *****/void p_state(uchar f_s){uchar f_n=3;while(f_n--){state=f_s;sound=1;p_delay(99999999);state=null;sound=0;p_delay(99999999);}}/****************************************************************************** *****密码读写函数******************************************************************************* *****/void p_rsave(){uchar f_n=9;while(f_n--)save[f_n]=p_rdata(f_n+10);}void p_wsave(){uchar f_n=9;while(f_n--)p_wdata(f_n+10,save[f_n]);}/****************************************************************************** *****延时函数******************************************************************************* *****/void p_delay(uint f_n){f_n=100*f_n;while(f_n--);}/****************************************************************************** *****数组比较函数******************************************************************************* *****/uchar p_compare(uchar *f_k1,uchar *f_k2){uchar f_k=0,f_n=0;{if(*(f_k1+f_n)==end&&*(f_k2+f_n)==end){f_k=1;break;}else if(*(f_k1+f_n)!=*(f_k2+f_n)){f_k=0;break;}f_n++;}return f_k;}/****************************************************************************** *****数组复制函数******************************************************************************* *****/void p_copy(uchar *f_s,uchar *f_k){uchar f_n;for(f_n=0;*(f_k+f_n)!=end;f_n++)*(f_s+f_n)=*(f_k+f_n);*(f_s+f_n)=end;}/****************************************************************************** *****EEPRom读写函数******************************************************************************* *****/uchar p_rdata(uchar f_a){uchar f_d;p_start();p_wbyte(0xd0);p_wbyte(f_a);p_rack();p_stop();_nop_();p_start();p_wbyte(0xd1);p_rack();f_d=rbyte();p_nack();p_stop();_nop_();return f_d;}void p_wdata(uchar f_a,uchar f_d) {p_start();p_wbyte(0xd0);p_rack();p_wbyte(f_a);p_rack();p_wbyte(f_d);p_rack();p_stop();_nop_();}void p_start(){MDE=1;MDO=1;MCO=1;MDO=0;}void p_stop(){MDE=1;MDO=0;MCO=1;MDO=1;}bit p_rack(){bit f_f;MCO = 0;MDE=1;MDO = 1;MCO = 1;MDE=0;f_f = MDI;MCO = 0;return f_f;}void p_nack(){MDE=1;MDO = 1;MCO = 1;MCO = 0;}uchar rbyte(){uchar f_b,n;f_b=0;MDE=1;MDO = 1;MDE=0;for (n=0;n<8;n++){MCO = 0;_nop_();MCO = 1;f_b<<=1;if (MDI)f_b|=0x01;}MCO = 0;return(f_b);}void p_wbyte(uchar f_b){uchar f_n;MDE=1;for(f_n=0;f_n<8;f_n++){MCO = 0;MDO = (f_b&0x80)>>7;_nop_();MCO = 1;f_b<<= 1;}MCO = 0;}使用说明书本产品为多功能密码锁.01.第一次启动后需要设定新密码,此时指示管显示一,输入新密码后按ENTER.然后需要确定新密码,此时指示管显示二,输入相同的密码后.指示管显示s闪烁3次,表示新密码设定成功.若两次密码不相同,则指示管显示d闪烁3次,然后指示管重新显示一,表明你需要重新输入新密码并确定.02.密码设定成功后,指示管显示f,表明你可以输入密码打开密码锁了.输入密码并按ENTER,如果密码正确,指示管显示s闪烁3次然后指示管显示o.表明密码锁已经打开.若密码不正确,指示管显示e闪烁3次.并且指示管重新显示f,此时你需要重新输入正确的密码.03.若密码锁已经打开,你需要按下OFF以关闭密码锁.04.如果你想要重设密码,请按下REVISE,然后,指示管显示f闪烁三次后,你需要输入原始密码后按ENTER,然后按第一步的方法设定密码.05.本产品有时间显示功能,如果你想修改时间,你可以按下TREVISE.这时候你可以调整你的时间了,此时需要调整位闪烁,若修改时间不符合实际,则无法修改.提示01.密码最多8位,超过8位会显示错误.02.无法输入不合理的时间.03.在半小时内连续输入错误的密码3次,键盘会锁定,无法进行任何操作, 蜂鸣器报警且指示管显示e一直闪烁直到半小时过去,并且指示管点亮起,提醒有人试图打开保险箱,直至再次输入正确的密码.04.BACK键可退格.05.CANCLE可返回表层.06.10秒操作超时, 蜂鸣器报警.07.按下任何一个键蜂鸣器都会响起提醒按键成功.08.本产品具有掉电储存功能,关闭电源后依然会记录密码.09.回复出厂设置,在OPENED状态下,先按BACK然后再按ENTER即可回复出厂设置.10.密码位数显示, 指示管会显示你输入了多少位密码.键位说明。
单片机课程设计报告电子密码锁
山东交通学院单片机原理与应用课程设计院(部):轨道交通学院班级:自动化121学生姓名:学号:指导教师:时间: 2015.6.1—2015.6.12课程设计任务书题目电子密码锁设计系 (部) 轨道交通学院专业班级自动化121学生姓名学号06 月 01 日至 06 月 12 日共 2 周指导教师(签字)系主任(签字)年月日一、设计内容及要求本实验基于51单片机利用矩阵按键、步进电机、lcd1602等模块实现电子密码锁的输入密码、密码比对、步进电机的驱动、修改密码等功能。
设计内容包括:1)lcd1602显示;2)矩阵按键的输入;3)24C08的储存于读取;4)步进电机的驱动;5)线路的链接。
设计要求:1)能演示;2)能回答答辩过程中提问的问题;3)完成设计报告。
二、设计原始资料单片机原理及接口技术李全利 2010年 1月单片机原理及应用教程范立南 2006年 1月单片机原理及应用教程刘瑞新 2003年07月三、设计完成后提交的文件和图表1.计算说明书部分1)方案论证报告打印版或手写版2)程序流程图3)具体程序2.图纸部分:具体电路原理图打印版四、进程安排教学内容学时地点资料查阅与学习讨论 2天 406实验室分散设计 4天 406实验室编写报告 2天 406实验室成果验收 2天 406实验室按分组选择不同的实验台,每组3人,题目可重复选择,但每题目不得超过10人。
五、主要参考资料《电子设计自动化技术基础》马建国、孟宪元编清华大学出版2004年4月《单片机原理及接口技术》张毅刚人民邮电出版社.2008年《实用电子系统设计基础》姜威 2008年1月《单片机系统的PROTEUS设计与仿真》张靖武 2007年4月指导老师成绩答辩小组成绩总成绩目录摘要 (1)1.设计要求 (2)2.功能概述 (2)3.总体设计 (2)4.硬件设计 (3)4.1矩阵按键设计 (3)4.2 LCD显示设计 (4)4.3步进电机模块设计 (5)4.4密码修改设计 (5)4.5密码比较模块 (6)5.软件设计及流程图 (6)6.个人体会 (8)7.参考文献 (9)附录 (10)摘要设计运用了ATMEL公司的AT89S52芯片系统,将微处理器、总线、蜂鸣器、矩阵键盘、存储器和I/O口等硬件集中一块电路板上,通过读取键盘输入的数据(密码)并储存到ATMEL912 24C08存储器中,然后判断之后键盘输入的数据与已存储的数据是否相同来决定打开密码箱或锁键盘或报警。
单片机课程设计密码锁设计
单片机课程设计密码锁设计在当今社会,安全问题越来越受到人们的重视,密码锁作为一种常见的安全防护设备,在保护个人财产和隐私方面发挥着重要作用。
本次单片机课程设计的任务就是设计一款基于单片机的密码锁。
一、设计要求本次设计的密码锁需要具备以下功能:1、能够设置和修改 4 位数字密码。
2、输入密码正确时,锁打开,并有相应的指示灯提示。
3、输入密码错误时,有错误提示,且错误次数超过 3 次则报警。
4、具备密码重置功能。
二、系统方案设计1、硬件设计单片机选型:选择 STC89C52 单片机作为核心控制器,其具有性能稳定、价格低廉、易于编程等优点。
输入模块:采用 4×4 矩阵键盘作为密码输入设备,可方便地输入数字和功能按键。
显示模块:选用 1602 液晶显示屏,用于显示密码输入状态、提示信息等。
存储模块:使用 EEPROM 芯片 AT24C02 来存储密码,以保证断电后密码不丢失。
报警模块:当密码输入错误次数超过 3 次时,通过蜂鸣器发出报警声音。
2、软件设计主程序:负责系统的初始化、键盘扫描、密码输入处理、密码验证、显示控制等。
键盘扫描程序:检测矩阵键盘上的按键动作,并将按键值返回给主程序。
密码处理程序:包括密码设置、修改、存储和验证等功能。
显示程序:控制 1602 液晶显示屏的显示内容。
三、硬件电路设计1、单片机最小系统包括单片机芯片、晶振电路和复位电路。
晶振为单片机提供时钟信号,复位电路用于系统的初始化。
2、矩阵键盘电路由16 个按键组成 4×4 矩阵,通过行线和列线的扫描来确定按键值。
3、显示电路1602 液晶显示屏通过数据总线和控制总线与单片机相连,实现数据的传输和显示控制。
4、存储电路AT24C02 通过 I2C 总线与单片机进行通信,用于存储密码数据。
5、报警电路蜂鸣器通过三极管驱动,当单片机输出高电平时,蜂鸣器发声报警。
四、软件程序设计1、主程序流程系统初始化,包括单片机端口初始化、液晶显示屏初始化、EEPROM 初始化等。
单片机课程设计——数字密码锁
课程设计课程名称:单片机原理与应用课题名称:数字密码锁设计所在学院名称:湖南大学电气与信息工程学院目录一、前言..................................... - 3 -二、总体方案设计.............................. - 3 -2.1方案论证与比较 ................................................................. - 3 -2.2方案选择............................................................................. - 4 -三、单元模块设计.............................. - 4 -3.1硬件支持............................................................................. - 4 -3.2功能单元模块设计.............................................................. - 4 -3.2.1 开锁机构 .................................................................. - 4 -3.2.2 矩阵键盘设计电路 ................................................... - 5 -3.2.3 声音提示电路设计 ................................................... - 6 -3.2.4 显示模块设计........................................................... - 7 -四、程序设计与系统仿真.......................... - 8 -4.1 模块介绍............................................................................ - 8 -4.1.1 主程序模块............................................................. - 10 -4.1.2 密码比较判断模块 ................................................. - 10 -4.1.3 键盘扫描模块......................................................... - 10 -4.1.4 修改密码模块......................................................... - 11 -五、系统功能 .................................. - 13 - 六.设计总结 .................................. - 13 - 七、附录:源程序............................... - 13 -一、 前言随着社会物质财富的日益增长和人们生活水平的提高,安全成为现代居民最关心的问题之一。
单片机课程设计-密码锁
单片机课程设计- 密码锁1 设计课题任务、功能要求说明及总体方案介绍1.1 设计课题任务设计一个具有特定功能的密码锁。
该密码锁上电或按键复位后能自动显示系统提示符“ P. ”,进入准备工作状态。
该密码锁具有系统原始密码888888,用户可以设定并存储用户密码,密码输入时应处于保密显示状态,密码输入正确时应显示密码输入正确提示信息,否则,显示密码输入错误提示信息。
1.2 总体方案介绍及工作原理说明⑴原始密码的设定,此密码是固定在程序存储器R0附,假设预设的密码为888888”共6 位密码。
(2) 密码的输入: 采用按键来完成密码的输入,输入时密码处于显示保密状态,输入六位密码后,自动结束输入,并判断其正确性(3) 密码若输入错误,显示输入错误提示信息,密码输入正确后,可以用键盘任意输入数字,若按下第八个按键,则进入修改密码(4) 密码修改: 可以任意输入“1 - 7”中的六位数字作为密码,密码输入时处于保密显示状态,六位密码输入结束确认后显示P. 。
电源模块报警装置AT89S52复位和振荡下载口单片机电路数码管显独立式键盘示模块图1 设计总框图2 密码锁硬件系统的设计12.1 密码锁硬件系统各模块功能简要介绍此次课程设计是基于单片机控制的电子密码锁,结合主要设计条件,本设计由单片机系统、独立式键盘、LED显示和报警系统组成,系统能完成开锁、错误报警、密码修改功能等功能,设计硬件系统如下(1) 单片机系统:此次课题采用一种是用以AT89S52为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的IO 端口,及其控制的准确性,进行电子密码锁的设计。
此次课题用单片机P1 口与键盘相连,做输入口,P0 口与显示器段控相连,输入段控码,P2 口输入位控码。
(2) 独立式键盘接口电路:此次课程设计采用独立式键盘,与P1 口相连,键按下则会使该端口变成低电平,单片机读P1 口,通过对P1 口数据的判断来确定哪一个键按下。
单片机课程设计-电子密码锁
单片机课程设计-电子密码锁电子密码锁的设计说明书院系:机电汽车工程学院专业:机械设计制造及其自动化班级:姓名:学号:指导老师:同组人员:1中文摘要摘要:随着经济的发展,人们对日常生活质量的要求也越来越高,从工作、学习、出行、购物等的各个方面,人们也对现代安全设施提出来更高的要求。
在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。
密码锁具有安全性高、成本低、功耗低、易操作等优点,同时还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。
本次电子密码锁的设计主要就针对于这种社会需求,从程序设计到硬件设计以及硬件安装连接都做了详细的说明。
2设计说明本次设计使用 ATMEL公司的 AT89C51 实现一基于单片机的电子密码锁的设计,其主要具有如下功能:①密码通过键盘输入,若密码正确,则将锁打开。
②报警、锁定键盘功能。
密码输入错误数码显示器会出现错误提示,若密码输入错误次数超过 3 次,蜂鸣器报警并且锁定键盘。
电子密码锁的设计主要由三部分组成:4×4 矩阵键盘接口电路、密码锁的控制电路、输出八段显示电路。
另外系统还有LED 提示灯,报警蜂鸣器等。
密码锁设计的关键问题是实现密码的输入、清除、更改、开锁等功能:①密码输入功能:按下一个数字键,一个“-”就显示在最右边的数码管上,同时将先前输入的所有“-”向左移动一位。
②密码清除功能:当按下清除键时,清除前面输入的所有值,并清除所有显示。
③开锁功能:当按下开锁键,系统将输入与密码进行检查核对,如果正确锁打开,否则不打开。
主要的设计实施过程:首先,选用 ATMEL公司的单片机AT89C51,以及选购其他电子元器件。
第二步,使用 DXP 20043设计硬件电路原理图,并设计 PCB图完成人工布线(后因 PCB 板损坏决定采用万能板焊接的方法)。
单片机课程设计电子密码锁设计
单片机课程设计电子密码锁设计目录1 引言...................................... 错误!未定义书签。
2 系统设计分析............................... 错误!未定义书签。
2.1 总体设计框图.......................... 错误!未定义书签。
2.2 硬件电路设计分析...................... 错误!未定义书签。
2.2.1 时钟电路设计.................... 错误!未定义书签。
2.2.2 复位电路设计.................... 错误!未定义书签。
2.2.3 矩阵键盘设计.................... 错误!未定义书签。
2.2.4 报警控制电路.................... 错误!未定义书签。
2.2.5 液晶显示电路.................... 错误!未定义书签。
2.3 系统软件设计.......................... 错误!未定义书签。
2.3.2 初始化及按盘识别程序 ............ 错误!未定义书签。
2.3.3 开锁程序........................ 错误!未定义书签。
2.3.4 修改密码程序.................... 错误!未定义书签。
2.3.5 LCD显示程序..................... 错误!未定义书签。
2.4 仿真测试结果.......................... 错误!未定义书签。
3 总结....................................... 错误!未定义书签。
参考文献..................................... 错误!未定义书签。
附录......................................... 错误!未定义书签。
单片机课程设计-密码锁-附截图
设计一个具有特定功能的密码锁。
该密码锁上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
该密码锁具有系统原始密码888888,用户可以设定并存储用户密码,密码输入时应处于保密显示状态,密码输入正确时应显示密码输入正确提示信息,否则,显示密码输入错误提示信息。
; 40H-45H 按键缓冲区,用于存放键码值; 50H-55H 显示缓冲区,用于存放要显示的段码; 70H-75H 密码区保存区,用于存放密码; 30H 单个单元存放段码地址(即存放50-55); 31H 单个单元存放键码地址(即存放40-45); 21H.0位判断是否按下了修改密码键K2; 21H.1位修改密码时用于判断是否正确输入了原密码; 21H.2位产生初始P. 只要有键按下,则该位置1,否则置0来不断输出P.ORG 0000HSJMP MAINORG 0030HMAIN:MOV SP,#60HMOV P2,#01H ;用来产生P.0的位控MOV R1,#70H ;密码区,初始密码为六个8T: MOV @R1,#08HINC R1CJNE R1,#76H,TACALL PPAJMP FIRSTPP: MOV R0,#50H ;显示缓冲区首地址Q: MOV @R0,#0FFH ;“灭”段码INC R0CJNE R0,#56H,Q ;让8个显示缓冲区初始值为“灭”状态,后面按一次则赋一次值MOV 30H,#4FH ;段码地址临时MOV 31H,#3FH ;按键后存放键码的缓冲区首地址ACALL DLRETPQ:MOV P0,#0CH ;输出P.ACALL DLRET;下面实现按键功能FIRST:ACALL DIRACALL KEY ;调用键处理函数K1: JNB ACC.0,K2 ;K1键确定键判0 转移MOV 30H,#4FH ;段码地址临时MOV 31H,#3FH ;按键后存放键码的缓冲区首地址JB 21H.0,KK ;按了K2改密键,再K1,则表示修改密码,FUN0改密函数LJMP FUN1KK: CLR 21H.0LJMP FUN0K2: JNB ACC.1,K3 ;K2键改密码,但必须在输入原密码之后修改,而且要修改两次才确定修改ACALL PP ;调用函数让数码显示管灭JNB 21H.1,FIRST ;如果21H.1为0,表示未输入原密码SETB 21H.0ACALL DIRAJMP FIRSTK3: JNB ACC.2,K4 ;K3ACALL DIRINC 31HMOV R0,31H MOV @R0,#03H AJMP FIRST洞洞板/万能板成品图片左下角有地址-有录像K4: JNB ACC.3,K5 ;K4ACALL DIRINC 31HMOV R0,31HMOV @R0,#04HAJMP FIRSTK5: JNB ACC.4,K6 ;K5ACALL DIRINC 31HMOV R0,31HMOV @R0,#05HAJMP FIRSTK6: JNB ACC.5,K7 ;K6ACALL DIRINC 31HMOV R0,31HMOV @R0,#06HAJMP FIRSTK7: JNB ACC.6,K8 ;K7ACALL DIRINC 31HMOV R0,31HMOV @R0,#07HAJMP FIRSTK8: JNB ACC.7,FIRST ;K8ACALL DIRINC 31HMOV R0,31HMOV @R0,#08HAJMP FIRSTKS:MOV A,P1CPL ARETKEY: ACALL KSJNZ AGAIN ;有键闭合则转向再次判断AJMP EXTI ;无键闭合则转向结束AGAIN:ACALL DIR ;延时16毫秒ACALL DIRACALL KSJNZ LKP ;两次判断有键闭合,则转向按键键值判断;MOV A,20HAJMP EXTI ;第二次判断无键闭合,则转向结束LKP:SETB 21H.2 ;有键闭合JB ACC.0,LK1 ;要排除K1和K2键,因为那是作为确认和修改密码的,不是密码值JB ACC.1,LK1LK0:INC 30H ;有键闭合,显示缓冲区地址加1MOV R0,30HMOV @R0,#0BFH ;有键闭合,则让显示缓冲区状态为横杠LK1:PUSH ACCLK: ACALL DIR ;判断是否键起ACALL KSJNZ LKPOP ACCEXTI:JB 21H.2,TTACALL PQTT: RETDIR: MOV R0,#50H ;50H为显示缓冲区首地址N1: MOV P2,#80H ;位控制MOV P0 ,@R0 ;输出段控码ACALL DL ;延时1毫秒N2: INC R0MOV A,P2RR AMOV P2,AMOV P0,@R0 ;输出横杠线ACALL DLN3: INC R0MOV A,P2RR AMOV P2,AMOV P0,@R0 ;输出横杠线ACALL DLN4: INC R0MOV A,P2RR AMOV P2,AMOV P0,@R0 ;输出横杠线ACALL DLN5: INC R0MOV A,P2RR AMOV P2,AMOV P0,@R0 ;输出横杠线ACALL DLN6: INC R0MOV A,P2RR AMOV P2,AMOV P0,@R0 ;输出横杠线ACALL DLN7: INC R0MOV A,P2RR AMOV P2,AMOV P0,#0FFH ;输出横杠线ACALL DLN8: INC R0MOV A,P2RR AMOV P2,AMOV P0,#0FFH ;输出横杠线ACALL DLEXTI0:RET;延时一毫秒函数DL: MOV IE,#00HMOV TMOD,#10H ;工作方式1,MOV TH1,#0FCH ;延时程序延时一毫秒MOV TL1,#18HSETB TR1STEP1:JBC TF1,STEP2AJMP STEP1STEP2:CLR TR1RETFUN0:MOV R2,#06HMOV R0,#40H ;修改密码把40H-45H里的内容放到70H-75H里面去MOV R1,#70HH: MOV A,@R0MOV @R1,AINC R0INC R1DJNZ R2,HMOV R0,#50HZ: MOV @R0,#0F9H ;输出1表示密码修改正确INC R0CJNE R0,#56H,ZACALL DIRAJMP FIRSTFUN1:MOV R0,#40H ;输入的键码MOV R1,#70H ;密码区W: MOV A,@R0SUBB A,@R1JNZ NO_SAME ;非0就转移不相等就转移INC R0INC R1MOV A,@R0SUBB A,@R1JNZ NO_SAMEINC R0INC R1MOV A,@R0SUBB A,@R1JNZ NO_SAMEINC R0INC R1MOV A,@R0SUBB A,@R1JNZ NO_SAMEINC R0INC R1MOV A,@R0SUBB A,@R1JNZ NO_SAMEINC R0INC R1MOV A,@R0SUBB A,@R1JNZ NO_SAMESAME:MOV R0,#50HZ2: MOV @R0,#0F9H ;输出1表示密码正确INC R0CJNE R0,#56H,Z2ACALL DIR;ACALL PP ;如果有这条语句,则显示1后立刻消失SETB 21H.1AJMP FIRSTNO_SAME:MOV R0,#50HY: MOV @R0,#0C0H ;输出0表示密码错误INC R0CJNE R0,#56H,YACALL DIRAJMP FIRSTEND毕业论文题目:基于单片机的电子密码锁的设计专业:通信工程摘要单片机已经在家电领域中得到了广泛的应用,而且在安全密保方面,具有防盗报警功能的电子密码锁逐渐取代了传统的机械密码锁,克服了机械密码锁密码过少的安全性问题。
单片机电子密码锁课程设计
单片机电子密码锁课程设计一、课程目标知识目标:1. 让学生理解单片机的基本原理和功能,掌握电子密码锁的基本工作原理。
2. 使学生掌握电子密码锁设计中涉及的编程知识,如C语言基础、寄存器操作等。
3. 帮助学生了解电子密码锁电路的组成,熟悉相关电子元器件的使用。
技能目标:1. 培养学生运用所学知识设计并实现一个简单的单片机电子密码锁的能力。
2. 提高学生动手实践能力,学会使用编程软件、烧录器和相关调试工具。
3. 培养学生团队协作和问题解决能力,学会分析电子密码锁故障并找出解决办法。
情感态度价值观目标:1. 激发学生对电子制作的兴趣,培养创新意识和动手能力。
2. 培养学生严谨的科学态度,注重实验数据和实验结果的准确性。
3. 引导学生关注单片机技术在日常生活中的应用,提高对科技的认识和热爱。
本课程针对高年级学生,他们在之前的学习中已经具备了一定的电子和编程基础。
因此,课程设计将注重实践操作,以项目为导向,让学生在动手实践中巩固知识,提高技能。
通过本课程的学习,学生将能够独立设计并实现一个具有实用价值的单片机电子密码锁,提升解决实际问题的能力。
二、教学内容1. 单片机基础原理:回顾单片机的组成、工作原理,重点讲解51单片机的内部结构、时钟电路和复位电路。
教材章节:第三章《单片机原理与接口技术》2. C语言编程基础:介绍C语言在单片机编程中的应用,讲解数据类型、运算符、控制语句等基本语法。
教材章节:第四章《单片机C语言编程》3. 电子密码锁原理:讲解电子密码锁的基本工作原理,分析锁体的电路组成和功能。
教材章节:第七章《单片机应用实例》4. 硬件设计:学习并设计电子密码锁的硬件电路,包括键盘输入、显示模块、锁驱动电路等。
教材章节:第五章《单片机接口技术》5. 软件设计:编写电子密码锁的控制程序,实现密码输入、校验、开锁等功能。
教材章节:第四章《单片机C语言编程》6. 系统调试与优化:学习使用调试工具,对电子密码锁系统进行调试和优化。
单片机课程设计-密码锁
单片机课程设计-密码锁11 设计课题任务、功能要求说明及总体方案介绍1.1 设计课题任务设计一个具有特定功能的密码锁。
该密码锁上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
该密码锁具有系统原始密码888888,用户可以设定并存储用户密码,密码输入时应处于保密显示状态,密码输入正确时应显示密码输入正确提示信息,否则,显示密码输入错误提示信息。
1.2 总体方案介绍及工作原理说明(1) 原始密码的设定,此密码是固定在程序存储器ROM中,假设预设的密码为“888888”共6位密码。
(2)密码的输入: 采用按键来完成密码的输入,输入时密码处于显示保密状态,输入六位密码后,自动结束输入,并判断其正确性(3)密码若输入错误,显示输入错误提示信息,密码输入正确后,可以用键盘任意输入数字,若按下第八个按键,则进入修改密码(4)密码修改:可以任意输入“1-7”中的六位数字作为密码,密码输入时处于保密显示状态,六位密码输入结束确认后显示P.。
电源模块报警装置AT89S52复位和振荡下载口单片机电路数码管显独立式键盘示模块图1 设计总框图12 密码锁硬件系统的设计2.1 密码锁硬件系统各模块功能简要介绍此次课程设计是基于单片机控制的电子密码锁,结合主要设计条件,本设计由单片机系统、独立式键盘、LED显示和报警系统组成,系统能完成开锁、错误报警、密码修改功能等功能,设计硬件系统如下:(1)单片机系统:此次课题采用一种是用以AT89S52为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,进行电子密码锁的设计。
此次课题用单片机P1口与键盘相连,做输入口,P0口与显示器段控相连,输入段控码,P2口输入位控码。
(2)独立式键盘接口电路:此次课程设计采用独立式键盘,与P1口相连,键按下则会使该端口变成低电平,单片机读P1口,通过对P1口数据的判断来确定哪一个键按下。
(3)数码管显示模块:此次课程设计采用的是共阴数码管,P0口段控,P2口送位控,八个数码管共用八根段控,由位控决定在哪一位显示。
51单片机密码锁课程设计
51单片机密码锁课程设计一、课程目标知识目标:1. 掌握51单片机的基本原理与编程方法;2. 了解密码锁的工作原理,理解51单片机在密码锁中的应用;3. 学会使用相关电路元件,如按键、显示屏等,实现与51单片机的交互;4. 掌握密码锁程序的设计与调试,学会使用开发工具进行编程。
技能目标:1. 能够运用C语言编写51单片机程序,实现密码锁的基本功能;2. 能够独立设计电路图,连接相关元件,搭建51单片机密码锁的硬件系统;3. 学会使用调试工具,对密码锁程序进行调试,找出并解决问题;4. 提高动手实践能力,培养团队协作和问题解决能力。
情感态度价值观目标:1. 培养学生对电子制作的兴趣和热情,激发创新意识;2. 培养学生严谨、细心的科学态度,提高学生对工程实践的认识;3. 增强学生的自信心和成就感,鼓励学生积极参与科技竞赛和实践活动;4. 培养学生的团队协作精神,提高沟通与表达能力。
课程性质:本课程为实践性课程,结合理论知识,注重培养学生的动手能力和实际问题解决能力。
学生特点:学生具备一定的电子基础知识,对单片机编程有一定了解,但实践经验不足。
教学要求:教师需引导学生从理论到实践,注重培养学生的创新意识和实际操作能力,关注个体差异,因材施教。
通过课程学习,使学生能够独立完成51单片机密码锁的设计与制作。
二、教学内容1. 理论部分:a. 51单片机原理及结构介绍;b. C语言编程基础,重点讲解与51单片机相关的语法和编程技巧;c. 密码锁工作原理及其在51单片机中的应用;d. 介绍相关电路元件的原理及使用方法。
2. 实践部分:a. 搭建51单片机密码锁硬件系统,包括按键输入、显示输出等;b. 编写密码锁程序,实现密码设置、修改、验证等功能;c. 使用调试工具进行程序调试,分析并解决可能出现的问题;d. 优化程序,提高密码锁的稳定性和安全性。
教学大纲:1. 第一周:51单片机原理介绍,C语言编程基础;2. 第二周:密码锁工作原理,电路元件介绍;3. 第三周:搭建硬件系统,编写基础程序;4. 第四周:调试与优化程序,完善密码锁功能;5. 第五周:总结与展示,课程评价。
单片机课程设计密码锁
单片机课程设计密码锁一、课程目标知识目标:1. 理解单片机的基础知识,掌握其基本原理和编程方法;2. 学习并掌握密码锁的原理与设计,能够运用单片机实现密码锁功能;3. 了解并掌握相关传感器和执行器的使用,实现密码锁的输入和输出控制。
技能目标:1. 能够运用所学知识,设计并编写出实现密码锁功能的单片机程序;2. 掌握使用相关调试工具,对单片机程序进行调试和优化;3. 提高学生的动手能力,培养实际操作中解决问题的能力。
情感态度价值观目标:1. 激发学生对单片机及电子制作的兴趣,培养创新意识和实践精神;2. 培养学生团队协作精神,学会与他人共同解决问题;3. 引导学生关注科技发展,了解单片机在现实生活中的应用,增强社会责任感。
课程性质:本课程为实践性较强的课程,旨在通过单片机实现密码锁的设计与制作,让学生在动手实践中掌握单片机知识。
学生特点:学生处于高年级阶段,已具备一定的单片机基础,对实际应用有较高的兴趣。
教学要求:结合学生特点和课程性质,注重实践操作,强调理论知识与实际应用相结合。
通过课程学习,使学生能够独立完成一个具有实际应用价值的单片机项目。
在教学过程中,关注学生的学习进展,及时调整教学策略,确保课程目标的实现。
将目标分解为具体的学习成果,便于后续教学设计和评估。
二、教学内容1. 单片机基础知识回顾:C语言编程基础,单片机工作原理,I/O口编程。
教材章节:第一章单片机基础。
2. 密码锁原理与设计:- 密码锁的组成和工作原理;- 矩阵键盘原理与编程;- 密码比对算法;教材章节:第三章输入输出接口,第六章矩阵键盘。
3. 单片机与外部设备接口:- 传感器与执行器的应用;- 单片机与继电器、电磁锁等执行器的连接;教材章节:第四章传感器与执行器,第五章单片机与外部设备接口。
4. 程序设计与调试:- 程序结构设计;- 程序编写与调试;- 优化程序性能;教材章节:第七章程序设计与调试。
5. 实践操作:- 搭建电路,连接硬件;- 编写程序,实现密码锁功能;- 调试与优化;教材章节:实践操作部分。
单片机密码锁课程设计
单片机密码锁课程设计一、课程目标知识目标:1. 学生能够理解单片机的基本原理,掌握密码锁设计的硬件组成和工作原理。
2. 学生能够运用C语言编写简单的程序,实现密码锁的功能。
3. 学生了解密码锁的安全性,掌握基本的安全防护措施。
技能目标:1. 学生能够独立完成单片机密码锁的硬件连接,具备实际操作能力。
2. 学生能够运用所学知识,编写和调试程序,实现密码锁的开锁和关锁功能。
3. 学生能够通过小组合作,分析问题,解决问题,提高团队协作能力。
情感态度价值观目标:1. 学生培养对单片机及电子制作的兴趣,激发创新精神。
2. 学生树立安全意识,认识到技术在实际应用中的重要性。
3. 学生在团队协作中,学会尊重他人,提高沟通表达能力。
课程性质:本课程为实践性课程,结合理论知识,培养学生的动手操作能力和实际应用能力。
学生特点:学生处于初中阶段,对新鲜事物充满好奇,具备一定的逻辑思维能力,但实践经验不足。
教学要求:教师需注重理论与实践相结合,引导学生主动探究,关注学生的个体差异,提高学生的实践操作能力。
在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。
1. 理论知识:- 单片机原理与结构:介绍单片机的基本组成、工作原理及功能。
- C语言基础:讲解C语言的基本语法、数据类型、运算符、控制结构等。
- 密码锁原理:分析密码锁的硬件组成、工作原理及安全性。
2. 实践操作:- 硬件连接:指导学生完成单片机、键盘、显示模块等硬件的连接。
- 程序编写:教授学生编写密码锁程序,实现开锁、关锁等功能。
- 调试与优化:引导学生分析程序运行过程中出现的问题,并进行调试和优化。
3. 教学大纲:- 第一周:单片机原理与结构学习,C语言基础学习。
- 第二周:密码锁原理学习,讨论密码锁的安全性。
- 第三周:硬件连接,小组合作进行程序编写。
- 第四周:程序调试与优化,总结与反思。
4. 教材章节:- 单片机原理与结构:教材第1章。
- C语言基础:教材第2章。
基于单片机的数字密码锁毕业设计
基于单片机的数字密码锁毕业设计简介本文档介绍了基于单片机的数字密码锁的毕业设计。
数字密码锁是一种常见的电子锁,由一组数字按钮和控制电路组成,用户可以使用预设的数字密码来解锁。
本毕业设计通过使用单片机控制电路,实现了一个简单而可靠的数字密码锁系统。
设计目标本毕业设计的目标是设计并实现一个基于单片机的数字密码锁系统,具体要求如下:1.可以设置和修改数字密码。
2.包含输入数字密码、解锁成功和解锁失败等状态指示。
3.具备密码保护功能,连续3次错误输入将触发报警。
4.低功耗设计,使用电池供电。
系统组成基于单片机的数字密码锁系统由以下几个主要部分组成:1.单片机控制电路:负责控制整个系统的工作。
2.数字按钮组:用于输入密码。
3.显示屏:用于显示状态指示和密码输入。
4.报警器:在密码错误次数达到一定次数后触发警报。
下面将逐一介绍这几个部分的原理和设计。
单片机控制电路本设计中选择了常用的ATmega328P单片机作为控制核心。
ATmega328P是一款功能强大的8位微控制器,具备多个GPIO引脚、I2C接口和EEPROM存储器,适合应用在本数字密码锁系统中。
控制电路主要负责以下几个任务:1.按钮输入检测:通过GPIO引脚读取用户输入的密码。
2.软件逻辑控制:根据用户的输入和预设密码,判断是否解锁成功。
3.状态指示:通过GPIO引脚控制显示屏上的状态指示灯。
数字按钮组数字按钮组由多个数字按钮组成,每个按钮分别对应数字0-9。
用户通过按下不同的按钮来输入密码。
按钮组的原理比较简单,每个按钮与GPIO引脚相连,按下按钮时,相应的GPIO引脚会变为低电平。
显示屏显示屏用于显示数字密码的输入状态和解锁结果。
对于本设计,可以选择使用数码管或者液晶显示屏。
数码管相对简单,通过GPIO引脚控制不同段来显示数字或字符。
而液晶显示屏则需要驱动芯片来实现显示。
报警器报警器用于报警功能。
在用户连续3次输入错误密码后,控制电路会触发报警器,发出声音或者闪烁指示灯来提示用户。
单片机课程设计--密码锁
设计题目:密码锁目录摘要.................................................................................................... - 1 -1 设计课题任务、功能要求说明及总体方案介绍......................... - 2 -1.1设计任务 .. (2)1.2系统结构 (2)1.3系统组成 (2)1.4系统可行性分析 (3)2 硬件电路设计 ................................................................................. -3 -2.1硬件电路的组成及各模块功能说明 (3)3 程序分析及程序设计 ....................................................................... - 5 -3.1流程框图 .. (5)3.2电路原理图 (8)3.3系统板上硬件连线 (8)3.4程序设计内容 (9)3.5主程序清单 (9)4 结语................................................................................................ - 19 -4.1设计课题的设计结论及使用说明 .. (19)4.2设计体会 (19)参考文献.............................................................................................. - 19 -摘要在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。
单片机课程设计―智能密码锁.
湖南工程学院课程设计课程名称单片机原理与应用课题名称智能密码锁设计专业电子信息工程班级0981 班学号200913020109姓名刘维新指导教师汪超、李晓秀、李世军等2012 年5 月18 日湖南工程学院课程设计任务书课程名称单片机原理与应用课题智能密码锁设计专业班级电子信息0981班学生姓名刘维新学号200913020109指导老师汪超、李晓秀、李世军等审批任务书下达日期2012 年 5 月7 日任务完成日期2012 年5 月18 日设计内容与设计要求设计内容:1、密码的设定,此密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。
2、密码的输入:采用两个按键来完成密码的输入,其中一个按键为功能键,另一个按键为数字键。
在密码都已经输入完毕并且确认功能键之后,才能完成密码的输入过程。
然后进入密码的判断比较处理状态并给出相应的处理过程。
3、按键禁止功能:初始化时,允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态是在3次密码输入不正确的情况下发生的。
设计要求:1、设计方案要合理、正确;2、系统硬件设计及焊接制作;3、系统软件设计及调试;4、系统联调;5、写出设计报告。
主要设计条件1、MCS-51单片机实验操作台1台;2、PC机及单片机调试软件;3、单片机应用系统板1套;4、制作工具1套;5、系统设计所需的元器件。
说明书格式1.封面2.课程设计任务书3.目录4.系统总体方案设计5.系统硬件设计6.软件设计(包括流程图7.系统的安装调试说明8、总结9、参考文献10、附录(源程序清单及硬件原理图等;11、课程设计成绩评分表。
进度安排设计时间为两周第一周星期一、上午:布置课题任务,讲课及课题介绍下午:借阅有关资料,总体方案讨论星期二、确定总体设计方案星期三、硬件模块方案设计星期四、软件模块方案设计星期五、设计及调试第二周星期一、设计及调试星期二、设计及调试星期三、总调星期四、写说明书星期五、上午:写说明书,整理资料下午:交设计资料,答辩参考文献[1]、《微型计算机原理及应用》许立梓编机械工业出版社 2002[2]、《微型计算机接口技术及应用》刘乐善编华中理工大学出版社 2000[3]、《计算机硬件技术基础试验教程》邹逢兴编高等教育出版社 2000[4]、《16位微型计算机原理接口及其应用》周佩玲编中国科学技术大学出版社2000[5]、《微型计算机原理与接口技术》吴秀清编中国科学技术出版社 2001[6]、《微型计算机接口技术》邓亚平编清华大学出版社 2001[7]、《单片机原理及及应用》王迎旭编机械工业出版社 2001[8]、《单片机应用程序设计技术》周航慈著北京航空航天大学出版社 2002[9]、《单片机实用技术问答》谢宜仁主编人民邮电出版社 2002第1章单片机系统概述1.1 单片机的介绍随着科技的飞速发展,单片机随之诞生,它被人么运用到生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 设计课题任务、功能要求说明及方案介绍1.1设计课题任务与要求设计一个具有特定功能的密码锁。
该密码锁上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
该密码锁具有系统原始密码888888,用户可以在原始密码输入正确后,即开锁后才可以设定并存储用户密码,当按修改密码键时,显示英文“CODE”,输入的新密码显示具体按下的数字和字母0-9或A-F。
密码锁锁定时,密码输入应处于保密显示状态,显示“-”,密码输入正确时应显示密码输入正确提示信息主人的英文“HOST”,且指示灯亮,否则,显示密码输入错误提示信息:错误的英文字母“FAULT”,当输入错误3次时,蜂鸣器报警,显示小偷的英文“THIEF”,且指示灯亮。
1.2设计课题总体方案介绍及工作原理说明此密码锁主要由单片机芯片AT89S52、4X4矩阵键盘、8位数码管显示电路和复位电路构成,设计课题的系统框图如图 1.1 所示:图 1.1系统框图实现密码锁功能的软件程序存放在AT89S52的ROM中。
2 设计课题硬件系统的设计2.1 设计课题硬件系统各模块功能简要介绍本设计的硬件系统主要采用以下基本模块来实现,单片机最小系统模块,输入模块、输出模块、电源模块(1)单片机最小系统模块:AT89S52单片机芯片;复位电路;晶振电路。
本模块AT89S52系统控制核心,单片机系统复位由按键电平复位电路完成,通过按键S1来控制,单片机通过芯片引脚XTAL1、 XTAL2,外并接石英晶体振荡器和两只电容。
这样就为能为单片机提供频率为12MHz的晶振。
(2)4X4矩阵键盘模块:四条列线接P1.7-P1.4;四行线接P1.3-P1.0 (3)显示模块:本次设计显示为8位,采用两个四位一体数码管(共阳极)作为显示窗口,既可以节约成本又能简化电路。
数码管用8个PNP三极管驱动。
(4)电源模块:直接由PC的USB接口提供。
2.2 各功能模块详细介绍2.2.1 AT89S52介绍(1) 具有8KB可改写的Flash 内部程序存储器,可写/擦1000次;(2) 256字节内部RAM;(3) 32根可编程I/O口;(4) 3个16位定时器/计数器。
(5) 8个中断源;(6) 低功耗空闲和掉电方式。
它的价格便宜,功能强大,能耗低。
很大程度上减少总电路的复杂性,提高了所设计系统的稳定性。
2.2.2 时钟电路时钟电路用于产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。
本次课程设计我们用的是12MHz的晶振与电容并联形成一个稳定的自激振荡器。
电路图如图2.2所示。
图 2.1 时钟电路2.2.3 键盘电路本次设计采用4X4矩阵式键盘嵌在在单片机P1口上,矩阵式键盘电路图2-3:图 2.2 键盘电路2.2.4 复位电路复位电路采用按键复位方式,当按下复位键时,单片机复位,恢复初始状态,各寄存器清零。
当由于程序运行出错或操作错误是系统处于死锁状态时,为摆脱困境,也需要按复位键以重新启动。
RST引脚是单片机复位信号的输入端,复位信号是高电平有效,其有效时间应持续24个振荡周期(即2个机器周期)以上,使用频率为12MHz的晶振,则复位信号持续时间应超过2us才能完成复位操作。
复位电路如下图2.4所示。
图 2.3 复位电路2.2.5 数码管驱动电路与显示电路本次课程设计我们采用的是共阳极的数码管,用三极管与电阻来做驱动。
电路图如下图2.5所示。
图2.4 数码管驱动及显示电路图2.3 设计课题电路原理图、PCB 图、元器件布局图电路原理图、PCB 图、元器件布局图、元件清单见附录。
3 设计课题软件系统的设计3.1 设计课题使用单片机资源的情况选择设计课题使用单片机资源的情况如下:P0口输出数码管段选信号,P2口输出数码管位选信号;40H-45H作为初始密码888888存储单元,60H-65H作为输入密码存储区;50H-55H为查表变址缓存单元,数码管显示内容做成表格供查询;堆栈栈底设置在30H。
3.2 设计课题软件系统各模块功能简要介绍本程序通过以下各子模块程序实现:主程序、数码管显示子程序、定时1ms程序、定时10ms子程序、。
主程序:主要是用于对输入信号的处理、输出信号的控制和对各个功能程序模块的运用及其控制,包括键扫功能,密码输入与修改功能,密码校对功能,报警功能等。
数码管显示子程序:主要是用于对于密码锁不同状态显示不同内容,例如,当待锁状态显示P.当开锁状态显示HOST,当报警状态显示THIEF等。
定时1ms子程序:用于数码管显示延时。
定时10ms子程序:用于键扫去抖动。
3.3 程序设计思路与流程图本密码锁设计采用4X4矩阵式键盘来输入数字密码0-9和字母密码A-F,将输入的密码存入60H-65H,与40H-45H单元的原始密码比较,相等则开锁,不等则显示错误,当3次输入错误就报警。
同时仅开锁状态下用户才可以修改密码。
软件系统流程图:3.1 主程序流程图图 3.2 显示子程序流程图程序见附录4 设计仿真结果及误差分析4.1 设计课题的设计结论及使用说明本设计为基于单片机的密码锁的设计。
设计成功实现了以下功能:(1)本设计用4X4矩阵式键盘输入密码,完成了密码可以为数字0-9和字母A-F组合的要求,并在输入密码时做到了保密处理,即每输入一位密码显示“-”符号。
(2)仅在开锁状态下才能密码修改,为了使用户更容易记忆密码,采用实际密码显示,不再保密。
(3)2个四位一体的共阳数码管做为显示器,它能在锁关显示P.;在锁开时显示开锁者主人的身分,即显示英文HOST;在输入错误后提示错误信息,即显示英文FAULT;在3次输入错误后显示小偷的英文THIEF。
(4)3次输入错误后将进入报警死循环,指示灯全亮,此时4X4键盘任何按键失去作用,即小偷不能关闭警报。
这样的结果与设计要求完全相符,本设计成功完成了设计任务。
本密码锁使用简单,只要稍加注意F,E,D,3按键的双重功能。
4.2 设计课题的仿真结果在 Proteus 中的模拟仿真,系统仿真结果如图4.1-图4.8所示。
实现功能:本设计可调整运行两种工作状态:学号显示状态、密码锁运行状态、。
(1)学号显示状态为老师附加要求,复位键即可进入学号显示状态,在此状态下,按KS1键可以进入密码锁功能。
(2)密码锁状态,在此状态下,密码锁有锁闭,锁开,修改密码,密码错误以及报警四种工作状态图4.1学号显示状态仿真图4.2密码锁锁定状态显示图4.3输入密码保密状态仿真图4.4密码锁开运行状态仿真图4.5修改密码运行状态仿真图4.6修改密码明码运行状态仿真图4.7密码输入错误运行状态仿真图4.8密码锁报警运行状态仿真由仿真效果可以说密码锁设计成功,仿真成功后就可以着手实物的制作。
经实物测试,运行结果与仿真结果一致,甚至效果更逼真。
4.3设计课题的误差分析与调整该密码锁运行结果虽然与仿真结果一致,但运行过程存在很多问题,首先,4X4键盘的灵敏度有待商榷,有时个别键按下时输入2或多个相同密码,增加了密码输入错误次数。
此外,本密码锁虽然符合设计要求,但与实用生活中密码锁的性能相比有很大差距。
比如在密码输入错误时不能后退,即不能擦除已知错误密码,只能让本次输入走向错误的结果。
再如密码的修改只是一次性输入确认,这将很大程度上造成重新设定的密码不是用户想要的密码。
另外密码锁进入死循环后,任何键不起作用,这将防止小偷再套密码,但同时也使在外的主人打不开锁。
由此可见,问题还是很多的,但这些问题都可以解决,比如可以增加退回子程序功能,将错误输入的密码纠正,使本次输入密码正确;另外可以在修改密码时采用2次输入相比较的方法以确保修改的密码为用户想要修改的密码,最后一个问题的解决可以不让程序进入死循环,但仍然一直报警,但小偷将有再套密码的机会。
5 课程设计体会及教学建议5.1 设计体会(1)设计过程最深刻的体会是认识了好多的软件,像Protel99,Proteus以及Keil。
真是让人头疼。
都是从零开始,所以学起来吃力。
(2)有意思的还是硬件设计,就是做电路板,像什么打孔,腐蚀,焊接都干得津津有味,当千心万苦把数码管弄亮了,感觉很高兴。
(3)选题课题时觉得对密码锁有兴趣,但发现很难,好多人都放弃去改课题了,但我兴趣使然,还是一条代码一条代码的敲,花了3多天时间才敲出来。
付出总有收获,不要放弃才好。
5.2 教学建议个人觉得大学这么久,所有老师上课让我觉得课堂有内容的就两个,一个是高一的高数老师,听她课不要费太多心力,耳濡目染。
我觉得吴老师也属于润物细无声那种,只要人去了,听了课,考试挂科是很难的。
不喜欢上单片机实验课,那几乎不是在上课,希望学校能够给单片机实验添点硬件项目,不要老是在敲代码做仿真。
食物能激发人的兴趣,实物也能。
参考文献[1] 李广弟等.单片机基础[M].北京:北京航空航天大学出版社,2007.6[2]马忠梅等.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,2006.11.[3] 曹巧媛.单片机原理及应用[M].北京:电子工业出版社,1997.7.附录附录A 电路原理图附录B PCB图附录 C 元件布局图附录 D 元件清单附录E 程序设计课题:密码锁设计者:周锋ORG 0000HAJMP MAINORG 0050HMAIN: MOV SP,#30HXHXS: MOV R1,#0FEH ;学号显示程序MOV A,R1RR AMOV R1,AMOV P2,AMOV DPTR,#BSMOV R0,#00HMOV A,R0MOVC A,@A+DPTRMOV P0,AZOOP:LCALL DELAY2MOV A,R1RR AMOV P2,AMOV R1,AINC R0MOV A,R0MOVC A,@A+DPTRMOV P0,ACJNE R0,#07H,ZOOPLCALL DELAY2JNB P1.0,KS1 ;由KS1按键转入密码锁程序LJMP XHXSKS1:JB P1.0,LOCKSJMP KS1LOCK: MOV 40H,#08H ; 密码锁程序MOV 41H,#08H ;初始密码888888MOV 42H,#08HMOV 43H,#08HMOV 44H,#08HMOV 45H,#08HFW:MOV 50H,#12H ;密码锁锁定状态,显示字符P.MOV 51H,#10HMOV 52H,#10HMOV 53H,#10HMOV 54H,#10HMOV 55H,#10HMOV 4FH,#00HMOV R3,#00HMOV R6,#01HLOOP1:MOV A,#0FH ;判4X4键盘是否有键按下,即键扫程序MOV P1,AMOV A,P1CJNE A,#0FH,FHLCALL DISPLAYLJMP LOOP1FH:LCALL DELAY1 ;有键按下则延迟10ms去抖动在判有无键按下MOV A,#0FHMOV P1,AMOV A,P1CJNE A,#0FH,KEYLCALL DISPLAYLJMP LOOP1KEY:MOV A,#7FH ;判断具体哪个按键MOV P1,AJNB P1.3,KD1JNB P1.2,KC1JNB P1.1,KB1JNB P1.0,KA1RR AMOV P1,AJNB P1.3,KE1JNB P1.2,K31JNB P1.1,K61JNB P1.0,K91RR AMOV P1,AJNB P1.3,K01JNB P1.2,K21JNB P1.1,K51JNB P1.0,K81RR AMOV P1,AJNB P1.3,KF1JNB P1.2,K11JNB P1.1,K41JNB P1.0,K71KD1:JB P1.3,KD ;判断是否键起LJMP KD1KC1:JB P1.2,KCLJMP KC1KB1:JB P1.1,KBLJMP KB1KA1:JB P1.0,KALJMP KA1KE1:JB P1.3,KELJMP KE1K31:JB P1.2,K3LJMP K31K61:JB P1.1,K6LJMP K61K91:JB P1.0,K9LJMP K91K01:JB P1.3,K0LJMP K01K21:JB P1.2,K2LJMP K21K51:JB P1.1,K5LJMP K51K81:JB P1.0,K8LJMP K81KF1:JB P1.3,KFLJMP KF1K11:JB P1.2,K1LJMP K11K41:JB P1.1,K4LJMP K41K71:JB P1.0,K7LJMP K71KA:MOV R4,#0AH ;键起后将键值,即输入的1位密码保存在R4 LJMP CHANGEKB:MOV R4,#0BHLJMP CHANGEKC:MOV R4,#0CHLJMP CHANGEKD:MOV R4,#0DHLJMP CHANGEKE:MOV R4,#0EHLJMP CHANGEK0:MOV R4,#00HLJMP CHANGEK1:MOV R4,#01HLJMP CHANGEK2:MOV R4,#02HLJMP CHANGEK3:MOV R4,#03HLJMP CHANGEK4:MOV R4,#04HLJMP CHANGEK5:MOV R4,#05HLJMP CHANGEK6:MOV R4,#06HLJMP CHANGEK7:MOV R4,#07HLJMP CHANGEK8:MOV R4,#08HLJMP CHANGEK9:MOV R4,#09HLJMP CHANGEKF:MOV R4,#0FHLJMP CHANGECHANGE: CJNE R6,#01H ,LOOP28 ;判别输入的键值是作为输入密码还是作为修改密码INC R3 ;输入密码MOV A,R3ADD A,#4FHMOV R1,AMOV A,#11HMOV @R1,AMOV A,R3ADD A,#5FHMOV R0,AMOV A,R4MOV @R0,A ;判别是否已输入6位密码CJNE R3,#06H,LOOP29MOV R3,#00HLJMP COMP ;输入6位密码,转入密码校对子程序LOOP29:LJMP LOOP1LOOP28:INC R3 ;修改密码MOV A,R3ADD A,#4FHMOV R1,AMOV @R1,AMOV A,R3ADD A,#3FHMOV R0,AMOV A,R4MOV @R0,ACJNE R3,#06H,LOOP31 ;判别是否已修改6位密码LOOP42:MOV A,#0EFH ;修改完6位密码后按F键确认修改密码,关闭指示灯,并回归到锁定状态,显示字符P.MOV P1,AMOV A,P1JNB P1.3,LOOP40LCALL DISPLAYLJMP LOOP42LOOP40:MOV A,#0EFHMOV P1,AJB P1.3,LOOP41LCALL DISPLAYLJMP LOOP40LOOP41:MOV P3,#11111111BMOV R3,#00HMOV 50H,#12HMOV 51H,#16MOV 52H,#16MOV 53H,#16MOV 54H,#16MOV 55H,#16MOV R6,#01HLJMP LOOP1LOOP31:LJMP LOOP1 ; 没有修改完6位密码,继续扫描键盘修改密码COMP: MOV A,#0EFH ;密码校对子程序,按下F确认键开始校对MOV P1,AMOV A,P1JNB P1.3,LOOP23LCALL DISPLAYLJMP COMPLOOP23:MOV A,#0EFHMOV P1,AJB P1.3,LOOP24LJMP LOOP23LOOP24:MOV A,60HCJNE A,40H,FAULT ;密码错误则转错误子程序CJNE A,41H,FAULTMOV A,62HCJNE A,42H,FAULTMOV A,63HCJNE A,43H,FAULTMOV A,64HCJNE A,44H,FAULTMOV A,65HCJNE A,45H,FAULTMOV P3,#00000010B ;密码正确则指示灯亮,数码管显示“主人”的英文HOST,开锁MOV 50H,#24MOV 51H,#25MOV 52H,#26MOV 53H,#27MOV 54H,#16MOV 55H,#16MOV R3,#00HLOOP25:LCALL DISPLAYMOV A,#0BFH ;密码正确后判别是复位还是修改密码MOV P1,AJNB P1.2,LOOP26JNB P1.3,LOOP70LJMP LOOP25LOOP26:JB P1.2,LOOP30LJMP LOOP26LOOP70:JB P1.3,LOOP60LJMP LOOP70LOOP60:LJMP FW1 ; E按键按下,复位,关指示灯,显示P.LOOP30: MOV R6,#00H ;3键按下进入修改密码功能,数码管显示“密码”英文code MOV 50H,#12MOV 51H,#25MOV 52H,#13MOV 53H,#14LOOP52:LCALL DISPLAYMOV A,#0EFH ;按下F确认键开始修改密码,并清空数码管,进入键扫程序MOV P1,AJNB P1.3,LOOP50LJMP LOOP52LOOP50: JB P1.3,LOOP51LJMP LOOP50LOOP51:MOV 50H,#16MOV 51H,#16MOV 52H,#16MOV 53H,#16LJMP LOOP1FAULT: INC 4FH ;错误次数加1MOV A,4FHCJNE A,#03H,C1 ;判别输入密码错误次数LJMP ALARM ; 满3次转报警子程序C1:MOV 50H,#15 ;不满3次,数码管显示“错误”英文faultMOV 51H,#10MOV 52H,#28MOV 53H,#29MOV 54H,#30MOV 55H,#16MOV R3,#00HLOOP53:LCALL DISPLAYMOV A,#07FH ; 按D键重新输入密码,并清空数码管MOV P1,AMOV A,P1JNB P1.3,LOOP54LJMP LOOP53LOOP54:MOV A,#07FHMOV P1,AJB P1.3,LOOP56LJMP LOOP54LOOP56:MOV 50H,#16MOV 51H,#16MOV 52H,#16MOV 53H,#16MOV 54H,#16MOV 55H,#16LJMP LOOP1FW1:MOV P3,#11111111BLJMP FWALARM: MOV 50H,#19 ;报警子程序,进入死循环,任何按键将不起作用MOV 51H,#20 ;数码管显示“小偷”的英文thief,指示灯全亮MOV 52H,#21MOV 53H,#22MOV 54H,#23MOV 55H,#16MOV A,#00HMOV P3,ALOOP21:LCALL DISPLAYLJMP LOOP21DELAY1: MOV IE,#00H ;延时10ms子程序MOV TMOD,#01HMOV TH0,#0D8HMOV TL0,#0F0HSETB TR0LOOP10:JBC TF0,LOOP11SJMP LOOP10LOOP11:RETDELAY2: MOV IE,#00H ;延时1ms子程序MOV TMOD,#01HMOV TH0,#0FCHMOV TL0,#18HSETB TR0ZOOP1:JBC TF0,ZOOP2AJMP ZOOP1ZOOP2:RETDISPLAY:MOV DPTR,#TAB ;数码管显示子程序DI1: MOV R1,#4FHMOV R2,#0FEHMOV R5,#06HDI0: INC R1MOV A,R2RR AMOV R2,AMOV P2,AMOV A,@R1MOVC A,@A+DPTRMOV P0,ALCALL DELAY2DJNZ R5,DI0RETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8HDB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFHDB 0BFH,0CH,0F8H,89H,0F9H,86H,8EHDB 89H,0C0H,92H,0CEH,0C1H,0C7H,0CEHDB 79H,0A2H,0E3H,22H,0CFHBS: DB 0A1H,0C0H,90H,0C0H,0B0H,0BFH,99H,0B0HEND附录F 实物图。