欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    单片机原理与应用技术课程设计-基于单片机控制电子密码锁报告(12页).doc

    • 资源ID:37042803       资源大小:171KB        全文页数:12页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机原理与应用技术课程设计-基于单片机控制电子密码锁报告(12页).doc

    -单片机原理与应用技术课程设计-基于单片机控制电子密码锁报告-第 7 页单片机原理与应用技术课程设计报告(论文)基于单片机控制的电子密码锁专业班级:应用电子技术教育151班 姓名: 黄永进 时 间: 2017.11.06-2017.11.24 指导教师: 孔晓红 邵锋_ 张素君 2017年 11月 24日基于单片机控制的电子密码锁课程设计任务书1 设计目的与要求设计出一个基于单片机控制的电子密码锁。准确地理解有关要求,独立完成系统设计,要求所设计的电路具有以下功能:(一) 基本功能(1)状态显示功能: 锁定状态时系统用3位数码管显示OFF,用3位数码管显示成功开锁次数;成功开锁时用3位数码管显示888,用3位数码管显示成功开锁次数。(2)密码设定功能: 通过一个4×4的矩阵式键盘可以任意设置用户密码(1-16位长度),同时系统掉电后能自动记忆和存储密码在系统中。(3)报警和加锁功能:密码的输入时间超过12秒或者连续3次输入失败,声音报警同时锁定系统,不让再次输入密码。此时只有使用管理员密码方能对系统解锁。(二)扩展功能实现电机的正反转状态指示及速度快慢指示。(二) 扩展功能可增加遥控控制功能2设计内容 (1)画出电路原理图,正确使用逻辑关系;(2)确定元器件及元件参数;(3)进行电路模拟仿真;(4)SCH文件生成与打印输出;(5)硬件及程序综合调试;3编写设计报告写出设计的全过程,附上有关资料和图纸,有心得体会4答辩在规定时间内,完成叙述并回答问题。目录1 引言12 总体设计方案12.1 设计思路12.1.1 方案确立12.2 设计方框图13 设计原理分析13.1 单片机最小系统的设计23.1.1 复位电路23.1.2 晶振电路23.2 显示电路的设计23.3 矩阵按键的设计33.3.1矩阵按键电路图33.3.2矩阵按键说明33.3.3矩阵按键原理33.4 I2C电路的设计34 结束语4参考文献4附录1电路原理图5附录2电路PCB图6附录3程序代码7基于单片机控制的电子密码锁应教151班 黄永进摘要:设计是采用STC89C52芯片控制一个三位一体的数码管,通过4x4矩阵按键来控制密码输入以及不同的系统指令来完成密码锁的密码输入和修改等,同时使用AT24C04芯片来实现掉电密码数据存储的功能。系统的核心控制主要是通过编写C语言来控制单片机实现。关键词:单片机 矩阵 I2C 蜂鸣器 数码管1 引言随着科技的进步和社会的发展,安全隐患层出不穷,人们的安全意识逐渐提高,对锁的要求也随之提高。电子密码锁采用键盘输入密码,在具备传统锁的基础作用的同时,有更方便更安全的作用。本文对基于单片机的电子密码锁进行具体的介绍。该电子密码锁包含显示模块、按键举证、采用1到16位数密码,正确输入密码开锁,三次输错密码报警,修改密码这些功能。该设计具有成本低、易操作、功耗低、效率高等优点。2 总体设计方案2.1 设计思路2.1.1 方案确立(1)方案内容该设计方案采用STC89C52芯片作为核心,配合数码管、矩阵按键、蜂鸣器等外围电路进行组合,组成电子密码锁系统。其中矩阵按键用来设置系统的密码和输入密码,数码管用于显示开锁状态和成功开锁的次数,最后用C语言程序控制其逻辑功能。2.2 设计方框图(1)设计框图如图1.1显示模块报警模块按键矩阵STC89C52芯片存储模块图1 设计框图3 设计原理分析3.1 单片机最小系统的设计3.1.1 复位电路单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。在本设计中也不例外,如图1.2中复位电路由电容串联电阻构成,并结合“电容电压不能突变”的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且这个高电平持续的时间由电路的RC值来决定。典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以适当组合RC的取值就可以保证可靠的复位。3.1.2 晶振电路每个单片机系统里都有晶振(如图1.2中器件Y1),全称是叫晶体震荡器,在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。本设计中晶振取12MHz,因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合,12MHz产生精确的uS级时歇,方便定时操作。图2 最小系统3.2 显示电路的设计本设计中的密码输入显示及系统状态的显示都是采用一个共阳极的三位一体的数码管实现。图3 数码管 图4 三极管驱动在电路中将三位一体数码管(如图1.3)的a b c d e f g脚通过分别串接一个电阻之后与单片机P2.0P2.7连接,另外为了实现位选控制将三位一体数码管的DG1、DG2与DG3引脚通过三极管驱动(如图1.4)与单片机P3.1、P3.2、P3.3连接。3.3 矩阵按键的设计3.3.1矩阵按键电路图图5 矩阵按键电路3.3.2矩阵按键说明表1 按键说明表按键键名功能0-9数字键密码输入OP开锁键开启输入密码请求DE退格键删除已输入的内容SE设置键用户密码修改重置EN确定键输入内容确定AD管理键用于开启管理员权限3.3.3矩阵按键原理当无按键闭合时,P1.0P1.3与P1.4P1.7之间开路。当有键闭合时,与闭合键相连的两条I/O口线之间短路。判断有无按键按下的方法是:第一步,置列线P1.4P1.7为输入状态,从行线P1.0P1.3输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二步,行线轮流输出低电平,从列线P1.4P1.7读入数据,若有某一列为低电平,则对应行线上有键按下。综合一二两步的结果,可确定按键编号。但是键闭合一次只能进行一次键功能操作,因此须等到按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。3.4 I2C电路的设计在本设计中应用I2C总线的EEPROM做存储设备(24C04芯片如图1.6所示)。为了驱动I2C总线,在单片机向总线送数据程序时则可以在SCL还在低电平时,把数据电平送到SDA,然后拉高SCL,这时SDA不应有电平跳变,延时后拉低SCL,再进行下一位的数据传送直到完成。在总线上读数据时也是只有在SCL为高时,SDA为有效数据。图6 I2C电路图3.5 报警电路的设计 图7 报警电路设计中报警电路如图1.7所示,蜂鸣器使用三极管驱动,通过一个限流电阻之后与单片机P3.0连接。因此,我们可以通过程序控制P3.0脚的电平来使蜂鸣器发出声音和关闭,从而实现系统报警。4 结束语在这次实习的过程中,从选题到定稿,从理论到实践,可以说得是苦多于甜,但是可以学到很多的的东西,不仅巩固了以前学过的知识,还学到了很多在书本上没有学到过的知识。通过这次课程设计使我懂得了理论与实践同等重要,只有将理论和实践相结合才能提高自己的实际动手能力和独立思考的能力。当然这次实习能够那么顺利的完成,除了自己的努力外,离不开院方为我们制定的严格的计划,离不开指导老师的严格的督查和耐心的教导指点,离不开班级同学的帮助与支持。参考文献1谭浩强.c语言程序设计.北京:清华大学出本社,20102李建忠.单片机原理及应用.西安:西安电子科技新大学出版社,2013附录1电路原理图附录2电路PCB图附录3程序流程图附录4程序代码#include <REG52.H>#define uint unsigned int#define uchar unsigned char#define KeyPort P1uchar DD_F=0,DM_F=0;uchar R16; /用户密码uchar M16; /芯片密码uchar G6=6,6,6,6,6,6;uchar code DIS_SEG7=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff;/uchar code DIS_BIT8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;sbit fmq=P30;sbit wei1=P31;sbit wei2=P32;sbit wei3=P33;sbit scl=P34; / 24c08 SCLsbit sda=P35; / 24c08 SDAsbit LED=P37;char dis3=0;unsigned char num=1,num1=0,num2=0;char Time_temp=0;char DIG_C1=0;char DIG_C2=0;char DIG_C3=0;uchar flag=1,adm=0,flagg=1,adm1=1,flagb=0;uint scs=0,ecs=0;char Tim_flog=0;int Tim_temp1=0;char Tim_CNT=0;void delay() /delay 5usvoid Delay10ms(unsigned int c)unsigned char a, b;for (;c>0;c-)for (b=15;b>0;b-)for (a=130;a>0;a-);void display(uint i,uint j,uint k)dis0=i;dis1=j;dis2=k;unsigned char KeyScan(void)unsigned char cord_h,cord_l;KeyPort=0x0f;cord_h=KeyPort&0x0f;if(cord_h!=0x0f)Delay10ms(1);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;/0case 0x7d:return 1;break;/1case 0x7b:return 2;break;/2case 0x77:return 3;break;/3case 0xbe:return 4;break;/4case 0xbd:return 5;break;/5case 0xbb:return 6;break;/6case 0xb7:return 7;break;/7case 0xde:return 8;break;/8case 0xdd:return 9;break;/9case 0xdb:return 10;break;/acase 0xd7:return 11;break;/bcase 0xee:return 12;break;/ccase 0xed:return 13;break;/dcase 0xeb:return 14;break;/ecase 0xe7:return 15;break;/fdefault:return 0xff;break;void Tim_Iint(void)TMOD &= 0XF0;TMOD |= 0X01;TL0 = (65535-1000)%256;TH0= (65535-1000)/256;ET0=1;TR0=1;EA=1;void Close_DIG(char i,char k,char j)if(i=1)DIG_C1=1;if(i=0)DIG_C1=0;if(k=1)DIG_C2=1;if(k=0)DIG_C2=0;if(j=1)DIG_C3=1;if(j=0)DIG_C3=0;void Time0(void) interrupt 1 using 1char i;TL0 = (65535-1000)%256;TH0= (65535-1000)/256;if(Tim_flog=1)Tim_temp1+;if(Tim_temp1>1000)Tim_temp1=0;Tim_CNT+;if(Time_temp=0)if(DIG_C1=1)P2=DIS_SEG7dis0;wei1=0;wei3=1;wei2=1;if(DIG_C1=0)wei1=1;wei3=1;wei2=1;Time_temp=1;goto end;if(Time_temp=1)if(DIG_C2=1)P2=DIS_SEG7dis1;wei1=1;wei2=0;wei3=1;if(DIG_C2=0)wei1=1;wei3=1;wei2=1;Time_temp=2;goto end;if(Time_temp=2)if(DIG_C3=1)P2=DIS_SEG7dis2;wei1=1;wei2=1;wei3=0;if(DIG_C3=0)wei1=1;wei2=1;wei3=1;Time_temp=0;goto end;end:i=0;void start() /开始信号sda=1;delay();scl=1;delay();sda=0;delay();void stop() /停止信号sda=0;delay();scl=1;delay();sda=1;delay();void respons() /应答uchar i;scl=1;delay();while(sda=1)&&(i<250)i+;scl=0;delay();void init_24c08() /初始化24C02sda=1;delay();scl=1;delay();void write_byte(uchar date)uchar i,temp;temp=date;for(i=0;i<8;i+)temp=temp<<1;scl=0;delay();sda=CY;delay();scl=1;delay();/scl=0;/ delay();scl=0;delay();sda=1;delay();uchar read_byte()uchar i,k;scl=0;delay();sda=1;delay();for(i=0;i<8;i+)scl=1;delay();k=(k<<1)|sda;scl=0;delay();return k;void write_24c08(uchar address,uchar shuju) /给指定地址中写入数据start();write_byte(0xa0); / 最低位为0写,1读respons();write_byte(address);respons();write_byte(shuju);respons();stop();Delay10ms(1);uchar read_24c08(uchar address) /从24c08指定地址中读出数据uchar date;start();write_byte(0xa0);respons();write_byte(address);respons();start();write_byte(0xa1);respons();date=read_byte();stop();Delay10ms(1);return date;void main(void)char temp1=0,temp2=0,temp3=0;char i=0,j=0,k=0,m=0;char dis_temp=0;uchar cnt1=0,cnt2=0,cnt3=0;/ char a,b,c;init_24c08();Tim_Iint();Close_DIG(1,1,1);for(m=1;m<=16;m+)Mm-1=read_24c08(m);cnt1= read_24c08(20);while(1)num=KeyPro();Close_DIG(1,1,1);display(0,15,15);/判断管理员标志位admif(adm=0)if(adm1=0)if(num=14)Close_DIG(0,0,0);cnt1=0;while(1)num=KeyPro();if(num<10)Close_DIG(1,1,1);Mcnt1=num;while(num=KeyPro();temp1+;cnt1+;if(temp1=4)temp1=1;if(num=13)cnt1-;if(cnt1<=0)cnt1=0;temp1-;if(temp1=0)temp1=3;if(temp1=1)display(Mcnt1-1,16,16);if(temp1=2)display(16,Mcnt1-1,16);if(temp1=3)display(16,16,Mcnt1-1);if(num=15)for(k=1;k<=cnt1;k+)write_24c08(k,Mk-1);write_24c08(20,cnt1);adm1=1;break;Delay10ms(1);if(num=12)Close_DIG(0,0,0);cnt2=0;while(1)Tim_flog=1;num=KeyPro();if(num<10)Close_DIG(1,1,1);Rcnt2=num;while(num=KeyPro();temp2+;cnt2+;if(temp2=4)temp2=1;if(num=13)cnt2-;if(cnt2<=0)cnt2=0;temp2-;if(temp2=0)temp2=3;if(temp2=1)display(Rcnt2-1,16,16);if(temp2=2)display(16,Rcnt2-1,16);if(temp2=3)display(16,16,Rcnt2-1);if(num=15)Tim_CNT=0;Tim_flog=0;if(cnt1=cnt2)for(j=0;j<cnt1;j+)/判断密码是否正确flag=flag&&(Mj=Rj);if(flag)scs+;display(8,8,8);Delay10ms(800);cnt2=0;temp2=0;display(0,(scs/10),(scs%10);Delay10ms(800);break;elseecs+;Close_DIG(0,0,0);cnt2=0;temp2=0;flag=1;Tim_flog=0;Tim_CNT=0;else ecs+;Close_DIG(0,0,0);cnt2=0;temp2=0;flag=1;Tim_flog=0;Tim_CNT=0;Delay10ms(1);if(Tim_CNT=12)adm=1;fmq=0;flagb=1;Tim_flog=0;Tim_CNT=0;break;if(ecs>=3)adm=1;fmq=0;flagb=1;Tim_flog=0;Tim_CNT=0;break;if(num=10)Close_DIG(0,0,0);if(num=11)Close_DIG(0,0,0);cnt3=0;while(1)num=KeyPro();if(num<10) Close_DIG(1,1,1);Rcnt3=num;while(num=KeyPro();temp3+;cnt3+;if(temp3=4)temp3=1;if(num=13)cnt3-;if(cnt3<=0)cnt3=0;temp3-;if(temp3=0)temp3=3;if(temp3=1)display(Rcnt3-1,16,16);if(temp3=2)display(16,Rcnt3-1,16);if(temp3=3)display(16,16,Rcnt3-1);if(num=15)Tim_CNT=0;Tim_flog=0;if(cnt3=6)for(j=0;j<6;j+)flagg=flagg&&(Gj=Rj);if(flagg&&flagb=0)ecs=0;fmq=1;adm=0;adm1=0;Tim_flog=0;Tim_CNT=0;break;else if(flagg&&flagb=1) Tim_flog=0;Tim_CNT=0;ecs=0;fmq=1;adm=0;adm1=1;flagb=0;break;elseTim_flog=0;Tim_CNT=0;flagg=1;Delay10ms(1);Delay10ms(1);

    注意事项

    本文(单片机原理与应用技术课程设计-基于单片机控制电子密码锁报告(12页).doc)为本站会员(1595****071)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开