8位密码锁单片机课程设计
- 格式:doc
- 大小:268.00 KB
- 文档页数:19
.专业:电子信息工程一、设计内容:数字密码锁二、设计要求:(一)基本要求1、利用889C51作为控制器组成一数字型码锁。
2、开锁动作用LED管模拟。
3、开锁代码由小健盘输入,且同时有4位LED显示器上显出来,当你输入的四位数字与原存的密码完全相同时,则将锁打开。
4、密码可由小键盘输入进行改写。
5、修改密码,必须在30秒内完成,否则将发出报警号。
6、锁门与否,可由一开关控制,每次按Enter键时,89C51根据此开关的状态决定锁住或打开。
(二)扩展功能1、键盘增加退格键、清除键和复位键。
2、三次输入密码不正确,系统将锁定,输入代码将无效。
按复位键后,将解除锁定。
三、设计所需硬件及结构图:(一)硬件:AT69C52,8255A,MAX232,2803,按钮键盘,电容,排阻若干(二)硬件结构图:6位数码管AT89C52 8255A小键盘发光二极管四、程序流程图五、软件软程序代码PA EQU 7CFFH;A 口地址PB EQU 7DFFH;B 口地址CTR EQU 7FFFH;控制字地址YR1 EQU 30H;密码存储单元YR2 EQU 31H;YR3 EQU 32HYR4 EQU 33HNEW1 EQU 45H;用户输入密码存储单元NEW2 EQU 46HNEW3 EQU 47HNEW4 EQU 48HLOCK_TIMES EQU 35HORG 0000HJMP START_00ORG 0100H ;START_00:MOV YR1,#1H;初始密码为1234 MOV YR2,#2HMOV YR3,#3HCLR 02HMOV YR4,#4H;修改MAIN:MOV IE,#86H;开定时器0和外部中断1的中断SETB IT1LCALL KEYJB 02H,START;已经开始计时就不要再开始了MOV 50H,#08H;若是12mhz来算则R7应为0FFH,R3应为0F4HMOV 51H,#06HMOV TMOD,#01H;定时器定时工作方式1MOV TH0,#15HMOV TL0,#0AHSETB 02H;开始计时标志置1SJMP STARTSTART:MOV DPTR,#CTRMOV A,#80HMOVX @DPTR,ACLR PSW.1 ;PSW.1是是否进入重设密码功能的标志位,为0则没进入;反之则进入。
设计题目:电子密码锁功能实现:八位密码锁具有设置密码,然后输入密码验证的功能:1)设置密码成功后会点亮LED灯提示;2)录放音模块;3)输入密码错误则有语音提示;4)输错3次后LED灯闪烁提示,输错5次以上就禁止输入,且LED灯闪的频率加快;5)输入正确后播放音乐提示;6)设置密码和输入密码时不小心按错可以使用清除键;7)密码破解后可以选择重置密码或继续使用原密码;实现方法:状态机设置密码----输入密码----判断密码是否正确----错误继续回到输入密码状态-----正确则选择是回到输入密码状态或者重置密码设计源程序:#include <mega16.h>flash unsigned char led_7[13]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x40}; // 字型码,后3位为“A”,“b”,“-”flash unsigned char position[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; unsigned char dis_buff[8]; // 显示缓冲区,存放要显示的8个字符的段码值unsigned char key_disbuff[8];unsigned char key_stime_counter,key_stime_ok1,sign;unsigned char posit;bit key_stime_ok;unsigned char count=0;flash unsigned int t[9]={0,956,865,759,716,638,568,506,470};flash unsigned char d[9]={0,105,116,132,140,157,176,198,209};#define Max_note 32flash unsigned char music[Max_note]={1,2,1,2,1,2,3,2,5,2,5,2,5,4,5,2,6,2,6,2,6,2,8,2,5,4};unsigned char note_n;unsigned intint_n;bit play_on;interrupt [TIM1_COMPA]void timer1_compa_isr(void) //音乐播放中断{if (!play_on){note_n=0;int_n=1;play_on=1;}else{if (--int_n==0){TCCR1B=0x08;if(note_n<Max_note){OCR1A=t[music[note_n]];int_n=d[music[note_n]];note_n++;int_n= int_n * music[note_n];note_n++;TCCR1B=0x09;}elseplay_on=0;}}}void display (void) // 8位LED数码管动态扫描函数{PORTC = 0xff;PORTA = led_7[dis_buff[posit]];PORTC = position[posit];if (++posit >=8 ) posit = 0;}#define No_key255#define K1_1 1#define K1_2 2#define K1_3 3#define K2_1 4#define K2_2 5#define K2_3 6#define K3_1 7#define K3_2 8#define K3_3 9#define K4_1 10#define K4_2 0#define K4_3 11#define Key_mask 0b00001110unsigned char read_keyboard() //键盘输入子程序{static unsigned char key_state = 0, key_value, key_line;unsigned char key_return = No_key,i;switch (key_state){case 0:key_line = 0b00010000;for (i=1; i<=4; i++) // 扫描键盘{PORTB = ~key_line; // 输出行线电平PORTB = ~key_line; // 必须送2次!!!(注1)key_value = Key_mask& PINB; // 读列电平if (key_value == Key_mask)key_line<<= 1; // 没有按键,继续扫描else{key_state++; // 有按键,停止扫描break; // 转消抖确认状态}}break;case 1:if (key_value == (Key_mask& PINB)) // 再次读列电平,{switch (key_line | key_value) // 与状态0的相同,确认按键{ // 键盘编码,返回编码值case 0b00011100:key_return = K1_1;break;case 0b00011010:key_return = K1_2;break;case 0b00010110:key_return = K1_3;break;case 0b00101100:key_return = K2_1;break;case 0b00101010:key_return = K2_2;break;case 0b00100110:key_return = K2_3;break;case 0b01001100:key_return = K3_1;break;case 0b01001010:key_return = K3_2;break;case 0b01000110:key_return = K3_3;break;case 0b10001100:key_return = K4_1;break;case 0b10001010:key_return = K4_2;break;case 0b10000110:key_return = K4_3;break}key_state++; // 转入等待按键释放状态}elsekey_state--; // 两次列电平不同返回状态0,(消抖处理)break;case 2: // 等待按键释放状态PORTB = 0b00001110; // 行线全部输出低电平PORTB = 0b00001110; // 重复送一次if ( (Key_mask& PINB) == Key_mask)key_state=0; // 列线全部为高电平返回状态0 break;}return key_return;}#define keystate_0 0#define keystate_1 1#define keystate_2 2#define keystate_3 3#define keystate_4 4#define keystate_5 5// Timer 0 比较匹配中断服务,2ms定时interrupt [TIM0_COMP] void timer0_comp_isr(void){unsigned char i, key_temp;static unsigned char m=0,n=0;display(); // 调用LED扫描显示if (++key_stime_counter>=5){key_stime_counter = 0;key_stime_ok = 1; // 10ms到}if (++key_stime_counter>=50){key_stime_counter = 0;key_stime_ok1 = 1; // 100ms到}if (key_stime_ok){key_stime_ok = 0; // 10ms到key_temp = read_keyboard (); // 调用键盘接口函数读键盘if (key_temp != No_key){ // 有按键按下switch(m){case keystate_0:if(key_temp==10) m=keystate_1; //状态0:按下设置键开始设置密码else m=0;break;case keystate_1: //状态1:按下0~9之间的数字设置密码if(key_temp!=11&&n<8&&key_temp!=10){for (i=0; i<7; i++){dis_buff[i] = dis_buff[i+1];} // LED显示左移一位dis_buff[7] = key_temp; // 最右显示新按下键的键值n++;}else if(key_temp==11) //按下确认键,设置密码成功,PD.4输出0,LED灯点亮{PORTD=0x60;n=0; //n回到初始值0for (i=0; i<8 ;i++){key_disbuff[i]=dis_buff[i];} //锁存密码值for (i=0; i<8 ;i++){dis_buff[i]= 12;} //数码管显示回到初始值m=keystate_2;break;}else m=keystate_1;break;case keystate_2:if(key_temp==10){PORTD=0x70;m=keystate_3;}else m=keystate_2;break;case keystate_3: // 输入密码if(key_temp!=11&&n<8&&key_temp!=10){ if ( key_temp==0 ){{for (i=7; i>0; i--)dis_buff[i] = dis_buff[i-1]; //清除键}dis_buff[0] = 12;}else{for (i=0; i<7; i++){dis_buff[i] = dis_buff[i+1];} // LED显示左移一位dis_buff[7] = key_temp;}}else if(key_temp==11) //按下确认键确认输入的密码{for (i=0; i<8 ;i++) //判断输入密码是否成功{if(key_disbuff[i]!=dis_buff[i]){PORTD=0xcf; //输入密码错误则语音提示密码错误TCCR1B=0x08;n=0;count++;if(count>=5){sign=2;}if(count>=3&&count<5){sign=1;}for (i=0; i<8 ;i++) //数码管显示回到初始值{dis_buff[i]= 12;}m=keystate_3; //重新回到输入密码状态PORTD=0x1f;}}if(i==8){sign=0;PORTD.6=1;count=0;for (i=0; i<8 ;i++){dis_buff[i]= 12;} //数码管显示回到初始值play_on=0; //若密码正确,则启动音乐播放if(!play_on){TCCR1B=0x09;}if(key_temp==11){m=keystate_0;break;} //重新回到设置密码状态else if(key_temp==10){m=keystate_3; //重新回到输入密码状态break;}}}}}}}void main(void){unsigned char i; //初始化TCCR1A=0x40;TCCR1B=0x08;TIMSK=0x12;GICR|=0x80;MCUCR=0x08;MCUCSR=0x00;GIFR=0x80;PORTD=0x7f;DDRD=0xf0;PORTA = 0x00; // 显示控制I/O端口初始化DDRA = 0xFF;PORTC = 0xFF;DDRC = 0xFF;PORTB = 0xFF; // 键盘接口初始化DDRB = 0xF0; // PD2、PD1、PD0列线,输入方式,上拉有效// T/C0 初始化TCCR0=0x0B; // 内部时钟,64分频(4M/64=62.5KHz),CTC模式TCNT0=0x00;OCR0=0x20; // OCR0 = 0x7C(124),(124+1)/62.5=2ms//TIMSK=0x02; // 允许T/C0比较匹配中断for (i=0; i<8 ;i++){dis_buff[i]= 12;} // LED初始显示8个“-”#asm("sei") // 开放全局中断while (1){if(key_stime_ok1) // 100ms到{if(sign==1){key_stime_ok1=0;PORTD.6=~PORTD.6;}}if(key_stime_ok) // 10ms到{if(sign==2){PORTD.6=~PORTD.6;for (i=0; i<8 ;i++){dis_buff[i]= 12;} // 禁止输入}}};}。
摘要:本系统由单片机系统、矩阵键盘、LED 显示和报警系统组成。
系统能完成开锁、超时报警、密码错误报警基本的密码锁的功能。
除上述基本的密码锁功能外,还具有LED显示功能,本系统成本低廉,功能实用。
关键词:AT89C51,LCD, 电子密码锁,矩阵键盘,报警器第1章系统概述1系统功能随着科技的发展和人们生活水平的提高,如何实现保密防盗这一问题变的尤其的突出,传统的机械锁由于其构造的简单,失效的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲昵。
AT89C51实现一基于单片机的电子密码锁的设计,其主要具有如下功能:(1)设置8位密码,密码通过键盘输入,若密码正确,则将锁打开。
(2)状态指示、报警、LCD显示。
密码输入正确时有very good!,welcome to you ^_^等提示信息、密码输入错误数码显示器会出现错误提示,显示“the code is flase!”电子密码锁的设计主要由三部分组成:键盘接口电路、密码锁的控制电路、输出LCD显示电路。
报警蜂鸣器等。
第2章硬件电路方案(系统框图)论证分析设计的要求是要实现密码固定在ROM中,设计的基本思路是,将密码固化,放入表中,在得到按键后,查表比较密码,如果正确,显示”very good!, welcome to you ^_^ ”提示,如果密码错误,打开报警,同时屏幕闪烁以提示密码错误“the code is flase!”。
下图2-1是电子密码锁的总体框架图:电路分为五个部分,显示,键盘输入,报警输出等。
2.1单片机系统:此次课题采用一种是用以80C51为核心的单片机控制方案。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,进行电子密码锁的设计。
此次课题用单片机P1口与键盘相连,做输入口,P0口与显示器相连,做显示,P2口做显示器扫描。
系统总框图图2—12.2键盘接口电路:此次课程设计采用I/O键盘,与P1口相连,采用扫描法。
电子技术课程设计报告书课题名称 8位数字密码锁姓 名 ***** 学 号 ******* 院、系、部 ******* 专 业 电子信息工程指导教师********年**月 **日※※※※※※※※※ ※※ ※※※※※※※※※※※※※****级电子信息工程专业电子技术课程设计8位数字密码锁一、设计目的(1)熟悉模拟电路的应用与集成电路的引脚排列。
(2)把握经常使用芯片的逻辑功能及利用方式。
(3)熟悉电路仿真软件Multisim 利用。
(4)了解数字密码锁的组成及工作原理。
(5)熟悉数字密码锁的设计。
二、设计思路(1)设计系统复位电路。
(2)设计密码锁电路和比较电路。
(3)设计计数电路及其反馈回路。
(4)设计时序操纵电路和改密电路。
(5)设计数码管电路和指示灯电路。
3、设计进程方案论证图 8位数字密码锁工作原理框图系统的操纵由系统复位电路开始,2次输入原始密码后,数字密码锁被打开;通过系统输入电路、改密电路、锁存电路、能够对密码进行更改和贮存;通过对密码更改次数限制电路(计数电路),能够实现对系统输入电路的锁定;各电路的输入都可在数码管显示或指示灯观看取得;通过其他电路的交织和反馈,整个系统能够整合设计为以上形式。
3.2元器件的选择及参数,各芯片介绍及作用数字显示器数字显示器是一种经常使用的集成显示译码器,在数字系统中,它能直观地将数字显示出来,方便人们直接读取数字及处置结果。
因此,数字显示器电路是许多数字设备系统不可缺少的部份。
数字显示器是驱动显示器件(如荧光数码管、液晶数码管等等)的核心部件,它能够将输入代码转换成相应数字,并在数码显示管上显示出来。
该数码管由七段组成数字字形,既有其相对应的七段数字显示译码器数字。
例如,当该电路的输出为高电平有效时,既输出为1时,对应字段点亮;输出为0时对应字段熄灭。
当其各数段相应地为1时,该译码器能够驱动七段显示器显示O—15总共16个数字的字形。
输入L3、L二、L一、L0接收4位二进制数码,输出Q、Q b、Q c、Q d、Q e、Q f和Q g别离驱动七段显示器a的a、b、c、d、e、f和g段。
基于单片机八位数字密码锁设计报告1研究意义数字密码锁是利用数字密码来开启的锁具,其重复概率仅为十万分之一,有着很高的安全性;而旋芯式锁具使用不够安全。
通过对社会各阶层千余人的调查,百分之百的人对目前身上挂着的串串钥匙无可奈何。
但现在又没有一种锁具可摆脱钥匙的束缚。
都愿意一身轻松没有任何顾虑的出入家门,都愿意用上一种既安全方便又不用钥匙的锁具。
因此,“数字密码锁”产品的市场发展前景极为广阔。
在调查的千余人中有60%的人有丢失钥匙的经历,25%的人有把钥匙反锁在室内的,75%的人居室在三层以上的,36%的人把钥匙忘在工厂的,有8%的人是利用邻居的阳台、窗户跳跃进入自己家来打开被反锁的房门,90%的人或听或看新闻得知有因无法打开房门,而冒险跃窗发生事故非死既伤,给家庭造成麻烦。
精神和肉体的损伤是无法挽回的,为了解决上述各种数据给人们带来的各种烦恼,所以“数字密码锁”,使人们在无忧无虑的环境中生活。
2设计思路本设计电路控制部分由A T89S52单片机做主控制器,4×4矩阵键盘做密码输入控制,RT1602C做显示部分,密码输入提示音由蜂鸣器提示。
其主要功能有密码输入、密码修改、上锁和开锁。
开锁期间用户可通过修改键自行设置密码。
密码位数为6~8位。
此作品为八位密码。
开锁时先输入默认密码后,按下“确认”键检测,密码正确时开锁。
3设计流程及结构图4系统调试4.1电子密码锁启动显示电子密码锁启动时,系统提示:“I MPORT CIPHER”,即提示请输入密码,如图。
输入密码正确,系统提示:CONGRATULATE YOU PENING LOCK !即提示锁已经打开,如图。
4.2密码输入及功能选择用4行*4列小键盘输入8位密码(密码限于8位),如果密码输入正确,则显示CIPHER ERROR然后,输入密码后按“确认”键。
系统提示:CONGRATULATE YOU PENING LOCK !即提示锁已经打开。
大连民族大学《单片机系统课程设计》课程报告2020-2021第一学期学院:机电工程学院专业:自动化班级:学生姓名:任课教师:日期:2020年12月28日目录1 任务分析及性能指标 (5)1.1任务分析 (5)1.2性能指标 (5)2 总体方案设计 (5)2.1硬件方案(包括元件功能介绍) (5)2.2软件方案(模块结构、流程图) (6)3 电路原理图及仿真(附仿真过截图及说明) (7)4 实物功能及效果(附照片) (9)5 程序清单 (11)6 调试及性能分析 (20)6.1硬件连接及分析(附截图及截图说明) (20)6.2软件调试过程及分析(截图) (21)7 总结 (23)8 参考文献 (24)1任务分析及性能指标1.1 任务分析一个电子密码锁,应该能实现以下功能:(1)能够从键盘中输入密码,并相应地在数码管上显示‘8’;(2)能够判断密码是否正确,正确则接通继电器示意开锁过程,同时蜂鸣器响,错误则不同的蜂鸣器声响;(3)能够实现密码的修改;(4)在操作错误达到一定次数后锁定键盘一段时间,并持续蜂鸣。
1.2 性能指标(1)该课程设计采用89C52单片机,其晶振频率设置为12MHZ。
(2)两个四位数码管均为共阴极数码管。
(3)蜂鸣器不同参数,产生不同频率的声音。
(4)P0、P1、P2、P3端口引脚在默认情况下为高电平(1)。
(5)该单片机板子进行位选时,07FH为最低位数码管,对07FH进行右移选中的数码管依次向左。
2总体方案设计2.1 硬件方案(包括元件功能介绍)根据以上的分析,本次电子密码锁的主要设计的重点是以下几个部分:4x4矩阵键盘设计、数码管显示、密码的掉电存储和密码的比较和处理。
当然,除了这几个部分外还有定时器/计数器计时中断、继电器和报警等功能模块。
各元件功能介绍:4x4矩阵键盘:包括数字键和功能键,负责信息的输入。
数码管:显示数字,从视觉判别密码对错;用74LS373供电跳线端子,控制数码管的段码和位码的选取,从而控制八位数码管显示。
基于VDHL的8位数字密码锁设计摘要本文主要介绍运用VDHL技术设计数字密码锁的方法。
本设计采用自上而下的数字系统设计方法,将数字密码锁系统分解为若干子系统,并且进一步细划为若干模块,然后用硬件描述语言VDHL来设计这些模块,并且分别进行软件的仿真。
仿真结果表明:该数字密码锁能够效验8位十进制数密码,且有预置密码(即万能密码),显示输入密码,设置密码,修改密码,输入错误回删,关锁等功能。
该密码锁体积小,功耗低,操作简单,不怕掉电,维护和升级都十分方便,具有非常好的应用前景关键词:QUARTUSⅡ;VDHL; 数字密码锁8-bit digital-based VDHL lock designAbstractThis paper describes the use of digital locks VHDL technical design approach. This design uses top-down design of digital system, the digital code lock system is divided into several subsystems, and further detailed planning for a number of modules, then the hardware description language VDHL to design these modules and the simulation software, respectively. Simulation results show that: the digital code lock to efficacy 8-bit decimal code, and have preset password (that is, universal password), show password, set password, change password, enter the error back to the delete, lock and other functions. The lock small size, low power consumption, simple operation, not afraid of power-down, maintenance and upgrades are very convenient, has a very good prospect of application /Key words: QUARTUS Ⅱ; VHDL; digital code lock目录引言 (6)1.EDA VHDL简介 (7)2.课程设计目的与内容 (8)2.1课程设计目的 (8)2.2课程设计内容 (8)2.3课程设计提示 (8)3.电子密码锁设计过程 (9)3.1设计规划 (9)4.VHDL源程序 (10)4.1密码锁&30秒计时模块 (11)4.2仿真后原理图 (12)4.3动态扫描模块 (13)4.4仿真后原理图 (14)5.系统仿真 (15)5.1连线完成后原理图 (15)5.2波形仿真 (15)5.3仿真结果 (16)6.心得体会 (19)7.参考文献 (20)CONTENTSIntroduction • • • • • • • • • • • • • • • • • • • • • • • • • • • • 61.EDA VHDL Introduction • • • • • • • • • • • • • • • • • • • • • • • 72. The purpose and co ntent of curriculum design • • • • • • • • • • • 82.1 Courses designed to • • • • • • • • • • • • • • • • • • 8 2.2 Curriculum content • • • • • • • • • • • • • • • • • • • • • • • 82.3 Course Design Tips • • • • • • • • • • • • • • • • • • • • • • • 83. Electronic code lock design process • • • • • • • • • • • • • • • 93.1 The design and planning • • • • • • • • • • • • • • • • 94.VHDL source • • • • • • • • • • • • • • • • • • • • • • • • • • • • 10 4.1 & 30 seconds lock timing module • • • • • • • • • • • • • • • 11 4.2 After the simulation schematic • • • • • • • • • • • • • • • • • 12 4.3 Dynamic Scanning Module • • • • • • • • • • • • • • • • • • • • • 13 After 4.4 Simulation diagram • • • • • • • • • • • • • • • • • • • • 145. Sys tem Simulation • • • • • • • • • • • • • • • • • • • • • • • 15 5.1 After the connection diagram • • • • • • • • • • • • • • • • • •• 15 5.2 Waveform Simulation • • • • • • • • • • • • • • • • • • • • • • • 155.3 Simulation results • • • • • • • •• • • •• • • • • • • • • • • • 166. Feelings and experiences • • • • • • • • • • • • • • • • • • • • • 197. References • • • • • • • • • • • • • • • • • • • • • • • • • • •• 20引言随着人们生活水平的提高,如何实现家庭防盜这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性髙,使用灵活性好,安全系数高,受到了广大用户的亲昵,电子密码锁的使用体现了人们消费水平、保安意识和科技水平的提髙,而且避免了携带甚至丢失钥匙的麻烦。
8位密码锁课程设计一、课程目标知识目标:1. 学生能理解8位密码锁的基本原理,掌握二进制编码与密码锁之间的关系。
2. 学生能够运用数学逻辑知识,分析和设计简单的8位密码锁。
3. 学生了解密码学中的基础概念,如加密、解密等。
技能目标:1. 学生通过小组合作,能够动手搭建一个简易的8位密码锁模型,培养动手操作和团队协作能力。
2. 学生能够运用所学的逻辑思维,解决8位密码锁相关的问题,提高问题解决能力。
情感态度价值观目标:1. 学生通过本课程的学习,培养对信息科技的兴趣,激发创新意识和探索精神。
2. 学生在小组合作中,学会尊重他人意见,培养良好的沟通能力和团队协作精神。
3. 学生能够认识到信息安全的重要性,增强网络安全意识,树立正确的价值观。
本课程针对中学生设计,结合信息科技课程的教学要求,注重培养学生的实践操作能力和逻辑思维能力。
课程内容与教材紧密相关,通过实际操作和案例分析,让学生在掌握知识的同时,提高技能和情感态度价值观。
课程目标具体、可衡量,便于后续教学设计和评估。
二、教学内容1. 密码学基础知识:介绍密码学的基本概念,如加密、解密、密码等,结合教材相关章节,让学生了解信息安全的重要性。
2. 二进制编码原理:讲解二进制编码的基础知识,以及与8位密码锁的关联,使学生理解二进制在密码锁中的应用。
3. 8位密码锁原理:分析8位密码锁的工作原理,包括锁具结构、密码设置与识别等,结合教材内容,让学生掌握密码锁的基本构造。
4. 逻辑思维训练:通过案例分析和问题解决,训练学生运用逻辑思维解决8位密码锁相关问题。
5. 实践操作:组织学生分组,指导他们动手搭建简易的8位密码锁模型,培养动手能力和团队协作精神。
教学内容安排和进度:第一课时:密码学基础知识,二进制编码原理。
第二课时:8位密码锁原理,逻辑思维训练。
第三课时:实践操作,分组搭建8位密码锁模型。
教学内容与教材紧密相关,注重科学性和系统性,旨在帮助学生扎实掌握8位密码锁相关知识,提高实践操作能力。
单片机原理及系统课程设计专业:自动化班级:自动化姓名:学号:指导教师:2012 年 7月 1日单片机原理及系统课程设计报告1 引言电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。
现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。
其性能和安全性已大大超过了机械锁。
其在生活的各个方面均有应用,前景十分广阔。
其特点如下:(1)保密性好,编码量多,远远大于弹子锁。
随机开锁成功率几乎为零;(2)密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降;(3)误码输入保护,当输入密码多次错误时,报警系统自动启动;(4)无活动零件,不会磨损,寿命长;(5)使用灵活性好,不像机械锁必须佩带钥匙才能开锁。
2 设计方案及原理2.1 本设计所要实现的目标设计一种单片机控制的密码锁,具有按键有效指示、解码有效指示、控制开锁电平、控制报警、密码修改等功能。
8位十进制密码共一亿组不重复,保密性强。
该密码锁要实现一下功能:(1) 锁的初始状态为“锁合”指示灯亮。
输入初始密码“0、1、2、3、4、5、6、7”,每输入一位,“按键有效”指示灯亮约半秒钟,输完8位按确认键,锁打开,“锁开”指示灯亮;(2) 按“上锁”键,锁又重新上锁,“锁合”指示灯亮;(3) “锁开”状态下,可输入新密码,可重复修改密码;(4) 如果输入密码错误,“错误指示”灯亮约半秒钟。
可重新输入密码;(5) 输入密码错误超过3次,蜂鸣器启动发出报警,同时“错误”指示灯常亮。
2.2 设计思路对于电子密码锁的设计,需要解决几个问题:键盘输入、数码管显示、单片机电路、密码比较、修改密码等。
其中最主要的就是解决掉电保存以及修改密码的问题。
先写一个循环写入8个初始密码到芯片内部EEPROM程序,先下载程序写入初始密码,此时EEPROM已存有初始密码,再把密码锁程序下载到单片机,运行电子密码锁。
单片机课程设计密码锁一、课程目标知识目标:1. 理解单片机的基础知识,掌握其基本原理和编程方法;2. 学习并掌握密码锁的原理与设计,能够运用单片机实现密码锁功能;3. 了解并掌握相关传感器和执行器的使用,实现密码锁的输入和输出控制。
技能目标:1. 能够运用所学知识,设计并编写出实现密码锁功能的单片机程序;2. 掌握使用相关调试工具,对单片机程序进行调试和优化;3. 提高学生的动手能力,培养实际操作中解决问题的能力。
情感态度价值观目标:1. 激发学生对单片机及电子制作的兴趣,培养创新意识和实践精神;2. 培养学生团队协作精神,学会与他人共同解决问题;3. 引导学生关注科技发展,了解单片机在现实生活中的应用,增强社会责任感。
课程性质:本课程为实践性较强的课程,旨在通过单片机实现密码锁的设计与制作,让学生在动手实践中掌握单片机知识。
学生特点:学生处于高年级阶段,已具备一定的单片机基础,对实际应用有较高的兴趣。
教学要求:结合学生特点和课程性质,注重实践操作,强调理论知识与实际应用相结合。
通过课程学习,使学生能够独立完成一个具有实际应用价值的单片机项目。
在教学过程中,关注学生的学习进展,及时调整教学策略,确保课程目标的实现。
将目标分解为具体的学习成果,便于后续教学设计和评估。
二、教学内容1. 单片机基础知识回顾:C语言编程基础,单片机工作原理,I/O口编程。
教材章节:第一章单片机基础。
2. 密码锁原理与设计:- 密码锁的组成和工作原理;- 矩阵键盘原理与编程;- 密码比对算法;教材章节:第三章输入输出接口,第六章矩阵键盘。
3. 单片机与外部设备接口:- 传感器与执行器的应用;- 单片机与继电器、电磁锁等执行器的连接;教材章节:第四章传感器与执行器,第五章单片机与外部设备接口。
4. 程序设计与调试:- 程序结构设计;- 程序编写与调试;- 优化程序性能;教材章节:第七章程序设计与调试。
5. 实践操作:- 搭建电路,连接硬件;- 编写程序,实现密码锁功能;- 调试与优化;教材章节:实践操作部分。
单片机原理及系统课程设计专业:自动化班级:自动化姓名:学号:指导教师:2012 年 7月 1日单片机原理及系统课程设计报告1 引言电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。
现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。
其性能和安全性已大大超过了机械锁。
其在生活的各个方面均有应用,前景十分广阔。
其特点如下:(1)保密性好,编码量多,远远大于弹子锁。
随机开锁成功率几乎为零;(2)密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降;(3)误码输入保护,当输入密码多次错误时,报警系统自动启动;(4)无活动零件,不会磨损,寿命长;(5)使用灵活性好,不像机械锁必须佩带钥匙才能开锁。
2 设计方案及原理2.1 本设计所要实现的目标设计一种单片机控制的密码锁,具有按键有效指示、解码有效指示、控制开锁电平、控制报警、密码修改等功能。
8位十进制密码共一亿组不重复,保密性强。
该密码锁要实现一下功能:(1) 锁的初始状态为“锁合”指示灯亮。
输入初始密码“0、1、2、3、4、5、6、7”,每输入一位,“按键有效”指示灯亮约半秒钟,输完8位按确认键,锁打开,“锁开”指示灯亮;(2) 按“上锁”键,锁又重新上锁,“锁合”指示灯亮;(3) “锁开”状态下,可输入新密码,可重复修改密码;(4) 如果输入密码错误,“错误指示”灯亮约半秒钟。
可重新输入密码;(5) 输入密码错误超过3次,蜂鸣器启动发出报警,同时“错误”指示灯常亮。
2.2 设计思路对于电子密码锁的设计,需要解决几个问题:键盘输入、数码管显示、单片机电路、密码比较、修改密码等。
其中最主要的就是解决掉电保存以及修改密码的问题。
先写一个循环写入8个初始密码到芯片内部EEPROM程序,先下载程序写入初始密码,此时EEPROM已存有初始密码,再把密码锁程序下载到单片机,运行电子密码锁。
- 1 -本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。
其中矩阵键盘用于输入数字密码和进行各种功能的实现。
由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,实际使用的是单片机P1.2和P1.1来控制锁合和锁开LED灯的状态,P0口用于电子显示屏来显示提示语句和密码输入按键。
本系统共有两部分构成,即硬件部分与软件部分。
3 硬件设计硬件部分由键盘输入部分、密码存储部分、复位部分、晶振部分、显示部分、报警部分、开锁部分组成。
3.1 键盘扫描电路键盘接成4*4的矩阵键盘,行线为LD0-LD3分别接P2口的P0.0-P0.3,列线为HD0-HD3分别接P2口的P0.7-P0.4。
当哪一行的有键按下,则相应行的“按键有效”指示灯亮一下,其余行所对应的灯不亮。
P2初始时P2口第四位为低电平,高四位为高电平,当哪一行有键按下,则所对应的行和列对应的口变为低电平,将改为扫描到单片机中。
键盘扫描电路如图3.1所示。
图3.1 键盘扫描电路3.2 晶振电路80C31引脚XTAL1和XTAL2与晶体振荡器及电容C2/C1按图3.2所示方式连接。
晶振、电容C1/C2振荡器,振荡信号频率与晶振频率及电容C1/C2的容量有关,但主要由晶振频率决定,范围在0~33MHz之间,电容C1/C2取值范围在5~30pF之间。
根据实际情况,本设计中采用1MHZ做为系统的外部晶振。
电容取值为30pF。
晶振电路如图3.2所示。
单片机原理及系统课程设计报告图3.2晶振电路3.3 复位电路上电复位电路如图3.3所示。
图3.3 复位电路3.4 显示部分显示电路是利用LM016L系列的LCD显示屏,可以双行显示。
其D0-D7与P0口相接,并且给P0口外接上拉电阻。
LCD显示电路如图3.4所示。
光二级管,当P1.0口输出为高电平时,NPN三极管导通,蜂鸣器发声,“错误”指示灯亮。
报警电路如图3.5所示。
图3.5报警电路3.6 电路总体结构及布局该设计的电路总体结构及布局如图3.6所示。
图3.6电路总体结构及布局4 软件设计软件部分由主程序、初始化程序、LCD显示程序、键盘扫描程序、功能程序、密码设置程序、EEPROM读写程序和延时程序等组成。
总流程图如图4.1所示。
单片机原理及系统课程设计报告图4.1 程序流程图- 5 -具体程序见附录。
5 Proteus 仿真结果当开启开始仿真时,LCD 显示屏会显示“选择A 为设置密码,选择B 为开锁”,同时“锁合”指示灯(红灯D1)闪烁。
开始仿真图如图5.1所示。
U1Q1LS1D1D2R3R1Q2D3R2C1R4R5X1C2C300LCD1R6R7R8R9R10R11R12R13147A 23F56890BD4D5D6D7当按下A 或B 时会提示输入密码,按下每一个键都会输出“*”提示。
其仿真结果如图5.2所示。
U1Q1LS1D1D2R3R1Q2D3R2C1R4R5X1C2C300LCD1R6R7R8R9R10R11R12R13147A 23F56890BD4D5D6D7当输入密码正确时会显示“PASSWORD OK ”字样,同时“错误”指示灯单片机原理及系统课程设计报告- 7 -(绿灯D3亮)。
其仿真图如图5.3所示。
19181918122133144LD0LD1LD2LD3HD3HD2HD1HD0XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115U180C31Q1NPNLS1SPEAKER D1锁合D2错误R3220R1560Q2NPND3锁开R2220C120uR4100R510kX1CRYSTAL C233pC333p00LCD1LM016LR610k R710k R810k R910k R1010k R1110k R1210k R1310k147A 23F56890BD4按键有效D5LED-BLUE D6LED-BLUE D7LED-BLUE当输入密码错误时,LCD 显示屏会显示“PASSWORD ERROR!”。
其仿真图如图5.4所示。
19181918122133144LD0LD1LD2LD3HD3HD2HD1HD0XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115U180C31Q1NPNLS1SPEAKER D1锁合D2错误R3220R1560Q2NPND3锁开R2220C120uR4100R510kX1CRYSTAL C233pC333p00LCD1LM016LR610k R710k R810k R910k R1010k R1110k R1210k R1310k147A 23F56890BD4按键有效D5LED-BLUE D6LED-BLUE D7LED-BLUE6 总结本设计是基于单片机的多功能密码锁设计。
在设计过程中,首先是确立要设计的目标及电子密码锁要实现的功能,该如何通过软硬件来实现。
接下来是根据目标来搭建电路图,设计各功能模块要实现的功能,比如报警,LED 灯的显示控制,4*4矩阵键盘的搭建。
接着就要通过编程来实现各模块功能,比如输入密码,输出显示,键盘扫描程序,存储程序等等。
最后就是调试改错,下载仿真。
本设计最后实现了上面所提到的基本功能外,另外增加了LCD 显示屏,开始时有提示选择,问执行什么功能,到底是设置密码呢还是开锁。
当进入任何一个界面都会出现提示信息,比如‘PASSWORD OK ’,‘INPUT AGAIN!’,‘SET PASSWORD ’等等。
当每次输入时都会显示“*”提示。
当输入密码错误超过三次时就会直接锁死,即使按下功能复位键也不会开锁,这样直接降低了盗窃的几率。
另外,在修改密码时会提示先输入原密码,再输两次新密码,防止用户该密码是按错键,极大地提高了密码锁的可靠性。
本设计输入的密码是8位的,共有一亿组不重复密码,增加了密码的安全性。
本设计还存在一些不足之处,开锁延时一段时间后没有自动上锁功能,应该在用户开锁之后若不操作机器时,延时30秒就自动上锁,减小因疏忽而给用户带来的不便。
参考文献[1] 李华,王思明,张金敏.单片机原理及应用[M].兰州:兰州大学出版社,2001:11-120.单片机原理及系统课程设计报告[2] 顾滨.单片微计算机原理开发与应用[M].北京:高等教育出版社,2000:67-81.[3] 李广弟.单片机基础[M].北京:北京航空航天大学出版社,1994:45-56.- 9 -附录源程序EN BIT P3.0RW BIT P3.1RS BIT P3.2DISPLAY EQU P0SOUNDER BIT P1.1LED BIT P1.2OPEN BIT P1.1RETURNBIT BIT 20H.1ORG 0000HLJMP STARTORG 000BHLJMP INTERMIT_T0ORG 001BHLJMP INTERMIT_T1ORG 0030HSTART: MOV SP,#60HLCALL SYS_INITIAL;主程序MAIN0: LCALL STRAT_DISPLAYMAIN: MOV 52H,#0 ;判断输入错误次数储存地址SETB LEDSETB TR0LCALL KEYCJNE A,#'A',NEXT1LJMP CHANGE_KEYNEXT1: CJNE A,#'B',NEXT2LJMP INPUT_KEYNEXT2: AJMP MAIN;系统初始化SYS_INITIAl:CLR LEDCLR OPENCLR SOUNDERMOV 32H,#'0'MOV 33H,#'1'MOV 34H,#'2'MOV 35H,#'3'MOV 36H,#'4'MOV 37H,#'5'MOV 38H,#'6'MOV r7,#16MOV r0,#40HLOOP: MOV @R0,#10HINC R0单片机原理及系统课程设计报告DJNZ R7,LOOP ;密码键值存放区清零完毕LCALL DELAY0_1SMOV P0,#03HCALL WRITE_INSTRUCTION ;液晶软复位MOV P0,#01HCALL WRITE_INSTRUCTIONMOV P0,#3FHCALL WRITE_INSTRUCTIONMOV P0,#0FHCALL WRITE_INSTRUCTIONMOV P0,#06HCALL WRITE_INSTRUCTION ;液晶初始化完毕MOV R5,#10MOV TMOD,#11HMOV TH0,#3CHMOV TL0,#0B0HSETB EASETB ET0RETINTERMIT_T0:PUSH ACCPUSH PSWMOV TH0,#3CHMOV TL0,#0B0HDJNZ R5,RETURNCPL LEDMOV R5,#10RETURN:POP PSWPOP ACCRETIINTERMIT_T1:PUSH ACCPUSH PSWMOV TH1,#9EHMOV TL1,#58HDJNZ R5,RETURN_T1CPL LEDCPL SOUNDERMOV R5,#10RETURN_T1:POP PSWPOP ACC- 11 -RETIKEY: CALL KS ;键盘扫描JNZ K1JMP KEYK1: CALL DELAYCALL KSJNZ K2JMP KEYK2: CLR TR0CLR LEDMOV R2,#0FEHMOV R6,#00HK3: MOV A,R2MOV P2,AMOV A,P2JB ACC.4,L1MOV A,#0LJMP LKL1: JB ACC.5,L2MOV A,#4LJMP LKL2: JB ACC.6,L3MOV A,#8LJMP LKL3: JB ACC.7,NEXT_KEYMOV A,#12LK: ADD A,R6MOV R6,AK4: CALL KSJNZ K4MOV A,R6MOV DPTR,#TABLE0MOVC A,@A+DPTRMOV 50H,A ;查表取值存入50h,保护键值RETNEXT_KEY:INC R6MOV A,R2JNB ACC.7,KEYRL AMOV R2,AJMP K3KS: MOV P2,#0F0HMOV A,P2XRL A,#0F0HRET;修改密码程序CHANGE_KEY:单片机原理及系统课程设计报告CALL CLEAR_DISPLAYMOV DPTR,#TABLE4CALL INPUT_HINTMOV R0,#40HCALL CHANGEJBC RETURNBIT,CHANGE_KEY ;先输入原密码完毕MOV R4,#8MOV R0,#40HMOV R1,#32HINPUT_COMPERE:MOV A,@R0XRL A,@R1JNZ INPUT_ERRORINC R0INC R1NOPNOPDJNZ R4,INPUT_COMPERE;验证输入密码完毕JMP CHANGE_KEY0INPUT_ERROR:SETB SOUNDERSETB LEDCALL CLEAR_DISPLAYMOV DPTR,#TABLE5CALL INPUT_HINTCALL DELAY1_15SCLR SOUNDERCLR LEDINC 52HMOV A,52HCJNE A,#3,CHANGE_KEYSJMP $;输入密码错误次数超过3次,锁死CHANGE_KEY0:CALL CLEAR_DISPLAYMOV DPTR,#TABLE2CALL INPUT_HINTMOV R0,#40HCALL CHANGEJBC RETURNBIT,CHANGE_KEY ;第一次输入新密码完毕CALL CLEAR_DISPLAYMOV DPTR,#TABLE3CALL INPUT_HINT- 13 -CALL DELAY1_15S ;显示再次输入新密码完毕MOV DPTR,#TABLE4CALL INPUT_HINTMOV R0,#48HCALL CHANGEJBC RETURNBIT,CHANGE_KEY ;第二次输入新密码完毕MOV R4,#7MOV R0,#40HMOV R1,#48HSET_COMPERE:MOV A,@R0XRL A,@R1JNZ SET_ERRORINC R0INC R1DJNZ R4,SET_COMPEREMOV 32H,40HMOV 33H,41HMOV 34H,42HMOV 35H,43HMOV 36H,44HMOV 37H,45HMOV 38H,46H ;存入新密码完毕JMP MAIN0 ;设置新密码成功,返回主程序SET_ERROR:SETB SOUNDERSETB LEDCALL CLEAR_DISPLAYMOV DPTR,#TABLE5CALL INPUT_HINTCALL DELAY1_15SCLR SOUNDERCLR LEDLJMP CHANGE_KEY0 ;设置新密码成功,返回主程序INPUT_KEY: ;输入密码开锁程序CALL CLEAR_DISPLAYMOV DPTR,#TABLE4CALL INPUT_HINTMOV R0,#40HCALL CHANGEJBC RETURNBIT,INPUT_KEY ;设置新密码成功,返回主程序MOV R4,#8MOV R0,#40H单片机原理及系统课程设计报告MOV R1,#32HINPUT_COMPERE0:MOV A,@R0XRL A,@R1JNZ INPUT_ERROR22INC R0INC R1NOPNOPDJNZ R4,INPUT_COMPERE0 ;验证输入密码完毕JMP DISPLAY_RIGHTINPUT_ERROR22:SETB SOUNDERSETB LEDCALL CLEAR_DISPLAYMOV DPTR,#TABLE5CALL INPUT_HINTCALL DELAY1_15SCLR SOUNDERCLR LEDINC 52HMOV A,52HCJNE A,#3,INPUT_KEYSJMP $ ;输入密码错误超过3次,锁死DISPLAY_RIGHT:CALL CLEAR_DISPLAYMOV DPTR,#TABLE6CALL INPUT_HINT ;显示输入密码正确提示完毕SETB OPEN ;开锁NEXT_KEY1:CALL KEYNOPNOPCJNE A,#'F' ,NEXT_KEY1CLR OPEN ;按下关锁键关锁JMP MAIN0 ;返回主程序STRAT_DISPLAY:- 15 -MOV P0,#80HCALL WRITE_INSTRUCTIONMOV DPTR,#TABLE1CALL INPUT_HINTMOV P0,#0C0HCALL WRITE_INSTRUCTIONMOV DPTR,#TABLE11CALL INPUT_HINTRETCLEAR_DISPLAY: ;清屏MOV DISPLAY,#01HCALL WRITE_INSTRUCTIONMOV P0,#06HCALL WRITE_INSTRUCTIONRETINPUT_HINT:MOV R4,#16MOV A,#00HALL_OR_NOT:MOVC A,@A+DPTRMOV DISPLAY,ACALL WRITEDATAINC DPTRCLR ANOPNOPDJNZ R4,ALL_OR_NOTRETCHANGE:MOV R4,#8MOV R1,#0C0HMOV A,R1MOV P0,ACALL WRITE_INSTRUCTIONLOOP1:CALL KEYNOPNOPCJNE A,#'C',NEXT_TOSETB RETURNBITJMP ENDTNEXT_TO:MOV A,50HMOV @R0,AMOV DISPLAY,#'*'CALL WRITEDATA单片机原理及系统课程设计报告INC R1INC R0DJNZ R4,LOOP1ENDT: RETWRITEDATA: ;写数据SETB RSCLR RWCLR ENSETB ENNOPNOPCLR ENSETB ENNOPNOPCLR ENCALL DELAYRETWRITE_INSTRUCTION: ;写指令CLR RSCLR RWCLR ENSETB ENNOPNOPCLR ENCALL DELAYRETDELAY1_15S: ;延时程序PUSH 77HPUSH 72HPUSH 73HMOV R7,#15DEL22S:MOV R3,#0DEL11S:MOV R2,#0DJNZ R2,$DJNZ R3,DEL11SPOP 03HPOP 02HPOP 07H- 17 -RETDELAY0_1S:PUSH 02HPUSH 03HMOV R3,#0DEL21S:MOV R2,#0NOPNOPDJNZ R2,$DJNZ R3,DEL21SPOP 03HPOP 02HRETDELAY:PUSH 07HPUSH 06HMOV R7,#10D1: MOV R6,#248NOPNOPDJNZ R6,$DJNZ R7,D1POP 06HPOP 07HRETTABLE0:DB 'C','B','0','A';DB 'D','9','8','7';DB 'E','6','5','4';DB 'F','3','2','1';TABLE1: DB 'PASSWORD: A SET '; TABLE11: DB ' B OPEN'; TABLE 2: DB 'SET PASSWORD: '; TABLE 3: DB 'INPUT AGAIN! '; TABLE4: DB 'INPUT PASSWROD: '; TABLE5: DB 'PASSWORD ERROR! '; TABLE6: DB 'PASSWORD OK '; END。