2022年2022年简易密码锁 .pdf

上传人:C****o 文档编号:33379053 上传时间:2022-08-10 格式:PDF 页数:16 大小:231.93KB
返回 下载 相关 举报
2022年2022年简易密码锁 .pdf_第1页
第1页 / 共16页
2022年2022年简易密码锁 .pdf_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《2022年2022年简易密码锁 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年简易密码锁 .pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、0 单片机小程序程设计简易密码锁姓名 :静学号 :2011 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 16 页 - - - - - - - - - 1 目录功能介绍 . 2框图介绍 . 2引脚介绍 . 3硬件电路图 . 5程序设计 . 6设计心得 . 12 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 16 页 - - - - - - - -

2、 - 2 功能介绍实现功能:一共四个按键,分别为P3口的 6,5,4,3对应数字 1234,每按一下键,若正确第一个数码管显示6,若错误数码管显示9,当四个键全部按下后全部正确则另一个数码管显示P,并且流水灯流动,若错误则显示E.初始密码是 3142. 框图介绍按键单片机数码管流水灯名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 16 页 - - - - - - - - - 3 引脚介绍VCC :供电电压。GND :接地。P0 口: P0 口为一个 8 位漏级开路双向I/

3、O 口,该单片机开发板的P0 口接第二个数码管。P1 口: P1 口是一个内部提供上拉电阻的8 位双向 I/O 口,该单片机开发板的P1 口接第 1个数码管 . P2 口: P2 口为一个内部上拉电阻的8位双向 I/O 口,该单片机开发板的P2口接流水灯。P2 口在 FLASH 编程和校验时接收高八位地址信号和控制信号。P3 口: P3 口管脚是 8 个带内部上拉电阻的双向I/O 口,该单片机开发板的P3口接按键。P3 口还作为AT89C52 的一些特殊功能口。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -

4、 - - - - - 第 4 页,共 16 页 - - - - - - - - - 4 管脚备选功能P3.0 RXD (串行输入口)P3.1 TXD (串行输出口)P3.2 /INT0 (外部中断0)P3.3 /INT1 (外部中断1)P3.4 T0(记时器0 外部输入)P3.5 T1(记时器1 外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)RST:复位输入。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN 有效。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -

5、- - - - - 名师精心整理 - - - - - - - 第 5 页,共 16 页 - - - - - - - - - 5 硬件电路图XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P

6、3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C52D1LEDD2LEDD3LEDD4LEDD5LEDD6LEDD7LEDD8LEDR110kR210kR310kR410kR510kR610kR710kR810kR1710kR1610kR1510kR1410kR1310kR1210kR1110kR17510R1810kP2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7R1010kX

7、1CRYSTALC122pC222pC322pR11k+5V各模块介绍:按键图:R1810kP2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 16 页 - - - - - - - - - 6 流水灯电路图:D1LEDD2LEDD3LEDD4LEDD5LEDD6LEDD7LEDD8LEDR17510P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7数码管显示:R110kR210kR310kR410k

8、R510kR610kR710kR810kR1710kR1610kR1510kR1410kR1310kR1210kR1110kR1010k程序设计/* 实现功能:一共四个按键,分别为 P3口的 6,5,4,3 对应数字 1234, 每按一下键,若正确第一个数码管显示6,若错误数码管显示9,当四个键全部按下后全部正确则另一个数码管显示P, 并且流水灯流动,若错误则显示 E。 初始密码是 3142.*/ #include #include sbit key1=P36; sbit key2=P35; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -

9、- - - 名师精心整理 - - - - - - - 第 7 页,共 16 页 - - - - - - - - - 7 sbit key3=P34; sbit key4=P33; sbit key5=P37; unsigned char mima=3,1,4,2; unsigned char rece4; unsigned char nn=0; unsigned char tt; unsigned char index = 0; unsigned char x; unsigned char code table=0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82, 0XF8,

10、0X80,0X90,0 x8c,0 x86; unsigned char keyscan(); void test_cror (void); void main() unsigned int delay; P0=table0; index = 0; while(1) switch(keyscan() /扫描按键 case 1: receindex=1; if(receindex=mimaindex) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 16 页 - - - -

11、 - - - - - 8 P0 = table6; nn +; else P0 = table9; index+; break; case 2: receindex=2; if(receindex=mimaindex) P0 = table6; nn +; else P0 = table9; index+; break; case 3: receindex=3; if(receindex=mimaindex) P0 = table6; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第

12、9 页,共 16 页 - - - - - - - - - 9 nn +; else P0 = table9; index+; break; case 4: receindex=4; if(receindex=mimaindex) P0 = table6; nn +; else P0 = table9; index+; break; case 0: break; if (key5=0) for(x=200;x0;x-); if (key5=0)/防抖动 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - -

13、- - - 第 10 页,共 16 页 - - - - - - - - - 10 if(index = 4) index = 0;/index 清零,密码从第一个开始if(nn=4)/ 四个密码均正确 P0=table10; test_cror (); else P0=table11; nn=0;/nn 清零,下次正确再记录 for(delay = 0;delay =20000;delay+); void test_cror (void) / 四个密码都正确,流水灯流动 unsigned int delay; char a; char b; P2= 0 xfe; while(1) a = P2

14、; b = _crol_(a,1); P2 = b; for(delay = 0;delay 0;x-); if (key1=0) P1=table1; P2_0 = P2_0; tt=1; return tt; else if (key2=0) for(x=200;x0;x-); if (key2=0) P1=table2; P2_1 = P2_1; tt=2; return tt; else if (key3=0) for(x=200;x0;x-); if (key3=0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名

15、师精心整理 - - - - - - - 第 12 页,共 16 页 - - - - - - - - - 12 P1=table3; P2_2 = P2_2; tt=3; return tt; else if (key4=0) for(x=200;x0;x-); if (key4=0) P1=table4; P2_3 = P2_3; tt=4; return tt; else tt = 0; return tt; 设计心得本次单片机小程序中, 我第一次接触到了用单片机实现一些功能;也是第一次自己设计程序完成功能的实现。为了设计密码锁, 在做本程序之前我首先学习如何检测按键。当时学习的是4*4 的

16、键盘,检测是否有键按下的方法是将P口赋值:0 xfe,即将 P口的第一位赋名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 16 页 - - - - - - - - - 13 0,然后重新读取 P口的值,若读取结果不等于0 xf0,则说明有键按下,将数据读取做对比,可以判断出按下的哪位按键。以P3口为例,程序为:P3=0 xfe; temp=P3; temp=temp&0 xf0; while(temp!=0 xf0) delay(5); temp=P3; temp=te

17、mp&0 xf0; while(temp!=0 xf0)/ 防抖动设计 temp=P3; switch(temp) case 0 xee:num=1; break; case 0 xde:num=2; break; case 0 xbe:num=3; break; case 0 x7e:num=4; break; while(temp!=0 xf0)/ 松手检测 temp=P3; temp=temp&0 xf0; 本实验用的板子是8 按键,所以程序非常简单,有按键按下则P2口那位将为 0。这次程序实现中, 我遇到的严重问题是按下的按键读数无法进行对比,所以显示一直出问题,下面是我开始的错误程序

18、:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 16 页 - - - - - - - - - 14 while(1) if(index=4) index=0; switch(keyscan() case 1: receindex=1; index+; break; case 2: receindex=2; index+; break; case 3: receindex=3; index+; break; case 4: receindex=4; index+; br

19、eak; for(nn=0;nn4;nn+) if(recenn=mimann) P0=table6; setup+; if(setup=4) P0=table10; else P0=table11; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 16 页 - - - - - - - - - 15 错误原因是:进入for 循环以后,每做一次对比P0口将会显示, for 循环用时很少,程序进行的很快,上一次对比一完下一个对比的结果又将显示,因为P0口的显示不正常, 我们

20、也看不到期望的结果。 正确方法是, 每按一次按键进行一次对比,显示正确与否。最后程序无法正常运行是因为一个小小的忽略,如下:unsigned char mima=2,1,3,4;/初始密码unsigned char rece4;/接受数据作为输入密码开始设计程序是, unsigned char rece,这样总是无法正确读取第一个按键,后来讲数组明确长度后,程序得意正常运行。最后,我的体悟是做程序不仅要有严谨正确的思路,还有要细心的态度, 一遍一遍地检测尝试运行, 一次一次从失败中历练耐心, 才可以真正做出可以实现初衷的功能。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 16 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

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

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