PIC单片机原理及应用课程设计报告电子密码锁_第1页
PIC单片机原理及应用课程设计报告电子密码锁_第2页
PIC单片机原理及应用课程设计报告电子密码锁_第3页
PIC单片机原理及应用课程设计报告电子密码锁_第4页
PIC单片机原理及应用课程设计报告电子密码锁_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、pic单片机原理及应用课程设计报告电子密码锁专业:电子信息工程姓名:哈哈哈 班级: (1) 学号:000000000 2010.12.29【摘要】:随着生活水平的提高,人们也越来越重视个人的隐私及财产安全,要设计主要基于pic单片机系统、键盘、lcd。本系统可完成开锁、修改密码、掉电后密码受保护以及三次输入密码错误报警功能。【关键词】:电子密码锁、键盘、lcd。【目录】: 第一章:主要元器件介绍第一节:pic介绍 1第二节:lcd1602介绍2第二节:矩阵键盘介绍7 第二章:电子密码锁的设计 第一节:密码锁原理图及工作原理8第二节:密码锁程序9第三章:设计心得及参考文献17第一章 主要元器件介

2、绍第一节、 pic单片机单片机是一块芯片上集成了中央处理器单元、数据存储器、程序存储器、输入/输出和定时器/计数器等部件的一台小型计算机。随着芯片集成度的提高,单片机的功能得以迅速的扩充,特别是pic单片机,增加了许多强大的外围模块,从而给用户带来了极大的便利。pic单片机有如下特点:1、哈佛总线结构;2、risc技术;3、指令特色;4、功耗低;5、驱动能力强;6、同步串行数据传送方式;7、应用界面友好、开发方便;8、程序存储器版本齐全。1-1 pic16f877a框图1-2引脚示意图: 1-3 特殊功能寄存器 第二节、lcd1602第二节、 矩阵键盘 1.矩阵式键盘的结构与工作原理在键盘中按

3、键数量较多时,为了减少i/o口的占用,通常将按键排列成矩阵形式,如图所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。 矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的i/o口作为输出端,而列线所接的i/o口则作为输入。这样,当按键没有按下时,所有的输出端都

4、是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。第二章、电子密码锁的设计第一节、原理图及工作原理一、原理图二、原理框图单片机控制系统lcd显示蜂鸣器键盘三、设计原理用户根据屏幕提示操作,单片机通过键盘扫描,检测输入密码是否正确,如果正确则进入系统,进行下一步操作。进入系统后,刚继续检测用户输入的功能号,根据功能号判断下一步要执行的程序,否则一直在功能界面等待用户指令。其中在功能界面中,按下a则为退出功能界面,下次要再进入则须再输入正确密码,按下b则可重设密码,在这里须两次输入相同新密码后才可设定成功,设定成功后退至功

5、能界面,继续等待用戶指令。第二节、 电子密码所程序一、 程序流程图初始化调用lcd显示子程序,显示“press d to start”调用键盘扫程序检测d是否被按下清屏调用lcd程序,清屏,并显示“enter password”调用输入六位密码子程序 调用密码检测程序检测密码是否正确调用显示程序,清屏,显示“a:exit b:reset num:function”执行读按键子程序执行退出程序执行密码重设程序执行其他程序输入错误次数加1,并判断是否达到3次执行报警程序 是 二、 程序#include#include#includestring.h_config(0x3b31);#define u

6、int 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 re

7、adkey();#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();voi

8、d 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,

9、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

10、=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;as

11、m(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 read

12、key()/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()!

13、=#);/*验证密码*/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();

14、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(

15、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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论