• 回答数

    4

  • 浏览数

    138

奇异果香
首页 > 期刊论文 > 单片机密码锁论文外文文献

4个回答 默认排序
  • 默认排序
  • 按时间排序

大大的熨斗

已采纳

;----------------------------------------------; 8051 LCD PASSWORD 4; 8051 ASM USE: KEIL; COPYRIGHT CMY 2003;----------------------------------------------KA EQU 0AH ; 按键定义KB EQU 0BHKC EQU 0CHKD EQU 0DHKE EQU 0EHKF EQU 0FH; VAR DEFINE...................PASS EQU 30H ; 30 31 32 33 34 35 I/P TO CHECKPASSNEW EQU 36H ; 36 37 38 39 3A 3BBUF_KEY EQU 4AH ; 按键数据缓冲区KEY_NO EQU 4BH ; 按键编码CO EQU 4CH ; 计数变量LCDE EQU 4DH ; LCD 延迟变量X EQU 53H ; LCD 显示的地址; USER RAM .....5FH 60H-->SP;----------------------------------------------FKEY EQU ; KEY PRESSEDALF EQU ; ALARM FLAG; I/O DEFINE ......................; LCDRS EQU ; LCD RS 引脚定义RW EQU ; LCD RW 引脚定义EN EQU ; LCD EN 引脚定义 SPK EQU ; 压电蜂鸣器引脚定义REL EQU ; 继电器引脚定义WLED EQU ; 工作指示灯引脚定义;-------------------- ORG 0000H ; 程序代码由地址0000开始 JMP BEGIN;---------------------BEGIN: LCALL INIT_PORT LCALL LED_BL ; LED闪动,表示程序开始执行 LCALL BZ ; 压电喇叭发出一声 LCALL SET_LCD ; LCD初始化 LCALL MLOOP ; 执行主程序 JMP $;-----------------------------------------------------------------MESS: DB " 8051 PASSWORD WITH LCD"PASS0: DB 1,2,3,4;--------------------------------------------; DELAY Xms R5*10 msDELAY: ; 总延迟时间R5*10ms MOV R6,#50D1: MOV R7,#100 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,DELAY RET;---------------------LED_BL: ; 工作指示灯闪烁3次 MOV R4,#6LE1: CPL WLED ; 位反向 MOV R5,#3 ; 延迟30ms LCALL DELAY DJNZ R4, LE1 RET;-------------------------------------------------; KEY PAD: TYPE A ; 按键编码; F E D C; B 3 6 9; A 2 5 8; 0 1 4 7TABLE_DIG: DB 0FH, 0BH, 0AH, 00H DB 0EH, 03H, 02H, 01H DB 0DH, 06H, 05H, 04H DB 0CH, 09H, 08H, 07H;--------------------------------------------------; USE P1; R0 : BUF PT NO USE ; 未使用; R1 : COUNT 1 ; 循环计数1; R2 : COUNT 2 ; 循环计数2; R3 : SCAN SIGNAL ; 循环扫描输出信号; R4 : COUNT KEY_NO ; 按键计数编码;------------------SCAN: MOV R3,#0FEH ; 按键计数编码清除为0 MOV R4,#0 ; KEY NO COUNT MOV R1,#4 ; 循环1执行4次 CLR ; 表示未按键;......................................L1:; SEND OUT SCAN SIGNAL VIA MOV A,R3 MOV P1,A ; 由P1口送出扫描输出信号;..................................; DELAY A WHILE ....... MOV R5,#1 ; 延迟10ms LCALL DELAY; READ I/P DATA FROM MOV A,P1 ; 读取P1数据以便判断是否有按键 ANL A,#0F0H ; 取得高4位值 EX:1110XXXX; CHECK KEY PRESSED ? ; 检测是否按键 MOV R2,#4 ; 循环2执行4次;.................................L2: JB ; 累加器A位4若为1表示没按键 MOV KEY_NO,R4 ; 加载按键编号 SETB ; 按键标志设为1 N1: ; 没按键 INC R4 ; 按键编号加1 RR A ; 累加器向右移动一位,以便检查下一位 DJNZ R2,L2 ; 循环2判断是否继续执行; CHANGE SCAN CODE ; 改变扫描码 EX:XXXX1101 MOV A,R3 ; 加载旧的扫描码 RL A ; 累加器向左移动一位 MOV R3,A DJNZ R1,L1 ; 循环1判断是否继续执行;....................................; SET FKEYBACK: JNB ; 设置是否按键 SETB FKEY ; 若有按键 FKEY=1 RETNO_KEY: CLR FKEY ; 若没按键 FKEY=0 RET;---------------------------------------------------------; SCAN KEY ON AND OFF THEN PASS KEY_NOSCAN_KEY: CLR FKEY ; 清除按键标志 LCALL SCAN ; 执行按键扫描; IF(KEY_ON) WAIT KEY_OFF ; 若有按键等待按键放开来 JB FKEY,WAIT_OFF ; 测试按键标志; NO KEY ON RETURN.... ; 若没有按键则直接返回 RETWAIT_OFF: LCALL SCAN ; 执行按键扫描 JB FKEY,WAIT_OFF ; 若有按键等待按键放开来 RET;----------------------------------------; WAIT KEY IN.............; RETURN A: DIGIT NOGET_KEY: ; 等待按键并传回按键码 CLR FKEY ; 清除按键标志 LCALL SCAN ; 执行按键扫描; IF(KEY_ON) WAIT KEY_OFF ; 若有按键等待按键放开来 JB FKEY,G1 ; 测试按键标志; NO KEY ON WAIT KEY IN.... ; 若没有按键则继续等待按键 JMP GET_KEYG1: LCALL SCAN ; 执行按键扫描 JB FKEY,G1 ; 等待按键放开来; KEY INDEX TO DIGIT NO. ; 按键扫描值转换为按键码 MOV A,KEY_NO MOV DPTR,#TABLE_DIG; 经过查表的方式找出按键码 MOVC A,@A+DPTR RET;-----------------------------------------------LOOK: ; 显示所输入的新密码 MOV CO,#4 MOV R0,#PASSNEW ; 指向密码存放的变量区LO1: MOV A,@R0 ; 取出密码值 INC R0 ; 指向下一变量区 DJNZ CO,LO1 ; 是否完成4位数 RET;----------------------CHECK_PASS: ; 密码比较程序 LCALL IP_PASS ; 取得要比较的密码 LCALL LOOK ; 显示所输入的新密码;COMP PASS[] TO PASS0[]........... MOV CO,#4 ; 设置比较4码 MOV R0,#PASS ; 指向密码存放的变量区 MOV DPTR,#PASS0 ; 指向内部固定的密码区CH1: MOV A,#0 MOVC A,@A+DPTR ; 取出数据放入A缓冲器 MOV B,@R0 ; 取出数据放入B缓存器 CJNE A,B,CH2 ; 互相比较 INC DPTR ; 指向下一位置 INC R0;............................. DJNZ CO,CH1 ; 是否处理完所有位数 LCALL OK ; 显示密码正确消息 MOV R4,#1 ; 密码正确LED闪动 LCALL LED_BL LCALL LED_BL RETCH2:;........................... JMP COMP ; 继续比较内部所设置的密码ERROR: LCALL ERR ; 密码错误处理 LCALL LED_BL ; LED闪动 RET;-------------------------COMP:;COMP PASS[] TO PASSNEW[]........... MOV CO,#4 ; 比较4位数值 MOV R0,#PASS ; 指向要比较的密码 MOV R1,#PASSNEW ; 指向内部所设置的密码C1: MOV A,@R0 ; 取出数据放入A缓冲器 MOV B,@R1 ; 取出数据放入B缓冲器 CJNE A,B,ERROR ; 互相比较 INC R0 ; 指向下一位置 INC R1;............................. DJNZ CO,C1 ; 是否处理完成 LCALL OK ; 密码比较正确 RET;---------------------------------------------; KEY IN 4 PASS SHOW ON LCD LINE 2 输入4位密码值IP_PASS: MOV DPTR,#M_IP MOV A,#2 ; LINE2 LCALL LCD_PRINT ; 在LCD上显示执行消息 MOV B,#9 ; 设置LCD位置 MOV CO,#4 ; 设置取得4码 MOV R0,#PASS ; 指向密码存放的变量区I1: LCALL GET_KEY ; 等待按键 MOV @R0,A ; 将按键值存入变量区 ADD A,#30H ; 转换为字符 LCALL LCDP2 ; 显示在LCD上 INC B ; 显示地址增加 INC R0 ; 指向下一变量区 DJNZ CO,I1 ; 是否完成4位数 RET;----------------------------OK: MOV DPTR,#M_OK MOV A,#2 ; LINE2 LCALL LCD_PRINT ; 显示密码正确消息 LCALL DOOR_OPEN ; 执行开启继电器动作 RET;-----------------------------ERR: MOV DPTR,#M_ERR MOV A,#2 ; LINE2 LCALL LCD_PRINT ; 显示密码错误消息 LCALL ALARM ; 警报器响起 RET;-----------------------------SLINE2: ; 在第二行显示消息 MOV DPTR,#LMESS2 MOV A,#2 ; LINE2 LCALL LCD_PRINT RET;----------------------------; SET NEW PASS........... ; 设置新密码SET_PASS:; GET 4 KEYS............ ; 显示执行消息 MOV DPTR,#M_IP_NEW MOV A,#2 ; LINE2 LCALL LCD_PRINT MOV B,#12 ; 设置LCD地址 MOV CO,#4 ; 取得4位数字 MOV R0,#PASSNEW ; 指向变量区S1: LCALL GET_KEY ; 等待按键 MOV @R0,A ; 将按键值放入变量区 ADD A,#30H ; 转换为字符 LCALL LCDP2 ; 显示在LCD上 INC B ; 显示地址增加 INC R0 ; 指向下一变量区 DJNZ CO,S1 ; 是否完成4位数 RET;---------------------------------------------------------M_IP: DB "I/P PASS:.... ",0 ; 显示消息M_OK: DB "PASSWORD OK !!! ",0M_ERR: DB "PASSWORD ERROR !",0M_IP_NEW: DB "I/P NEWPASS:....",0;---------------------------------------------------------; SHOW ON LCD ; 显示内部密码值在LCD上LOOK_PASS: MOV B,#0 ; 设置LCD位置 MOV CO,#4 ; 共有4位数值 MOV R0,#PASSNEW ; 指向变量区LL: MOV A,@R0 ; 取得变量数据 ADD A,#30H ; 转换为字符 LCALL LCDP2 ; 在LCD第二行上显示数据 INC R0 ; 指向下一变量区 INC B ; LCD位置增加 DJNZ CO,LL ; 是否处理完所有位 MOV R5,#100 ; 延迟一下 LCALL DELAY LCALL SLINE2 ; 显示原先LCD消息 RET;----------------------------------------REL_ON: SETB REL ; 继电器状态设为ON RET;-------------------REL_OFF:CLR REL ; 继电器状态设为OFF RET;-------------------INIT_PORT: LCALL REL_OFF ; 初始化I/O接口 RET;---------------------DOOR_OPEN: ; 继电器开启 LCALL REL_ON MOV R5,#200 ; 延迟2s LCALL DELAY LCALL REL_OFF ; 继电器关闭 RET;---------------------------------------ALARM: ; 压电喇叭发出警报声 MOV R2,#3AL1: LCALL LED_BL LCALL BZ DJNZ R2,AL1 RET;----------------------------BZ: MOV R6,#0 ; 压电喇叭发出一声B1: LCALL DEL CPL SPK DJNZ R6,B1 RET;--------------------DEL: MOV R7,#180 ; 短暂延迟DE1: NOP DJNZ R7,DE1 RET;-----------------------------------------------------------MLOOP: ; 主控循环 LCALL GET_KEY; JUDGE WHICH KEY.......... ; 判断按下哪一键; 'A'--> SET NEW PASS.; 'B'--> CHECK PASS. ; 比较是否为A键 CJNE A,#KA,M1 ; 未按下A键则继续扫描; 'A'--> SET NEW PASS. .... ; 执行设置新密码 LCALL SET_PASS ; 设置新密码 LCALL SLINE2 ; LCD显示消息 JMP MLOOP ; 继续循环执行 ; 比较是否为B键M1: CJNE A,#KB, M2 ; 未按下B键则继续扫描; 'B'--> CHECK PASS. .... ; 执行密码输入是否正确 LCALL CHECK_PASS ; 检查密码输入是否正确 LCALL SLINE2 ; LCD显示消息 JMP MLOOP ; 继续循环执行M2: JMP MLOOP ; 继续执行循环 RET;-------------------------------------; LCD I/O;-------------------------------------SET_LCD: ; 对LCD初始化设置及测试 LCALL INIT_LCD ; 初始化LCD MOV R5,#10 LCALL DELAY ; 延迟一下 MOV DPTR,#LMESS1 ; 指针指向显示消息1 MOV A,#1 ; 显示在第一行 LCALL LCD_PRINT ; 显示执行消息1于LCD第一行 MOV DPTR,#LMESS2 ; 指针指向显示消息2 MOV A,#2 ; 显示在第二行 LCALL LCD_PRINT ; 显示执行消息2于LCD第二行 RET;---------------------------------LMESS1: DB "8051 PASSWORD ",0LMESS2: DB "A OR B KEY .....",0;-----------------------------------------; A=LINE 1 OR 2 ; 在LCD的第一行或第二行显示字符; DPTR = MESSAGE POINTERLCD_PRINT: CJNE A,#1,LINE2 ; 判断是否为第一行LINE1: MOV A,#80H ; 设置LCD的第一行地址 LCALL WCOM ; 写入命令 LCALL CLR_LINE ; 清除该行字符数据 MOV A,#80H ; 设置LCD的第一行地址 LCALL WCOM ; 写入命令 JMP FILLLINE2: MOV A,#0C0H ; 设置LCD的第二行地址 LCALL WCOM ; 写入命令 LCALL CLR_LINE ; 清除该行字符数据 MOV A,#0C0H ; 设置LCD的第二行地址 LCALL WCOM ; 写入命令FILL: ; 填入字符 CLR A MOVC A,@A+DPTR ; 由消息区取出字符 CJNE A,#0,LC1 ; 判断是否为结束码 RETLC1: LCALL WDATA ; 写入数据 INC DPTR ; 指针加1 JMP FILL ; 继续填入字符 RET;---------------------------CLR_LINE: ; 清除该行LCD的字符 MOV R0,#20 ; 设置个数CL1: MOV A,#' ' ; 载入空格符至LCD LCALL WDATA ; 输出字符至LCD DJNZ R0,CL1 ; 计数结束 RET;-------------------INIT_LCD: ; 4位I/O控制LCD接口初始化 MOV A,#38H ; 双行显示,8位数据,5X8点阵 LCALL WCOM MOV A,#06H ; 输入方式设置:AC自动加1 LCALL WCOM MOV A,#0CH ; 显示开,光标关 LCALL WCOM MOV A,#01H ; 清LCD显示屏 LCALL WCOM RET;---------------------- B_LCD: PUSH ACC ; 把ACC压入堆栈 CLR RS ; RS=1 SETB RW ; RW=1B_LCD1: MOV P0,#0FFH ; P0口置"1" SETB EN ; EN =1 MOV A,P0 ; 从P1口读出数据 NOP ; 空操作 CLR EN ; EN =0 JB ; 判断忙标志 POP ACC ; 把ACC弹出堆栈 RET ;----------------------WCOM: LCALL B_LCD ; 判断忙标志 CLR RS ; RS=0 CLR RW ; RW=0 SETB EN ; EN =1 MOV P0,A ; 写入指令到P0口 CLR EN ; EN =0 RET;--------------------------------------WDATA: LCALL B_LCD ; 判断忙标志 SETB RS ; RS=1 CLR RW ; RW=0 SETB EN ; EN =1 MOV P0,A ; 写入数据 CLR EN ; EN =0 RET;--------------------------------------; PRINT A CHAR ON LCD LINE 1; A=ASC DATA; B=LINE X : ; 在LCD的第一行显示字符; LINE 1 PUSH ACC ; 将A放入堆栈 MOV A,B ; 设置显示的地址 ADD A,#80H ; 设置LCD的第一行地址 LCALL WCOM ; 写入命令 POP ACC ; 由堆栈取出A LCALL WDATA ; 写入数据 RET;-------------------------------; PRINT A CHAR ON LCD LINE 2; A=ASC DATA; B=LINE X : ; 在LCD的第二行显示字符; LINE 2 PUSH ACC ; 将A放入堆栈 MOV A,B ; 设置显示地址 ADD A,#0C0H ; 设置LCD的第二行地址 LCALL WCOM ; 写入命令 POP ACC ; 由堆栈取出A LCALL WDATA ; 写入数据 RET ;-------------------------------------- END

280 评论

吃要吃好的

新款的单片机都可以设置密码

345 评论

美林小姐

用STC的单片机,里面有EEPROM,把设定的密码写到里面。正常运行时 输入密码和EEPROM里面的密码比较 正确了就可以进入

129 评论

fanfanwing

仔细看目录介绍有一章是讲密码锁控制的

82 评论

相关问答

  • 红外遥控防盗密码锁毕业论文

    [过程控制] 基于单片机实现单回路智能调节.. [电子通讯] 脉冲数字频率计 [机床仪表] 仪表机床数控系统的设计(论文.. 磁流体发电论文 [电子通讯] 基于

    足疗沙发厂家 6人参与回答 2023-12-06
  • 51单片机论文外文参考文献

    单片机英文参考文献 [1] 李广弟等 单片机基础 北京航空航天出版社, 2001.7 [2] 楼然苗等

    childrenqj126 3人参与回答 2023-12-05
  • 密码锁论文参考文献

    用STC的单片机,里面有EEPROM,把设定的密码写到里面。正常运行时 输入密码和EEPROM里面的密码比较 正确了就可以进入

    敏芳在上海 4人参与回答 2023-12-06
  • 单片机论文数码管参考文献

    目录摘 要 IAbstract II目录 III第一章 绪 论 - 1 -1.1课题的背景 - 1 -1.2课题意义 - 2 -1.3本章小结 - 3 -第二

    小演员王沁曦 6人参与回答 2023-12-08
  • 密码锁论文开题报告

    用STC的单片机,里面有EEPROM,把设定的密码写到里面。正常运行时 输入密码和EEPROM里面的密码比较 正确了就可以进入

    xiaomianwowo 4人参与回答 2023-12-09