单片机密码锁实验报告(5400字)

来源:m.ttfanwen.com时间:2017.3.1

单 片 机 系 统

设 计 实 训 报 告

专业: 生产过程自动化 姓名:李某

班级学号:。。。。。。。。。。。 指导教师: 。。。。。。。。

实训期间:。。。。。。。。。。。。。。

内蒙古电子信息技术学院

目录

一.实验目的3

二.实验要求:3

三. 实验基本原理:3

四.实验设计分析 :3

1.设计思想:3

五. 实验要求实现:4

1. 电路设计:4

2.5

3.4x46

6

7

六. 8

........................................................................................... 13

生产过程自动化 2

内蒙古电子信息技术学院

一.实验目的:

1.熟悉单片机定时器的编程方法。

2.灵活运用单片机C语言程序中的字符串、数组、指针。

3.熟悉数码显示、LCM1602液晶显示器、YJD12864液晶显示器的编程方法。

4.熟悉掌握4x4矩阵键盘的C语言编程。

二.实验要求:

1:用4×4矩阵键盘组成0-f数字键及。

2:可以自行设定或删除8位密码,

3:用8,当密密码正确,则显示PASS4:自由发挥其他功能.

5:三.实验基本原理:

0到F还有,输

用88.”,当密若密码正确,,err;模拟密码锁,密码固化到ROM 不

1.

1. 本系统采用单片机AT89S51作为核心元件的一款具有本机开锁,加锁,修改密码和错误2. 报警的电子密码锁

3. 电子密码锁的原理是:从键盘输入一组密码,CPU把该密码和设置密码比较,对则将锁打 开,错则要求重新输入,并记录错误次数,如果三次错误,则被强制锁定并报警。

初步设计思路如下:

1.输入密码用矩形键盘,数字键,字母键。

2.LED数码管显示输入密码,但是只是输出显示符号8 。采用动态扫描输出。

3. 输入密码错误时显示ERR,密码正确时显示PASS。

生产过程自动化 3

内蒙古电子信息技术学院

软件的设计主要包括矩形键盘键值的读取、LED动态扫描输出程序、密码判断

程序。

电子密码锁工作的主要过程是LED数码管显示密码啊。通过键盘输入密

码,按下确认键后判断密码的正确性,正确显示PASS,错误显示ERR。

程序将分为主程序和中断服务子程序。主程序负责键盘键值读取,密码判断

和开锁,中断服务子程序主要是负责LED数码管显示。

根据程序功能,程序主要分为以下几部分:

1.键盘键值读取程序

键盘键值读取程序包括键盘扫描、消除抖动、键译码等内容。按键的识别主

2) LED数码显示程序

LED或字母对应的显示码送到相应的LED用动态刷新的方法,8定的数字显示。正显示数据。

3)密码判断程序

程序中设置6根据读

2.密码显示与开锁

4.

PASS。当用户

ERR。

1.

生产过程自动化

单片机密码锁实验报告

4

内蒙古电子信息技术学院

2.主流程图:

单片机密码锁实验报告

生产过程自动化 5

内蒙古电子信息技术学院

3.4x4键盘行列式键盘原理电路图:

单片机密码锁实验报告

通,利用这种行列式矩阵结构只需要MN×M4x4键盘。键盘扫描时,首先由I/O假若有键按下,那么在I/O

4.显示模块

单片机密码锁实验报告

生产过程自动化 6

内蒙古电子信息技术学院

五.总电路设计如下

生产过程自动化

单片机密码锁实验报告

7

内蒙古电子信息技术学院

六.程序

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换

#define KeyPort P1

sbit LATCH1=P2^2;//定义锁存使能端口 段锁存

sbit LATCH2=P2^3;// 位锁存

示段码值0~F

unsigned char code 的数码管点亮,即位码

unsigned char TempData[8]; //

//可以更改此密码做多组测试

{

bit Flag;

Init_Timer0();

while (1) //主循环

{

num=KeyPro();

if(num!=0xff)

{

if(i==0)

生产过程自动化 8

内蒙古电子信息技术学院

{

for(j=0;j<8;j++)//清屏

TempData[j]=0;

}

if(i<8)

{

temp[i]=dofly_DuanMa[num];//把按键值输入到临时数组中 for(j=0;j<=i;j++) //通过一定顺序把临时数组中 //的值赋值到显示缓冲区,从右往左输入 TempData[7-i+j]=temp[j];

}

i++; //输入数值累加

if(i==9)//正常等于8 //清屏时的按键不做输入值

{

i=0;

Flag=1;//先把比较位置1

for(j=0;j<8;j++)//循环比较8

// //比较输入值和已有密码

for(j=0;j<8;j++)//清屏

TempData[j]=0;

if(Flag)// {

显示"open"

{

TempData[2]=0x50; // "r"

//否则显示"Err"

}

}

}

}

}

/*------------------------------------------------

生产过程自动化 9

内蒙古电子信息技术学院

uS延时函数,含有输入参数 unsigned char t,无返回值

unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使用汇编,大致延时

长度如下 T=tx2+5 uS

------------------------------------------------*/

void DelayUs2x(unsigned char t)

{

while(--t);

}

/*------------------------------------------------

mS延时函数,含有输入参数 unsigned char t,无返回值

unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使用汇编

------------------------------------------------*/

void DelayMs(unsigned char t)

{

while(t--)

{

//大致延时1mS

DelayUs2x(245);

DelayUs2x(245);

}

}

输入参数 2表示从第三个数码管开始显示 如输入0

Num99两位数值则该值输入2

{

DataPort=0; //清空数据,防止有交替重影

LATCH1=1; //段锁存

LATCH1=0;

keyPort=dofly_WeiMa[i+FirstBit]; //取位码

LATCH2=1; //位锁存

LATCH2=0;

DataPort=TempData[i]; //取显示数据,段码

生产过程自动化 10

内蒙古电子信息技术学院

LATCH1=1; //段锁存

LATCH1=0;

i++;

if(i==Num)

i=0;

}

/*------------------------------------------------

定时器初始化子程序

------------------------------------------------*/

void Init_Timer0(void)

{

TMOD |= 0x01; //使用模式1,16位定时器,使用"|"影响

//TH0=0x00; //给定初值

//TL0=0x00;

EA=1; //总中断打开

ET0=1; //定时器中断打开

TR0=1; //}

{

// 2ms

// 调用数码管扫描

}

按键扫描函数,返回扫描键值

------------------------------------------------*/

unsigned char KeyScan(void) //键盘扫描函数,使用行列反转扫描法

{

unsigned char cord_h,cord_l;//行列值中间变量

KeyPort=0x0f; //行线输出全为0

cord_h=KeyPort&0x0f; //读入列线值

if(cord_h!=0x0f) //先检测有无按键按下

{

生产过程自动化 11

内蒙古电子信息技术学院

DelayMs(10); //去抖

if((KeyPort&0x0f)!=0x0f)

{

cord_h=KeyPort&0x0f; //读入列线值

KeyPort=cord_h|0xf0; //输出当前列线值

cord_l=KeyPort&0xf0; //读入行线值

while((KeyPort&0xf0)!=0xf0);//等待松开并输出

return(cord_h+cord_l);//键盘最后组合码值

}

}return(0xff); //返回该值

}

/*------------------------------------------------

按键值处理函数,返回扫键值

------------------------------------------------*/

unsigned char KeyPro(void)

{

switch(KeyScan())

{

case 0x7e:return 0;break;//0 case 0x7d:return 1;break;//1

case 0x7b:return 2;break;//2

case 0xe7:return 15;break;//f

default:return 0xff;break;

}

}

生产过程自动化 12

内蒙古电子信息技术学院

七.实验心得

在科技高度发展的今天,计算机在人们之中的作用越来越突出。而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。

上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、充分的实际上机操作才能完成。

学习c程序设计语言除了课堂讲授以外,上机时间。因为学时所限,效地利用课程上机实验的机会,续学习打下一个良好的基础。内容、下几个方面:

1

听起来十分枯燥无味,也不容易记住,c语言这个工具解决实际问题,又必须c语言的语法规定。对于一些内容自己认为但上机实践中会发现原来理解的偏差,这是由于大部分学生是

学习c而是利用学到的知识编写c语言程序,解决实际问题。即把c语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。

通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去"掩盖"程序中的错误,而不是尽可能

生产过程自动化 13

内蒙古电子信息技术学院

多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。

2.熟悉程序开发环境、学习计算机系统的操作方法

一个c语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。所谓"环境"就是所用的计算机系统硬件、软件条件,只有学会使用这c语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,环境时就会触类旁通,很快掌握新系统的使用。 3.学习上机调试程序

完成程序的编写,运行时可能不断出现麻烦。语法错误,也能够顺利运行,是非常重要的。调试高手一眼就看出错误所在。

了解一些关于c语言的知识,理解巩固c同时它让我知

生产过程自动化 14

内蒙古电子信息技术学院

生产过程自动化 15


第二篇:单片机密码锁程序 5700字

班级:08电子 学号:27 姓名:吴文静

任务三:多功能密码锁

一、任务目标

二、硬件连接

P0----数码管段码

P2----数码管位码

P1----行列式键盘

P3.0--锁闭LED P3.1--锁开LED

P3.2--设置状态LED P3.3--报警状态LED P3.4--错误状态LED

三、存储单元分配

30H--35H 显示缓冲区

41H--45H 输入暂存区

50H--55H 原始密码存储单元

36H 临时单元,存储位码内容

37H、39H 在按键子程序中用于内外循环计数

38H 按键子程序存放查表后得到的编码

3AH 临时单元,存放逐行开的编码

3BH 密码错误次数计数器

40H 在按键子程序中存放键盘的值

R0 在显示子程序中作显示缓冲区的指针

R2 数字键输入次数计数器

R4 在中断中作计数器

R5、R6 延时子程序循环计数器

R7 显示子程序六个数码管逐个显示计数器

20H.0=1 密码正确标志位

20H.1=1 设置键按下标志位

20H.2=1 当前输入的是新密码标志位

20H.3=1 密码三次错误报警开启标志位

四、任务要求及源程序

1.任务要求

密码锁功能:数码管初始显示6个横线,设置原始密码为123456。输入原始密码。密码错误,错误指示灯亮,输入3次错误,报警指示灯亮,定时10秒,10秒内任何按键都不起作用。密码正确,锁开,处于开门状态,此时设置键有效,数字键输入无效,关门键也有效。

若要修改密码,只能在开门状态,设置键按下,输入一次旧密码。若旧密码输入错误,此时旧密码输入错误次数加上开锁密码错误次数等于3次,报警定时,10秒后恢复锁关状态,锁的密码为新设置的密码若未设置新密码,则为旧密码。旧密码正确后才可输入新密码,新密码输入后按下确定键,退出设置状态,返回到开门状态。确定键在输入6个数以后才有效,退格键在有数字时才有效。

0-9号按键作为数字键,最多输入六次; 10号-退格键; 11号-确定键; 12号-设置键; 13号-关门键; 14号-退出设置状态键。 2.源程序 ;主程序 ORG 0000H AJMP START ORG 000BH AJMP DIST ORG 0030H

MOV TMOD, #01H

MOV TH0, #3CH

第 2 页 共 11 页 START:

LOOP: DISP: LOOP1:

MOV TL0, #0B0H SETB EA SETB ET0 ACALL XSCSH ;显示缓冲区初始化显示6个横线 ACALL CSH MOV 3BH, #0 MOV 50H, #1 MOV 51H ,#2 MOV 52H, #3 MOV 53H, #4 MOV 54H, #5 MOV 55H,#6 ;原始密码设置为123456 ACALL DISP ACALL AJ AJMP LOOP ;显示子程序 MOV R7, #6 MOV R0, #30H MOV DPTR, #TAB MOV 36H, #01H MOV A,@R0 MOVC A, @A+DPTR MOV P0, A MOV P2, 36H ACALL DELAY INC R0 MOV A, 36H RL A MOV 36H,A DJNZ R7,LOOP1 RET

;按键判断子程序,4*4循环

AJ:

MOV P1, #0F0H MOV A, P1 CJNE A, #0F0H, D1 AJMP D16

ACALL DISP

MOV A, P1

CJNE A, #0F0H, D2

AJMP D16

MOV 3AH, #0FEH

MOV 40H, #0

MOV DPTR, #DAB

MOV 39H, #4

MOV 37H, #4

MOV P1, 3AH

MOV A, 40H

MOVC A, @A+DPTR

MOV 38H, A

MOV A, P1

CJNE A, 38H, D5

AJMP D14

INC 40H

DJNZ 37H, D4

MOV A, 3AH

RL A

MOV 3AH, A

DJNZ 39H, D3

SJMP D16

ACALL PD

ACALL DISP

第 4 页 共 11 页 D1: D2: D3: D4: D5: D14: D15:

MOV P1, #0F0H MOV A,P1 CJNE A, #0F0H, D15

RET

;按键功能子程序 D16:

PD:

MOV A, 40H CJNE A,#0,F1 ACALL DIN AJMP F16

CJNE A, #1, F2

ACALL DIN

AJMP F16

CJNE A, #2, F3

ACALL DIN

AJMP F16

CJNE A, #3, F4

ACALL DIN

AJMP F16

CJNE A, #4, F5

ACALL DIN

AJMP F16

CJNE A, #5, F6

ACALL DIN

AJMP F16

CJNE A, #6, F7

ACALL DIN

AJMP F16

CJNE A, #7,F8

ACALL DIN

AJMP F16

CJNE A, #8, F9

第 5 页 共 11 页 F1: F2: F3: F4: F5: F6: F7: F8:

ACALL DIN AJMP F16

CJNE A, #9, F10

ACALL DIN

AJMP F16

CJNE A, #10, F11

ACALL BACK

AJMP F16

CJNE A, #11, F12

ACALL ENTER

AJMP F16

CJNE A, #12, F13

ACALL SZ

AJMP F16

CJNE A, #13, F14

ACALL CLOSE

AJMP F16

CJNE A, #14, F15

ACALL TSZ

AJMP F16

CJNE A,#15,F16

RET

;数字键输入子程序 ;定时开始,按键不起作用 ;已输入六个数,数字键无效 F9: F10: F11: F12: F13: F14: F15: F16: DIN:

JB 20H.3, F21 CJNE R2, #6, F20 AJMP F21

INC R2 F20:

;输入数字个数+1 MOV 35H, 34H MOV 34H, 33H MOV 33H, 32H MOV 32H, 31H

MOV 31H, 30H MOV 30H, 40H RET

;退格键子程序

;定时开始,按键不起作用 ;有数字输入,按键起作用

F21:

BACK: JB 20H.3, L1

CJNE R2, #0, L0 AJMP L1 DEC R2 MOV 30H, 31H MOV 31H, 32H MOV 32H, 33H MOV 33H, 34H MOV 34H, 35H

L0:

MOV 35H, #17 RET

L1:

;确定键输入子程序 ;定时开始,按键不起作用 ;数字输入不满6个,按键无效 ;可以重新输入数字 ;输入数字存入输入暂存区

ENTER: JB 20H.3, L5

CJNE R2, #6, L5 MOV R2, #0

MOV 41H, 30H MOV 42H, 31H MOV 43H, 32H MOV 44H, 33H MOV 45H, 34H MOV 46H, 35H ACALL XSCSH JNB 20H.2,D6 ACALL XMM AJMP L5 MOV A, 41H

;判断当前是否为新密码输入

D6:

;输入暂存区与密码比较

CJNE A, 50H, L3

MOV A, 42H CJNE A,51H,L3 MOV A, 43H

CJNE A, 52H, L3 MOV A, 44H CJNE A, 53H, L3 MOV A, 45H CJNE A, 54H, L3 MOV A, 46H CJNE A, 55H, L3 MOV R2, #6 CLR P3.1 SETB P3.0 SETB P3.4 SETB 20H.0 JB 20H.1, L2 CLR 20H.2 AJMP L5 SETB 20H.2

;输入新密码状态标志位 ;允许输入数字

;密码正确标志位 ;判断设置键是否按下

;锁开状态,不允许输入数字

L2:

MOV R2, #0 AJMP L5 INC 3BH

L3:

;密码错误次数+1

MOV A, 3BH CJNE A, #3, L4 CLR P3.3 SETB TR0 SETB 20H.3 AJMP L5 CLR P3.5 CLR P3.4 RET

;判断密码输入错误几次

;密码输入错误3次,启动定时 ;定时开始标志位

L4:

L5:

;关门键子程序

;定时开始,按键不起作用 ;该按键只在开门状态有效

CLOSE: JB 20H.3, L6

JNB 20H.0, L6 ACALL XSCSH ACALL CSH RET

L6:

;设置键输入子程序 ;定时开始,按键不起作用 ;该按键只在开门状态有效 ;设置键有效标志位 ;按下设置键,允许数字输入

SZ:

JB 20H.3, L7

JNB 20H.0, L7 SETB 20H.1 MOV R2, #0 CLR P3.2 RET

L7:

;退出设置键子程序 ;定时开始,按键不起作用 ;该按键在设置状态有效

TSZ:

JB 20H.3, L8

JNB 20H.1, L8 ACALL XSCSH SETB P3.2 SETB P3.3 SETB P3.4 CLR 20H.1 MOV R2, #6 RET

;退出设置状态

;回到开门状态,不允许数字输入

L8:

;新密码输入子程序

XMM: MOV 50H, 41H

MOV 51H, 42H MOV 52H, 43H

MOV 53H, 44H MOV 54H, 45H MOV 55H, 46H ; CLR P3.1 SETB P3.0 SETB P3.2 CLR 20H.2 MOV R2, #6 ;开门状态,不允许数字输入 RET ;显示缓冲区初始化子程序

XSCSH: MOV 30H, #17

MOV 31H, #17 MOV 32H, #17 MOV 33H, #17 MOV 34H, #17 MOV 35H, #17 RET ;密码锁基本功能初始化

CSH:

MOV R2, #0 MOV R4, #200 CLR 20H.0 CLR 20H.1 CLR 20H.2 CLR 20H.3 CLR P3.0 SETB P3.1 SETB P3.2 SETB P3.3 SETB P3.4 RET

;中断子程序

DIST:

MOV TH0, #3CH MOV TL0, #0B0H DJNZ R4, L9 ACALL XSCSH ACALL CSH CLR TR0

RETI ;关中断 ;初值重装 L9:

;延时子程序,延时2ms

DELAY: MOV R6, #5

D17:

D18:

TAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH,

DB 77H, 7CH, 39H, 5EH, 79H, 71H, 08H, 40H, 0BFH, 086H,

DB 0DBH, 0CFH, 0E6H, 0EDH, 0FDH, 087H, 0FFH, 0EFH

DB 0EEH, 0DEH, 0BEH, 7EH, 0EDH, 0DDH, 0BDH, 7DH,

DB 0EBH, 0DBH, 0BBH, 7BH, 0E7H, 0D7H, 0B7H, 77H

END MOV R5, #200 DJNZ R5, D18 DJNZ R6, D17 RET DAB:

更多类似范文
┣ 密码锁PLC 1000字
┣ 计算机 密码学 实验一:维吉尼亚密码算法 800字
┣ 电子密码锁单片机课程设计 8100字
┣ 更多密码锁实验报告
┗ 搜索类似范文