实用密码锁.docx
- 文档编号:24420002
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:14
- 大小:622.99KB
实用密码锁.docx
《实用密码锁.docx》由会员分享,可在线阅读,更多相关《实用密码锁.docx(14页珍藏版)》请在冰豆网上搜索。
实用密码锁
实验报告
实验课程名称MCS-51系列单片机系统
实验项目名称实用密码锁
年级1
专业
姓名
学号
实验时间:
2016年6月9日
一、实验目的:
1.这次的实验是使用单片机制作一个小的课程设计。
通过本次实验进一步熟悉和掌握单片机的结构及工作原理,巩固和加深本课程的基本知识,掌握单片机在实际中的简单应用。
2.综合运用本课程分析和解决单片机课程中设计问题。
3.学习电子设计的一般方法,掌握AT89C51芯片以及简单电子设计过程和运行方式,培养正确的设计思想和分析问题、解决问题的能力,特别是总体设计能力。
二、实验内容:
1.使用单片机设计实用密码锁,由程序输入原始密码。
然后由用户通过矩阵键盘输入密码,如果正确,则输入红灯亮,如果连续输入三次错误,单片机输出警告信息,同时不能再次输入,等一定的时间过后才可以再次输入。
2.该设计主要用到了单片机,矩阵键盘和LCD显示屏。
三、实验步骤:
1、实验程序部分。
1.延时函数程序
#include"delay.h
voidDelayUs2x(unsignedchart)
{
while(--t);
}
voidDelayMs(unsignedchart)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
2.键盘程序
#include
#include"keyboard.h"
#include"delay.h"
#defineKeyPortP3
unsignedcharKeyScan(void)
{
unsignedcharcord_h,cord_l;
KeyPort=0x0f;
cord_h=KeyPort&0x0f;
if(cord_h!
=0x0f)
{
DelayMs(10);
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);
}
unsignedcharKeyPro(void)
{
switch(KeyScan())
{
case0x7e:
return0;break;//0
case0x7d:
return1;break;//1
case0x7b:
return2;break;//2
case0x77:
return3;break;//3
case0xbe:
return4;break;//4
case0xbd:
return5;break;//5
case0xbb:
return6;break;//6
case0xb7:
return7;break;//7
case0xde:
return8;break;//8
case0xdd:
return9;break;//9
case0xdb:
return10;break;//a
case0xd7:
return11;break;//b
case0xee:
return12;break;//c
case0xed:
return13;break;//d
case0xeb:
return14;break;//e
case0xe7:
return15;break;//f
default:
return0xff;break;
}
}
仿真图片
3.显示屏程序
#include"1602.h"
#include"delay.h"
#defineCHECK_BUSY
sbitRS=P2^4;
sbitRW=P2^5;
sbitEN=P2^6;
#defineRS_CLRRS=0
#defineRS_SETRS=1
#defineRW_CLRRW=0
#defineRW_SETRW=1
#defineEN_CLREN=0
#defineEN_SETEN=1
#defineDataPortP0
bitLCD_Check_Busy(void)
{
#ifdefCHECK_BUSY
DataPort=0xFF;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return(bit)(DataPort&0x80);
#else
return0;
#endif
}
voidLCD_Write_Com(unsignedcharcom)
{
DelayMs(5);
RS_CLR;
RW_CLR;
EN_SET;
DataPort=com;
_nop_();
EN_CLR;
}
voidLCD_Write_Data(unsignedcharData)
{
while(LCD_Check_Busy());
DelayMs(5);
RS_SET;
RW_CLR;
EN_SET;
DataPort=Data;
_nop_();
EN_CLR;
}
voidLCD_Clear(void)
{
LCD_Write_Com(0x01);
DelayMs(5);
}
voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s)
{
while(*s)
{
LCD_Write_Char(x,y,*s);
s++;x++;
}
}
voidLCD_Write_Char(unsignedcharx,unsignedchary,unsignedcharData)
{
if(y==0)
{
LCD_Write_Com(0x80+x);
}
else
{
LCD_Write_Com(0xC0+x);
}
LCD_Write_Data(Data);
}
voidLCD_Init(void)
{
LCD_Write_Com(0x38);
LCD_Write_Com(0x38);
LCD_Write_Com(0x38);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08);
LCD_Write_Com(0x01);
LCD_Write_Com(0x06);
DelayMs(5);
LCD_Write_Com(0x0C);
}
仿真图片
4.主函数
#include
#include
#include"1602.h"
#include"delay.h"
#include"keyboard.h"
sbitled=P2^7;
sbitled1=P2^2;
unsignedcharcodepassword[]={1,2,3,4,5,6,7,8};
//定义密码
main()
{
unsignedcharnum,i,j;
unsignedcharpasswordtemp[16];
unsignedcharinputtimes;
unsignedcharpasswordlength,PLEN;
bitFlag;
PLEN=sizeof(password)/sizeof(password[0]);
LCD_Init();//初始化液晶屏
DelayMs(10);//延时用于稳定,可以去掉
LCD_Clear();//清屏
LCD_Write_String(0,0,"Welcome!
");
LCD_Write_String(0,1,"Inputpassword!
");
led=1;
while
(1)
{
num=KeyPro();//扫描键盘
if(num!
=0xff)
{
led=1;
if(i==0)
LCD_Write_String(0,1,"");
if(i<16)
{
passwordtemp[i]=num;
LCD_Write_Char(i,1,'*');
}
i++;
if((15==num)||(i==16))
{
passwordlength=i-1;//计算输入密码长度
i=0;
if(passwordlength==PLEN)//长度相等则比较,否则直接输出错误
{
Flag=1;//先把比较位置1
for(j=0;j Flag=Flag&&(passwordtemp[j]==password[j]);//比较输入值和已有密码 } if(Flag) { LCD_Write_String(0,1,""); LCD_Write_String(0,1,"RightOpen! >>>>");//密码正确显示的信息 led=0; DelayMs(5); inputtimes=0; Flag=0; } else { LCD_Write_String(0,1,""); LCD_Write_String(0,1,"Wrong! Retry! ");//密码错误,提示重新输入 inputtimes++; if(inputtimes==3) { LCD_Write_String(0,1,""); LCD_Write_String(0,1,"Wrong3times! ");//密码错误,提示重新输入 led1=0; inputtimes=0; led1=1; } } } } } } 5.进入KeilC51开发环境运行该程序。 如下图: 三、实物图 初始化显示屏 输入密码正确 输入密码错误 连续三次输入密码错误 四、小结与体会 这次的实验,自己觉得收获挺大,从最初的构想到一步一步的去完成各个模块的功能。 自己对一个完整的单片机的小系统的制作,有了更深的认识。 当然这中间也遇到了很多的问题,通过请教同学和老师,自己由最开始的什么都懂得不透彻,到最后能熟练运用,虽然这个过程是痛苦的,但是真正掌握后所获得的乐趣也是很大的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实用 密码锁