推荐-多功能密码锁单片机课程综合实训报告1 精品
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机课程综合实训报告项目名称:多功能密码锁
一. 内容要求:
1.预期功能
(1)在没输入密码时显示万年历,并可调.(2)、通过按键来确定输入密码,实现密码锁功能,正确输入密码后有开锁提示;
2.设计方案
(1)采用1602液晶LM016L, AT98C51,行列式键盘。
(2)采用1602液晶LM016L。
(3)选用单片机作为系统的核心部件,实现控制与处理的功能。单片机具有资源丰富、速度快、编程容易等优点。利用单片机内部的随机存储器(RAM)和只读存储器(ROM)及其引脚资源,外接液晶显示(LCD),键盘输入等实现数据的处理传输和显示功能,基本上能实现设计指标1,
3.硬件部分:
3.1电路图:
主要由单片机、矩阵键盘、独立按键、液晶显示器等部分组成。其中矩阵键盘用于输入数字密码,独立按键用于实现可调万年历。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警。各模块功能如下:
(1)键盘输入模块:分为密码输入按键与几个功能按键,用于完成密码锁输入功能
(2)显示模块:用于完成对系统状态显示及操作提示功能。
(3) 复位电路:完成系统的复位。
(4) 独立键盘:用于完成可调万年历功能.
(5)开锁电路:应用继电器及发光二极管模拟开锁,完成开锁及开锁提示。
键盘电路:
用P1口组成4*4的矩阵键盘,各键的定义一次为:0、1、2、3、4、5、6、7、8、9、*、#、enetr、del(当密码按错时可以按下该键删除)、unclock(解锁键即三次密码都错了只能按下它进行解锁)
调整时间的电路:
Tiao是位功能选择,通过选择位来决定万年历的调整,+1、-1是调节功能键。
3.2电路原理说明:
开始仿真时,一开始现实年月份时间。本设计主要由单片机、矩阵键盘、独立按键、液晶显示器等部分组成。开锁电路控制着继电器发光二级管的开锁。程序中设计只有eneter键按下才能进行密码输入等操作。当输出密码正确时,解锁并且红灯亮。当连续按三次错误会被锁定,并且发出警报。此时按下unclock(解锁键,即三次密码都错了只能按下它进行解锁) 4. 软件部分
4.1程序流程图:
4.2程序设计说明
#include
#define lcd P2
#define uchar unsigned char
#define uint unsigned int
#define no_key 20 //无按键时的返回值
sbit rs=P3^0;
sbit rw=P3^1;//lcd数据命令选择端
sbit e=P3^2;//lcd使能信号端
sbit key1=P3^3;
sbit key2=P3^4;
sbit key3=P3^5;
sbit A=P3^6;
sbit key=P3^7;//开锁信号控制端
sbit enter=P1^3;//该键按下后才能进行输入密码等操作
uchar conflag,keyflag=3;
uchar jz=20;//键值变量
uchar temp1;//用此变量来存储键盘扫描的返回值,以便判断是否有键按下uchar code table0[6]={3,0,3,0,3,0};//初始密码
uchar code table9[6]={3,1,3,1,3,1};//初始密码
uchar code table1[]="20XX-05-23 w-4";
uchar code table2[]=" Time-00:00:00";
uchar code table3[]="Enter please:";
uchar code table4[]="OK!";
uchar code table6[]="ERRO!";
uchar code table7[]="Enter again:";
uchar code table8[]="LOCKED!";
uchar code table10[]="UNLOCKED!";
uchar code table11[]="Can't open!";
unsigned char m;
uchar num,t0,keynum,hour,min,sec,year,month,day,week;
uchar table5[6];//定义输入密码值存储数组
/**************************************
**函数名称:delay
**函数功能:软件延时,时间为z毫秒
**入口参数:z延时控制值,值越大,延时越长
**出口参数:无
***************************************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/**************************************
**函数名称:write_
**函数功能:1602写命令函数,可以用此函数写不同的指令
**入口参数:
**出口参数:无
***************************************/
void write_(uchar )
{
rs=0;
rw=0;
e=0;
P2=;
delay(5);
e=1;
delay(5);
e=0;
}
/**************************************
**函数名称:write_date
**函数功能:1602写数据函数,可以用此函数写不同的数据,程序对应的硬件1602的数据口为P2口
**入口参数:date
**出口参数:无
***************************************/
void write_date(uchar date)
{
rs=1;
rw=0;
e=0;
P2=date;
delay(5);
e=1;
delay(5);
e=0;
}
/*显示位*/
void write_week(uchar dte)
{
uchar shi,ge;
shi=dte/10;
ge=dte%10;
write_(0x80+13);