已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
pic单片机原理及应用课程设计报告电子密码锁专业:电子信息工程姓名:哈哈哈 班级: (1) 学号:000000000 2010.12.29【摘要】:随着生活水平的提高,人们也越来越重视个人的隐私及财产安全,要设计主要基于pic单片机系统、键盘、lcd。本系统可完成开锁、修改密码、掉电后密码受保护以及三次输入密码错误报警功能。【关键词】:电子密码锁、键盘、lcd。【目录】: 第一章:主要元器件介绍第一节:pic介绍 1第二节:lcd1602介绍2第二节:矩阵键盘介绍7 第二章:电子密码锁的设计 第一节:密码锁原理图及工作原理8第二节:密码锁程序9第三章:设计心得及参考文献17第一章 主要元器件介绍第一节、 pic单片机单片机是一块芯片上集成了中央处理器单元、数据存储器、程序存储器、输入/输出和定时器/计数器等部件的一台小型计算机。随着芯片集成度的提高,单片机的功能得以迅速的扩充,特别是pic单片机,增加了许多强大的外围模块,从而给用户带来了极大的便利。pic单片机有如下特点:1、哈佛总线结构;2、risc技术;3、指令特色;4、功耗低;5、驱动能力强;6、同步串行数据传送方式;7、应用界面友好、开发方便;8、程序存储器版本齐全。1-1 pic16f877a框图1-2引脚示意图: 1-3 特殊功能寄存器 第二节、lcd1602第二节、 矩阵键盘 1.矩阵式键盘的结构与工作原理在键盘中按键数量较多时,为了减少i/o口的占用,通常将按键排列成矩阵形式,如图所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。 矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的i/o口作为输出端,而列线所接的i/o口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。第二章、电子密码锁的设计第一节、原理图及工作原理一、原理图二、原理框图单片机控制系统lcd显示蜂鸣器键盘三、设计原理用户根据屏幕提示操作,单片机通过键盘扫描,检测输入密码是否正确,如果正确则进入系统,进行下一步操作。进入系统后,刚继续检测用户输入的功能号,根据功能号判断下一步要执行的程序,否则一直在功能界面等待用户指令。其中在功能界面中,按下a则为退出功能界面,下次要再进入则须再输入正确密码,按下b则可重设密码,在这里须两次输入相同新密码后才可设定成功,设定成功后退至功能界面,继续等待用戶指令。第二节、 电子密码所程序一、 程序流程图初始化调用lcd显示子程序,显示“press d to start”调用键盘扫程序检测d是否被按下清屏调用lcd程序,清屏,并显示“enter password”调用输入六位密码子程序 调用密码检测程序检测密码是否正确调用显示程序,清屏,显示“a:exit b:reset num:function”执行读按键子程序执行退出程序执行密码重设程序执行其他程序输入错误次数加1,并判断是否达到3次执行报警程序 是 二、 程序#include#include#includestring.h_config(0x3b31);#define uint unsigned int#define uchar unsigned charchar inword6;char passwd6;char newword6;void delay(uint t);void init();void sound200ms(unsigned char fre_repeat,unsigned char s_max,unsigned char s_min);void sounddelay(unsigned char delay_count);/*/#define keybord portbchar keyscan();void keyinit();char readkey();#define line1 rb0#define line2 rb1#define line3 rb2#define line4 rb3/*/#define rs ra5#define rw ra4#define e ra3char table117;void lcdportinit(); void lcd_init(); void write_data(uint data); void write_com(uint com); void writelcd(uint x,uint y,char *pt);void lcdpoint1();void lcdpoint2();void lcdpoint3();void lcdpoint4();void lcdpoint5();void lcdclr();int cn=0;char key=0;/*扫描*/void ipassword();/输入密码int testword();/测试/*/void reset();/*主程序*/void main()int count=0;init();while(1)lcdclr(); /清屏lcdpoint1();if(readkey()=d)lcdclr(); sprintf(table1,enter password:);/显示enter password:writelcd(0,0,table1);ipassword();if(testword()lcdclr();/清屏while(1)lcdpoint3();/显示操作提示readkey();if(key=b)reset();/重设密码lcdclr();/清屏continue;if(key=a) lcdclr();break;/退出系统if(key=1) music();else count+;while(count2) 报警程序sound200ms(4,0x93,0x47);/*按键程序*/void keyinit()trisb=0x0f;/高四位当输入,低四位当输出char keyscan()char temp1=0;keybord= 0x10;asm(nop); if( !line1 ) return temp1=1; if( !line2 ) return temp1=4; if( !line3 ) return temp1=7 ; if( !line4 ) return temp1=*; keybord= 0x20;asm(nop); if( !line1 ) return temp1=2; if( !line2 ) return temp1=5; if( !line3 ) return temp1=8; if( !line4 ) return temp1=0; keybord= 0x40;asm(nop); if( !line1 ) return temp1=3; if( !line2 ) return temp1=6; if( !line3 ) return temp1=9; if( !line4 ) return temp1=#; keybord= 0x80;asm(nop); if( !line1 ) return temp1=a;/返回 if( !line2 ) return temp1=b; if( !line3 ) return temp1=c;/重设 if( !line4 ) return temp1=d;/enter键 return temp1 ;char readkey()/char temp=0; while(!keyscan();temp=keyscan();delay(10);if(keyscan()=temp)temp=keyscan();rc0=1; else temp=0;while(keyscan();delay(10);if(keyscan()=0)rc0=0;key=temp;return temp;/*输入密码*/void ipassword()uint i;for(i=0;i6;i+)inwordi=readkey();sprintf(table1,*); writelcd(i,1,table1);while(readkey()!=#);/*验证密码*/int testword()char i=0,temp2=1;for(i=0;i6;i+)/从eeprom读密码passwdi=eeprom_read(i);for(i=0;i6;i+)/和eeprom密码进行比较if(passwdi!=inwordi) return temp2=0;return temp2;/*重设密码*/void reset()int k;re:lcdclr();sprintf(table1,enter new word:);/第一次输入新密码writelcd(0,0,table1);for(k=0;k6;k+)inwordk=readkey();sprintf(table1,%d,inwordk);writelcd(k,1,table1);while(readkey()!=#);lcdclr();sprintf(table1,enter again:);/再次输入新密码writelcd(0,0,table1);for(k=0;k6;k+)newwordk=readkey();sprintf(table1,%d,newwordk);writelcd(k,1,table1);while(readkey()!=#);for(k=0;k6;k+) if(newwordk!=inwordk) goto re;for(k=0;k0;t-)for(b=110;b0;b-);/*报警*/void sounddelay(unsigned char delay_count)unsigned char i; for (i = delay_count;i 0;i-); void sound200ms(unsigned char fre_repeat,unsigned char s_max,unsigned char s_min)unsigned char i, j;for (i = s_max - s_min;i 0;i-) for (j = fre_repeat;j 0;j-) rc0 = 1; sounddelay(s_min + i); rc0 = 0; sounddelay(s_min + i); /*初始化*/void init()keyinit();lcdportinit();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 古代汉语的词类活用
- 信息技术(第2版)(拓展模块)教案1-模块3 3.1 认知大数据
- 高中物理第一章电场第一节认识静电课件粤教版选修3-
- 小学生心理健康教育教案12
- 初中健康教育教案
- 课时4 七年级 Unit 4 2025年中考英语(仁爱版)一轮复习基础练(含答案)
- 【中考考点基础练】阶段检测二 力学综合素养提升 2025年物理中考总复习(福建)(含答案)
- 2024至2030年中国晶闸管交流电力控制柜数据监测研究报告
- 2010-2012年中国工程塑料行业市场研究及投资分析报告
- 2024至2030年中国工艺霓虹灯数据监测研究报告
- 40万吨年NaCl蒸发工段设计——毕业设计
- 毕业设计论文 红外线报警器设计
- 工程师手册地质篇
- 人教版-九年级上英语期中复习
- 用hypermesh设置Abaqus模型一般过程
- 《质量管理成熟度》ppt课件
- 110kV变电站综合自动化系统改造工程施工组织设计
- Miranda-Kaleido-X-16安装调试手册
- 开发利用长江岸线审查流程图
- 第六章 机械连接
- 维修隐患排查表
评论
0/150
提交评论