基于ADuc848的数字密码锁课程设计报告.docx

上传人:b****4 文档编号:4591631 上传时间:2022-12-07 格式:DOCX 页数:31 大小:393.32KB
下载 相关 举报
基于ADuc848的数字密码锁课程设计报告.docx_第1页
第1页 / 共31页
基于ADuc848的数字密码锁课程设计报告.docx_第2页
第2页 / 共31页
基于ADuc848的数字密码锁课程设计报告.docx_第3页
第3页 / 共31页
基于ADuc848的数字密码锁课程设计报告.docx_第4页
第4页 / 共31页
基于ADuc848的数字密码锁课程设计报告.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

基于ADuc848的数字密码锁课程设计报告.docx

《基于ADuc848的数字密码锁课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于ADuc848的数字密码锁课程设计报告.docx(31页珍藏版)》请在冰豆网上搜索。

基于ADuc848的数字密码锁课程设计报告.docx

基于ADuc848的数字密码锁课程设计报告

湖南大学电气与信息工程学院

本科生课程设计

 

题   目:

数字密码锁

课   程:

 单片机课程设计

专   业:

 电气工程及其自动化

班   级:

 电自班

学   号:

 

姓   名:

 

指导 老师:

设计 时间:

 

目录

一、任务及设计要求-3-

二、系统原理框图-3-

三、硬件原理图-4-

(一)ADuC848的简要介绍(针对本设计所选择的型号)-4-

(二)单片机引脚分布-4-

(三)电源模块-6-

(四)数码管硬件连接-7-

(五)蜂鸣器和红外发送-8-

(六)复位与下载-8-

(七)按键输入-9-

(八)振荡电路-10-

四、程序-11-

(一)主程序-11-

(二)密码修改流程图-12-

(三)计时主程序流程图-13-

(四)计时中断子程序流程图:

-14-

(五)蜂鸣器中断子程序流程图-15-

(六)蜂鸣器控制程序-15-

(七)键盘扫描程序流程图-16-

(八)程序清单-16-

五、使用说明书-26-

(一)键盘按键分布-26-

(二)按键功能说明-26-

六、心得体会-27-

参考文献-29-

 

一、任务及设计要求

1)设计一多位电子密码锁,输入密码用“F”表示,输入密码正确,绿灯亮(或显示其它标志、蜂鸣器替代),输入密码错误,红灯亮(或显示其它标志、蜂鸣器替代)

2)具有确定键和取消键,在未确定之前可以取消,重新输入

3)连续输入三次错误密码,红灯闪烁,报警电路动作,键盘锁定

4)具有密码重置、修改功能

5)具有密码输入等待操作时间限制功能,超过限定时间报警

6)显示北京时间,时间可调整

7)可利用蜂鸣器添加提示音

二、系统原理框图

 

三、硬件原理图

(一)ADuC848的简要介绍(针对本设计所选择的型号)

1、详细情况请参考芯片手册。

2、8051-basedcore、5V供电电压;

3、可以通过串口在线下载程序和单步、断点、运行到某一行等方式调试程序;

4、16位8通道Σ-ΔADC,片内有1.25V参考电压、buffer和PGA;

5、12位电压输出DAC、Dual16-BITΣ-ΔDAC;

6、32kbyte程序存储器、4kbyte用户信息Flash存储器、256RAM+2048XRAM(byte);

7、PLL(12.58MHzmax)(片外只需接32.768kHz晶振);

8、3×16位定时/计数器、看门狗定时器;

9、11中断源(2优先级)、11位堆栈指针;

10、24I/O+8模拟或数字输入;

11、UART、SPI和I2C、高速115200波特率发生;

12、Powersupplymonitor、上电复位、Dual200μA激励电流源。

(二)单片机引脚分布

 

1.Pin1~4:

(P1.0~P1.3)作为矩阵式键盘或独立按键的输入,P1口只能用于输入,默认用于模拟输入,作为数字输入使用时应先往P1口相应引脚写0,这里可以用P0&=0xf0。

若P2、P3、P0口要作为输入,则应往相应引脚写1。

2.Pin5、6:

AVDD、AGND,模拟电源输入。

3.Pin7、8:

外部参考电压接入,Pin7接AGND。

片内DAC有2.5V内部参考,ADC有1.25V内部参考。

4.Pin9、10:

(P1.4、P1.5)两路AD输入,可做差分输入,需要设置ADC的寄存器。

5.Pin11、12:

(P1.6、P1.7)各200uA激励电流源,可配合RTD等做应用。

6.Pin13:

两路AD输入做普通输入时的电压参考端,AD输入电压不能低于此引脚电压。

7.Pin14:

片内DAC输出。

8.Pin15:

复位引脚。

9.Pin16、17:

单片机RS232接口的RXD(P3.0)TXD(P3.1)。

10.Pin18:

(P3.2)外部中断0,用于红外接收和PS/2接口。

11.Pin19:

(P3.3)LCD1602,LCD12864A的EN引脚,控制第一位数码管。

12.Pin20、21:

DVDD、DGND数字电源输入。

13.Pin22:

(P3.4)PS/2接口的data信号。

14.Pin23:

(P3.5)LCD1602和LCD12864A的RW。

15.Pin24:

(P3.6)LCD1602和LCD12864A的RS。

16.Pin25:

LCD12864A的CS1。

17.Pin26:

IIC接口时钟信号。

18.Pin27:

IIC接口data信号。

19.Pin28:

(P2.0)SPI接口时钟信号。

20.Pin29:

(P2.1)SPI接口MOSI信号、控制第6位数码管的位码。

21.Pin30:

(P2.2)SPI接口MISO信号、控制第7位数码管的位码。

22.Pin31:

(P2.3)SPI接口SS信号、控制第8位数码管的位码;P2.0~3也作为4X4矩阵式键盘的扫描输出信号、步进电机的控制信号、数码管第数码管第6、7、8位位码。

但是SPI、4X4矩阵式键盘、步进电机、数码管第6、7、8位功能不能同时实现。

23.Pin32、Pin33:

接外部32.768KHz晶振。

24.Pin34、Pin35:

DVDD、DGND。

25.Pin36:

(P2.4)LCD12864A的CS2。

26.Pin37:

(P2.5)内部PWM模块输出,控制红外LED。

27.Pin38:

(P2.6)内部PWM模块输出,控制蜂鸣器。

28.Pin39:

(P2.7)内部PWM模块的外部时钟输入(也可以用内部时钟)。

29.Pin40:

EA,低电平有效,正常使用时拉低。

30.Pin41:

PSEN,在此引脚电平为低时按复位键进入debug模式,可以下载和调试程序。

31.Pin42:

ALE。

32.Pin47、Pin48:

DGND、DVDD。

33.Pin43、44、45、46、49、50、51、52:

P0口、LCD1602和LCD12864的数据总线,数码管的段码。

(三)电源模块

本学习板共有如下3种供电方式:

1.5V电源适配器供电(开关往上拨、插针1下面两脚接跳线帽)。

将开关sw4第2、3脚接通(开关往上拨),电源网络DVDD连接到插针1第2脚的输出,将插针1的第1、2脚(插针1下面两脚)接跳线帽,DVDD直接连接到电源适配器输入端,即为5V电源适配器供电模式。

2.7~12V电源适配器供电(开关往上拨、插针1上面两脚接跳线帽)

将开关sw4第2、3脚接通(开关往上拨),电源网络DVDD连接到插针1第2脚的输出,将插针1的第2、3脚(插针1上面两脚)接跳线帽,DVDD连接到稳压芯片7805的输出,而7805的输入端连接到电源适配器输入端,即为7~12V的电源适配器经7805给学习板供电的模式。

3.USB供电(开关往下拨)。

将开关sw4第1、2脚接通(开关往下拨),电源网络DVDD连接到USB电源输入端。

对DVDD网络和AVDD网络设了测试点,方便调试。

(四)数码管硬件连接

关键网络名解释:

1.DS0~7:

数码管段码。

2.BIT0~7:

数码管位码。

3.MOTORA~D:

步进电机驱动信号。

4.DISCTRL0~4:

显示控制信号,控制数码管低5位。

5.D0~8:

单片机P0口。

本设计采用共阴极数码管,段码由PNP三极管驱动,位码由NPN型三极管驱动。

引脚复用:

数码管低5位(板上为右边5位)的位码由DISCTRL0~4控制,可单独使用,高3位的位码控制信号与SPI信号,电机驱动信号,4X4矩阵式键盘复用,使用数码管高3位时参与复用的其他功能则不能使用。

插针配置:

若要使用数码管第4~0位(板上为右边5位),可以接通插针8,为减少功耗,不用请断开。

若要使用数码管第7~5位(板上为左边3位),可以分别接通插针5~7和9,为减少功耗,不用请断开。

(五)蜂鸣器和红外发送

本设计中采用无源电磁式蜂鸣器,蜂鸣器由PWM1(P2.6)控制,红外二极管由PWM0(P2.5)控制。

PWM1和PWM0均为片内PWM模块的输出。

蜂鸣器和红外LED的驱动均采用普通NPN三极管。

为方便调试,对该模块中的信号设了测试点,具体位置参见附图1。

插针配置:

若要使用蜂鸣器,可以接通插针3,为减少功耗,不用请断开。

若要使用红外二极管,可以接通插针4,为减少功耗,不用请断开。

(六)复位与下载

进入下载或调试模式的步骤为:

1.按住BTN1(downordebug按键)不要放开;

2.按下BTN2(reset按键),然后放开BTN2(reset按键);

3.放开BTN1(downordebug按键)。

这样单片机就进入了调试模式,可以下载或调试程序。

(七)按键输入

由于P1口(用于行扫描)内部无上拉电阻,为使无键按下时行信号为高电平,故将行信号接上拉电阻,电阻大小10K即可。

引脚复用:

P2.0~P2.3为4X4矩阵式键盘列扫描信号,又复用作步进电机控制信号,SPI信号、P2.1~P2.3还复用为数码管第5、6、7位位码控制信号。

参与复用的一项功能使用时,其他参与复用的功能则不能使用。

插针配置:

插针10上面两脚接跳线帽,4X4矩阵式键盘输入,行扫描信号为P1.0~P1.3,列扫描信号为P2.0~2.3。

插针10下面两脚接跳线帽,独立按键输入,该模式有4个独立按键可用,按键扫描所用端口为P1.0~P1.3。

这4个按键为4X4矩阵键盘的左边4个按键。

(八)振荡电路

AduC848片内有I2C模块,并有独立的引脚SCLOCK和SDATA。

板上的RTC时钟芯片DS1307和EEPROM芯片AT24C08均使用了I2C总线。

板上设置了I2C接口,方便MCU与板外的I2C设备进行通信。

对SCLOCK和SDATA设置了测试点。

 

四、程序

(一)主程序

(二)密码修改流程图

 

(三)计时主程序流程图

 

(四)计时中断子程序流程图:

 

(五)蜂鸣器中断子程序流程图

(六)蜂鸣器控制程序

(七)键盘扫描程序流程图

(八)程序清单

BUFEQU75H

BUF1EQU73H

SBFEQU72H;存放秒

MBFEQU71H;存放分

HBFEQU70H;存放时

ORG0000H

LJMPSTART

ORG0BH;定时器0中断入口

LJMPCLOCK

ORG1BH;定时器1中断入口

LJMPINT_0

ORG200H

START:

MOVR5,#00H

MOVA,#00H

MOV60H,A;清楚计时模式所有显示单元

MOV61H,A

MOV62H,A

MOV63H,A

MOV64H,A

MOV65H,A

MOV66H,A

MOV67H,A

MOV68H,A

MOV69H,A

ANLTMOD,#0F0H;设置TMOD

ORLTMOD,#01H

MOVTL0,#00H;TI装初值

MOVTH0,#40H

MOVBUF1,#00H;清零

MOVSBF,#00H

MOVMBF,#00H

MOVHBF,#00H

MOV58H,#01H;置闹钟小时初值

MOV59H,#00H;置闹钟分初值

SETBET0;开定时器0

SETBEA;开总中断

SETBTR0;启动T0

MOV74H,#00H;判断模式

MOV39H,#00H;密码输入是否正确

MOV38H,#00H;是否按下reset键

MOV29H,#00H;是否显示闹钟时间

START1:

MOVA,#06H;初始化密码

MOV35H,A

MOVA,#05H

MOV34H,A

MOVA,#04H

MOV33H,A

MOVA,#03H

MOV32H,A

MOVA,#02H

MOV31H,A

MOVA,#01H

MOV30H,A

MAIN:

MOVBUF,#10H;密码输入缓存

MOV76H,#00H;音乐播放次数

MOV37H,#00H;记录输入数字的个数

MOV36H,#06H

MOVR0,#40H;清输入密码存储单元

CLEAR:

MOV@R0,#00H

INCR0

DJNZ36H,CLEAR

LCALLDS1;调用显示子程序

MAIN1:

LCALLKEY;调用键盘扫描程序

JMPMAIN1

KEY:

MOVP2,#0E0H;全扫描,各列线都送低电平

MOVP1,#00H

MOVA,P1;读回各行线电平值

ORLA,#0F0H;只读低四位

CPLA;所读值置反

JNZIN;不是全0说明有键按下

RET;无键按下返回

IN:

ACALLDELAY1;调延时,等待按合抖动过去

MOVR2,#04H;R2做计数器,存待扫描行数

MOVR4,#7FH;R4做指针,指示待扫描行数

MOVR7,#00H;R7用于决定键号,初值置以0

SCAN:

MOVA,R4

RLA

MOVR4,A;以上三条调整待扫描行

MOVP2,A;逐行扫描,被扫描行送低电平

MOVP1,#00H

MOVA,P1;读回各列线电平值

MOVR3,#04H;R3做记数器,存被扫描行的待查列数

NEXT:

RRCA;调整待查列

JNCFIND;被查列为低电平,被按键找到,转FIND

INCR7;未找到,键号加一

DJNZR3,NEXT;被扫描行的待查列数不为0,转回NEXT

DJNZR2,SCAN;未找到所按键,返回

RET

FIND:

MOVBUF,R7

MOVP2,#0E0H

LOOSEN:

MOVA,P1

ORLA,#0F0H

CPLA

JNZLOOSEN;以上几条重复全扫描,等待所按键松按

MOVA,R7;松按后才考虑键处理,保证每按键一次,只处理一次,本条为取所按键号

ADDA,#0F6H

JCORDER

NUM:

MOVA,#01H;键号小于等于9,是数字键,转NUM,执行数字键处理程序

XRLA,74H;判断模式

JZX0;计时模式则不处理数字按键

CLRC

INC37H

MOVA,#0F9H

ADDA,37H

JCMAIN1;输入够6个数字则等待命令键

LCALLDS1;调用显示子程序

MOVA,R7

XCHA,45H;存输入的密码

XCHA,44H

XCHA,43H

XCHA,42H

XCHA,41H

XCHA,40H

RET

ORDER:

MOVA,#01H;键号大于9,是命令键,转ORDER,执行命令键处理程序

XRLA,74H

JZORDER1;判断模式

MOVA,R7

XRLA,#0AH

JZX15;重置

MOVA,R7

XRLA,#0BH

JZX16;重置确认

MOVA,R7

XRLA,#0CH

JZX9;输入密码确认,判断正误

MOVA,R7

XRLA,#0DH

JZX2;清零

MOVA,R7

XRLA,#0EH

JZX1;初始化密码

MOVA,R7

XRLA,#0FH

JZX5;显示时间

X1:

LJMPSTART1

X2:

LJMPMAIN

X3:

LJMPMAIN2

X5:

MOV74H,#01H;进入计时模式

MOV29H,#00H

LJMPMAIN3

X9:

LJMPCOMP

X15:

LJMPRESET

X16:

LJMPSET0

X0:

LJMPKEY

ORDER1:

MOVA,R7

XRLA,#0AH

JZX6;分钟加一

MOVA,R7

XRLA,#0BH

JZX7;小时加一

MOVA,R7

XRLA,#0CH

JZX11;闹钟分加一

MOVA,R7

XRLA,#0DH

JZX12;闹钟小时加一

MOVA,R7

XRLA,#0EH

JZX13;显示闹钟时间

MOVA,R7

XRLA,#0FH

JZX8;回到等待密码输入

JMPX0

X6:

MOVA,MBF

ADDA,#01H

DAA

MOVMBF,A

CJNEA,#60H,X10

MOVMBF,#00H

MOVA,HBF

ADDA,#01H

DAA

MOVHBF,A

CJNEA,#24H,X10

MOVHBF,#00H

RET

X7:

MOVA,HBF

ADDA,#01H

DAA

MOVHBF,A

CJNEA,#24H,X10

MOVHBF,#00H

RET

X11:

MOVA,59H

ADDA,#01H

DAA

MOV59H,A

RET

X12:

MOVA,58H

ADDA,#01H

DAA

MOV58H,A

RET

X13:

MOV29H,#01H

LJMPMAIN3

X8:

MOV74H,#00H;进入输密码模式

MOV29H,#00H

LJMPMAIN

X10:

RET

X4:

LJMPMAIN

RESET:

MOV37H,#00H

MOVA,39H

CLRC

RRCA

JNCX4

MOV38H,#01H;按下重置键置一

JMPX4

SET0:

MOV37H,#00H;设置密码

MOVA,38H;是否按下RESET

CLRC

RRCA

JNCX4

MOVR2,#06H

MOVR0,#40H

MOVR1,#30H

E1:

MOVA,@R0;把40H-45H的内容给30H-35H

XCHA,@R1

INCR0

INCR1

DJNZR2,E1

CALLDELAY

E2:

JMPX4

COMP:

MOV37H,#00H

MOVR1,#45H;判断密码正误

MOVR0,#35H

MOVR2,#06H

C1:

MOVA,@R1

XRLA,@R0

JNZC2

DECR1

DECR0

DJNZR2,C1

MOVR5,#00H

MOV39H,#01H;正确置一

LCALLDS2

JMPC3

C2:

MOV39H,#00H;错误清零

LCALLDS3

INCR5

MOVA,R5

MOVR5,A

CJNER5,#03H,C3

LCALLDS4

JMPX3;报警

C3:

JMPX4

DS1:

;显示程序

MOVP3,#80H

MOVA,37H

LCALLTABLE

MOVP0,A

LCALLDELAY;延时

RET

DS2:

MOVP3,#08H;正确显示

JMPDS5

DS3:

MOVP3,#20H;错误显示

JMPDS5

DS4:

MOVP3,#40H;报警显示

DS5:

MOVA,#03H

MOVP0,A

LCALLDELAY;延时

RET

TABLE:

INCA

MOVCA,@A+PC

RET

DB03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,19H,11H,0C1H,63H,85H,61H,71H,0FFH

DELAY:

MOVR6,#00H;延时程序

DEL11:

DJNZR6,DEL11

RET

MAIN3:

DS9:

MOVA,29H

JZBEIJ

NAOZ:

MOVR0,#69H;显示闹钟时间

JMPWEI

BEIJ:

MOVR0,#63H;显示北京时间

WEI:

MOVR2,#08H

DS8:

MOVP3,R2

MOVA,@R0

LCALLTABLE;BCD码转换成段码

MOVP0,A

LCALLDELAY1;延时

DECR0

CLRC

MOVA,R2

RLCA

MOVR2,A

CJNER2,#10H,LL

RLCA

MOVR2,A

LL:

CJNER2,#00H,DS8;四位显示完了吗?

没完则继续扫描显示

MOVA,29H

JZSHIJ

MOVR0,#69H

MOVA,59H

LCALLGET

MOVR0,#67H

MOVA,58H

LCALLGET

JMPBIJIAO

SHIJ:

MOVR0,#65H

MOVA,SBF;存入秒

LCALLGET

MOVA,MBF;存入分

LCALLGET

MOVA,HBF;存入时

LCALLGET

BIJIAO:

LCALLKEY;调用键盘扫描程序

MOVA,58H;比较闹钟时间和实际时间

MOVR6,HBF

XRLA,R6

JNZDS9

MOVA,59H

MOVR6,MBF

XRLA,R6

JNZDS9

LJMPMAIN2

SJMPDS9

GET:

MOV53H,A;压缩型BCD码转换成非压缩型BCD码

ANLA,#0FH;取低4位

MOV@R0,A

DECR0

MOVA,53H

SWAPA;取高4位

ANLA,#0FH

MOV@R0,A

DECR0

RET

CLOCK:

MOVTL0,#00H;定时器0中断子程序

MOVTH0,#40H

PUSHPSW;保护现场

PUSHACC

INCBUF1

MOVA,BUF1

CJNEA,#20H,QUIT;20次为一秒

MOVBUF1,#00H

MOVA,SBF

ADDA,#01H

DAA

MOVSBF,A

CJNEA,#60H,QUIT;60秒为1分

MOVSBF,#00H

MOVA,MBF

ADDA,#01H

DAA

MOVMBF,A

CJNEA,#60H,QUIT;60分为1小时

MOVMBF,#00H

MOVA,HBF

ADDA,#01H

DAA

M

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1