单片机课程设计之电子密码锁_第1页
单片机课程设计之电子密码锁_第2页
单片机课程设计之电子密码锁_第3页
单片机课程设计之电子密码锁_第4页
单片机课程设计之电子密码锁_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

课程设计(综合实验)报告( 2009 - 2010 年度第 二 学期)名 称: 微处理器系统课程设计 题 目: 电子密码锁设计 院 系: 电子与通信工程系 班 级: 电子0702班 学 号: 200703020201 学生姓名: 白羽峰 指导教师: 张宁 设计周数: 1周 成 绩: 日期: 2010 年 7 月 单片机课程设计之电子密码锁一、 课程设计要求1.通过键盘输入密码。密码正确与错误进行相应的音乐提示,与液晶显示提示。3次按下错误密码则锁死,禁止信号输入。2.通过超级密码(长度为16位)进入密码修改模式,进行密码修正,用户密码长度为8位。二、实验目的进一步的掌握使用ICC进行编程以及程序调试,熟悉并掌握AVR单片机片上外设功能及其使用,熟练掌握单片机学习板上矩阵键盘、1602液晶、蜂鸣器、EEPROM(AT24C02)等外设的使用以及和单片机间的通信。三、设计思路利用EEPROM(AT24C02)掉电不丢失的特性设计电子密码锁,先向AT24C02中写入一组数据作为密码(密码设定),然后进入密码输入界面,输入密码并进行密码真伪判别,密码真伪有不同对应的提示,表现在液晶显示和蜂鸣器鸣响上,出现三次密码输入错误则锁死,不能进行任何操作,只能关闭电源重新开始。四、实验源程序代码如下:#include #include #include #define uchar unsigned char#define uint unsigned int#define LCD_EN BIT(PC3)#define LCD_RS BIT(PC2)/EEPROM控制寄存器位定义:#define EERE 0/读#define EEWE 1/写#define EEMWE 2/总写入#define WWRIE 3/中断uint add8=0x0100,0x0101,0x0110,0x0111,0x1000,0x1001,0x1010, 0x1011;uchar sc16=0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38, 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38;uchar title=Code:;uchar title1=Hint:;uchar title2=Error!;uchar title3=OK!;uchar title8=Hello!I like AVR;uchar title4=Warnning!;uchar title5=Super Code:;uchar title6=Input New Code:;uchar title7=Set Code:;uint xians=0;uchar key_flag;unsigned data_temp;void_init(void) DDRB=0xff;/定义B口输出 PORTB=0xff;void eeprom_w(uint eeadd, uchar eedata) while(EECR&(1 EEWE);/写等待 EEAR=eeadd;/设置写入地址 EEDR=eedata;/设置写入数据 EECR|=(1EEMWE);/总写入允许 EECR|=(1 EEWE);/开始写入char eeprom_r(uint eeadd) while(EECR&(1 EEWE);/写等待 EEAR=eeadd;/设置读入地址 EECR|=(1EERE);/读命令 return EEDR;/返回数据void delay_1ms(void) uint i; for (i=0;i1140;i+); void delay(uint n) uint i=0; for (i=0;in;i+) delay_1ms(); void LCD_Write_half_char(void) PORTC &= 0x0F; /portc03=0 PORTC |= (data_temp4; LCD_Write_half_char();data_temp = data; LCD_Write_half_char();delay(1); void LCD_init(void) LCD_write_char(0,0x38); delay(1); LCD_write_char(0,0x02); delay(1); LCD_write_char(0,0x28); / 显示模式设置(不检测忙信号) delay(1); LCD_write_char(0,0x08); / 显示关闭 delay(1); LCD_write_char(0,0x01); / 显示清屏 delay(1); LCD_write_char(0,0x06); / 显示光标移动设置 delay(1); LCD_write_char(0,0x0c); / 显示开及光标设置 delay(5); uchar key_read(void) uchar i; DDRA = 0x0E; /获取列地址 PORTA = 0x0E; i = PINA; DDRA = 0xf0; /获取行地址 PORTA = 0xf0; i |= PINA; DDRA = 0x00; /输出复位 switch (i) /将按键码转换成键值 case 0x7d: return 0x31; case 0xbd: return 0x32; case 0xdd: return 0x33; case 0xed: return 0x34; case 0x7b: return 0x35; case 0xbb: return 0x36; case 0xdb: return 0x37; case 0xeb: return 0x38; case 0x77: return 0x2a; case 0xb7: return 0x39; case 0xd7: return 0x30; case 0xe7: return 0x23; default : return 0x00; delay(10); void chush(void) uchar i=0,k,j,temp=0x00,m,n; uchar x8=0; uint add18=0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c;DDRC=0xff;PORTC=0x00; LCD_init();LCD_write_char(0,0x80);for(k=0;k5;k+) LCD_write_char(1,titlek);LCD_write_char(0,0x80+0x40);for(j=0;j5;j+) LCD_write_char(1,title1j);void main(void) uchar i=0,k,j,temp=0x00,m,n,l,w=0,y=0,z,v,t=0,dkz; uchar x8=0,dec8=0,p16=0,c8=0; uint add18=0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c;uint add216=0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9, 0xca,0xcb,0xcc,0xcd,0xce,0xcf;DDRD=0xFF;PORTD=0xF0;DDRC=0xff;PORTC=0x00;LCD_init();LCD_write_char(0,0x80);for(k=0;k9;k+) LCD_write_char(1,title7k);while(i8) ci=key_read(); if(ci!=0&ci!=temp) LCD_write_char(0,add2i); LCD_write_char(1,0x2a); temp=key_read(); i+; /*delay(2); dkz=PIND; if(dkz=0x70) i=8;*/ if(i=8) temp=0;i=0;for(m=0;m8;m+) void_init(); eeprom_w(addm,cm); /将数据写入EEPROM中的单元 PORTB=eeprom_r(addm);/读取EEPROM中的数据,送显 decm=eeprom_r(addm); delay(20); while(1) delay(2); dkz=PIND; if(dkz=0xE0) LCD_write_char(0,0x01); / 显示清屏 LCD_write_char(0,0x80); for(k=0;k5;k+) LCD_write_char(1,titlek); LCD_write_char(0,0x80+0x40); for(j=0;j5;j+) LCD_write_char(1,title1j); xi=key_read(); if(xi!=0&xi!=temp) LCD_write_char(0,add1i); LCD_write_char(1,0x2a); temp=key_read();i+;if(i=8) temp=0; i=0; for(m=0;m8;m+) if(xm=decm) w+; if(w=8) LCD_write_char(0,0x80+0x45); for(n=0;n3;n+) LCD_write_char(1,title3n); PORTD=BIT(5); delay(100); PORTD=BIT(5); w=0; delay(200); LCD_write_char(0,0x01); / 显示清屏 LCD_write_char(0,0x80); for(k=0;k16;k+) LCD_write_char(1,title8k); else LCD_write_char(0,0x80+0x45); for(n=0;n6;n+) LCD_write_char(1,title2n); for(l=0;l6;l+) PORTD=BIT(5); delay(50); y+; if(y=3) y=0; LCD_write_char(0,0x01); / 显示清屏 LCD_write_char(0,0x80); for(z=0;z9;z+) LCD_write_char(1,title4z); dkz=PIND; while(dkz=0xF0|dkz=0x70);delay(2);dkz=PIND;if(dkz=0x70) chush(); else if(dkz=0xB0) LCD_write_char(0,0x01); / 显示清屏 LCD_write_char(0,0x80); for(z=0;z11;z+) LCD_write_char(1,title5z); while(i16) pi=key_read(); if(pi!=0&pi!=temp) LCD_write_char(0,add2i); LCD_write_char(1,0x2a); temp=key_read(); i+; if(i=16) temp=0; i=0; for(m=0;m16;m+) if(pm=scm) t+; if(t=16) LCD_write_char(0,0x01); / 显示清屏 LCD_write_char(0,0x80); for(z=0;z15;z+) LCD_write_char(1,title6z); while(i8) ci=key_read(); if(ci!=0&ci!=temp) LCD_write_char(0,add2i); LCD_write_char(1,0x2a); temp=key_read(); i+; if(i=8) temp=0; i=0; for(m=0;m8;m+) void_init(); eeprom_w(addm,cm); /将数据写入EEPR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论