接口技术课程设计报告Word下载.docx
- 文档编号:8133659
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:41
- 大小:168.87KB
接口技术课程设计报告Word下载.docx
《接口技术课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《接口技术课程设计报告Word下载.docx(41页珍藏版)》请在冰点文库上搜索。
通过软件实现数字和位控制。
原理如图2.2
图2.2LED显示电路
2.3开锁电路
基于节省材料的原则,暂时用发光二极管代替电磁锁,绿色发光管亮,表示开锁;
红色发光管亮,表示没有开锁。
蓝色发光管亮,表示开始密码重置功能。
黄色发光管亮,表示密码重置成功。
电路图如3.3所示。
图2.3开锁电路
2.4晶振电路与复位电路
图2.4晶振电路
2.524C02缓存器电路
图2.5复位电路
2.6报警电路
图2.6报警电路
三、软件流程及程序设计
3.1软件设计思路
电子密码锁工作的主要过程是LED数码管提示开始输入密码,通过键盘输入密码,同时LED显示密码输入情况,按下确认键后判断密码的正确性,作出开锁或报警处理。
当输入密码连续输入错误3次时,系统报警。
密码的设定,在此程序中密码是固定40H—45H中,假设预设的密码为"
123456"
共6位密码。
由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。
在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;
或者输入确认功能键之后,才能完成密码的输入过程。
进入密码的判断比较处理状态并给出相应的处理过程。
3.2软件流程
开始
↓
系统初始化
↓
得到键按值keyval
与存储器中密码对比
↓错误3次
密码正确显示0,绿灯亮,如果错误红灯亮→报警
正确
可以重置密码,蓝灯亮
保存密码,黄灯亮,返回,重新登录
3.3主程序
voidmain()
{
uchari,keyval,k,times=0;
bitFlag=1,RUN=1,flag1=1,flag2=1;
//标志位参数
LED_YELLOW=0;
//黄灯
LED_BLUE=0;
SystemInit();
for(k=0;
k<
6;
k++)
WriteSet(k,password[k]);
//在24c08的地址2中写入数据sec
k=0;
while(RUN)
{
SDA=1;
//SDA=1,SCL=1,使主从设备处于空闲状态
SCL=1;
keyval=keyscan();
//扫描键盘
if(keyval==CANCEL)//取消键功能区,返回初始状态
for(i=0;
i<
i++)
DisTemp[i]=0x7f;
//初始化显示全8
flag1=1;
//改密码按键标志位
flag2=1;
times=0;
}
if(keyval==OK)//确认键按键功能区
Flag=1;
//先把比较标志位置1
i++)//把存储器中密码取出来,循环比较6个数值,如果有一个不等则最终Flag值为0
mima[i]=ReadSet(i);
//在24c08的地址0-5中取出初始密码
Flag=Flag&
&
(keypassword[i]==mima[i]);
//比较密码是否相等
if(Flag==0)//密码错误
LED_RED=1;
times++;
//错误次数
10;
DelayMs(50);
//大致一秒
LED_RED=0;
i++)//密码错误延时1秒,继续显示6个8
if(Flag==1)//密码正确
LED_GREEN=1;
//绿灯亮1秒
LED_GREEN=0;
DisTemp[i]=0x3f;
//密码正确显示000000
while(flag1)//密码正确可以进行更改密码
{
keyval=keyscan();
if(keyval==GAIMI)
{
LED_BLUE=1;
for(i=0;
flag2=1;
k=0;
while(flag2)
{
keyval=keyscan();
//扫描键盘
if((keyval!
=0xff)&
(keyval!
=OK)&
=CANCEL)&
=GAIMI)&
=SAVE))//数字输入
{
if(k<
6)//得到6个输入数字//将输入的6个字符赋给密码参量数组
{
mima[k]=keyval;
DisTemp[k]=0x40;
//各个数码管显示'
-'
k++;
}
if(keyval==SAVE)//保存键按下后把新密码存入24c02
for(k=0;
WriteSet(k,mima[k]);
LED_YELLOW=1;
for(i=0;
DelayMs(50);
LED_YELLOW=0;
flag2=0;
flag1=0;
}
}
}
}
if((keyval!
=SAVE))
//按下非公能键表示是数字输入
{
if(k<
6)//得到6个输入数字
keypassword[k]=keyval;
//把6次按键值赋给参量数组
DisTemp[k]=0x71;
//对应数码管显示F
k++;
if(times==3)//密码错误3次结束该循环
RUN=0;
DelayMs(500);
BEEP();
}
3.4各子程序
1.键盘扫描子程序
ucharkeyscan()
uchartempA,tempB,tempAB=0;
P3=0x0f;
if(P3!
=0x0f)
DelayMs(6);
tempA=P3&
0x0f;
P3=0xf0;
DelayUs(4);
//稍微延时稳定数据
tempB=P3&
0xf0;
tempAB=tempA|tempB;
while(P3!
=0xf0);
//松手检测
switch(tempAB)
case0x00:
return0xff;
case0xee:
return1;
case0xde:
return2;
case0xbe:
return3;
case0x7e:
return4;
case0xed:
return5;
case0xdd:
return6;
case0xbd:
return7;
case0x7d:
return8;
case0xeb:
return9;
case0xdb:
return0;
case0xbb:
returnOK;
case0x7b:
returnCANCEL;
default:
}
2.LED显示子程序
voiddis_shuma(ucharweidat,ucharduandat)
DataPort=0xff;
LATCH2=1;
LATCH2=0;
DataPort=DisTemp[duandat];
LATCH1=1;
LATCH1=0;
DataPort=WeiMa[weidat];
3.晶振与报警电路子程序
voidDelayUs(uchart)
while(t--);
/*------------------------------------------------
mS延时函数,其值的范围是
0~255这里使用晶振12M,
大致1ms
------------------------------------------------*/
voidDelayMs(uinttt)
while(tt--)
DelayUs(245);
voidBEEP()
uintm,n;
for(m=0;
m<
1000;
m++)//P1.0脚发声提示
for(n=0;
n<
100;
n++);
//延时
beep=~beep;
//取反输出到喇叭的信号
}
4.定时器0初始化程序
voidTimer0Init()
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
ET0=1;
EA=1;
TR0=1;
voidSystemInit()
Timer0Init();
5.定时器中断子程序
voidTimer0_isr(void)interrupt1using1
staticucharcount=0;
switch(count)//数码管动态烧苗
case0:
dis_shuma(count,count);
count=1;
break;
case1:
count=2;
case2:
count=3;
case3:
count=4;
case4:
count=5;
case5:
count=0;
}
6.AT24c02缓存器
/***************************************************
函数功能:
向AT24Cxx的当前地址写入数据
入口参数:
y(储存待写入的数据)
***************************************************/
//在调用此数据写入函数前需首先调用开始函数start(),所以SCL=0
voidWriteCurrent(unsignedchary)
unsignedchari;
for(i=0;
i<
8;
i++)//循环移入8个位
SDA=(bit)(y&
0x80);
//通过按位“与”运算将最高位数据送到S
//因为传送时高位在前,低位在后
_nop_();
//等待一个机器周期
//在SCL的上升沿将数据写入AT24Cxx
_nop_();
SCL=0;
//将SCL重新置为低电平,以在SCL线形成传送数据所需的8个脉冲
y<
<
=1;
//将y中的各二进位向左移一位
向AT24Cxx中的指定地址写入数据
add(储存指定的地址);
dat(储存待写入的数据)
voidWriteSet(unsignedcharadd,unsignedchardat)
//在指定地址addr处写入数据WriteCurrent
start();
//开始数据传递
WriteCurrent(OP_WRITE);
//选择要操作的AT24Cxx芯片,并告知要对其写入数据
Ask();
WriteCurrent(add);
//写入指定地址
WriteCurrent(dat);
//向当前地址(上面指定的地址)写入数据
stop();
//停止数据传递
DelayMs(4);
//1个字节的写入周期为1ms,最好延时1ms以上
从AT24Cxx中的当前地址读取数据
出口参数:
x(储存读出的数据)
unsignedcharReadCurrent()
unsignedcharx;
WriteCurrent(OP_READ);
//选择要操作的AT24Cxx芯片,并告知要读其数据
x=ReadData();
//将读取的数据存入x
returnx;
//返回读取的数据
从AT24Cxx中的指定地址读取数据
set_addr
x
unsignedcharReadSet(unsignedcharset_addr)
//在指定地址读取
WriteCurrent(set_addr);
return(ReadCurrent());
//从指定地址读出数据并返回
四、系统调试及仿真
本次调试采用Protues软件仿真。
首先设计电子密码锁的源程序,源程序经过汇编后,生成的目标文件经过仿真调试。
初始LED显示如图4.1
图4.1LED初始化显示
由于程序中进行了加密,因此依次按下1,2,3,4,5,6后,LED显示如图4.2
图4.2LED数值显示
重置密码时,LED显示如图4.3
图4.3密码重置
当输入正确密码后,绿色二极管亮,表示密码正确开锁成功。
如图4.4
图4.4密码正确开锁
当输入错误密码后,红色二极管亮,表示密码错误开锁失败。
如图4.5
图4.5密码错误
当输入正确密码后,点击重置按钮是,蓝色二极管亮,表示可以进行密码重置。
如图4.6
图4.6密码重置
当重新输入密码后,点击存储按钮时,黄色二极管亮,表示密码重置成功。
如图4.7
图4.7密码重置成功
当连续三次输入错误密码后,键盘自动锁闭,蜂鸣器报警3s。
如图4.8
图4.8三次错误密码后报警
五、总结
在着手本次课程设计时,通过查阅网络与图书馆搜集到的资料,加上指导老师指点,结合生活中对密码锁的功能特性要求,设计出了这一套电子密码锁系统的主要硬件结构和软件结构,基本完成了课题。
不过由于了解的专业知识尚浅,对课题的研究经验的不足,使得在技术的解决与运用上显得粗糙了一些,特别是功能键的设定。
在设计的过程当中经历和克服了许多困难,暴露我们知识和经验不足的同时也积累了实践经验,检阅了大学所学的知识,使所学的知识得到复习和巩固。
通过这次毕业设计我学到了很多东西,复习了理论知识,特别是单片机外围电路模块电路设计及其应用编程;
学会收集和处理资料的一些基本问题,提高获取新知识的能力、分析和解决问题的能力以及交流与合作的能力。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,在同学的帮助下,终于一一解决。
非常感谢大家的帮助!
附录
源程序清单
/*
开始
*/
#include<
REG52.H>
intrins.h>
//包含_nop_()函数定义的头文件
#defineucharunsignedchar
#defineuintunsignedint
#defineOK(uchar)11
#defineCANCEL(uchar)12
#defineGAIMI(uchar)13
#defineSAVE(uchar)14
#defineOP_READ0xa1//器件地址以及读取操作,0xa1即为10100001B
#defineOP_WRITE0xa0//器件地址以及写入操作,0xa1即为10100000B
sbitSCL=P1^1;
//将串行时钟总线SCL位定义在为P3.4引脚
sbitSDA=P1^2;
//将串行数据总线SDA位定义在为P3.5引脚
bitwrite=0;
//写24C08的标志;
ucharcodepassword[6]={1,2,3,4,5,6};
//可以更改此密码做多组测试
ucharmima[6];
ucharkeypassword[6];
//输入的键盘密码
ucharcodeWeiMa[]={0xdf,0xef,0xf7,0xfb,0x7d,0xfe};
//分别对应相应的数码管点亮,即位码
#defineDataPortP0//定义数据端口
sbitLATCH1=P2^0;
//段锁存
sbitLATCH2=P2^1;
//位锁存
sbitLED_RED=P2^2;
//红灯
sbitLED_GREEN=P2^3;
//绿灯
sbitLED_YELLOW=P2^5;
sbitLED_BLUE=P2^4;
//蓝灯
sbitbeep=P1^0;
ucharDisTemp[6]={0x7f,0x7f,0x7f,0x7f,0x7f,0x7f};
//显示缓存F
uS延时函数,0~255这里使用晶振12M,大致延时
长度如下T=(tx2+5)uS
voidDelayUs(uchart)
700;
函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 接口 技术 课程设计 报告