2015毕业设计智能报警器(7)

2019-01-07 19:25

系统软件的设计与实现

??

当密码对比不正确时,重新初始化。 i=0;

SetComLCD1602(0x01); SetComLCD1602(0x84); while(ErrorInfo[0][i]!='\\0') { }

这里密码错误了,在屏幕上错误的信息。 i=0;

SetComLCD1602(0xc2);

LCD1602Input(ERTimes[EroTimes]);

ERTimes[EroTimes]来确定还有多少次输入的机会。 如果密码错误了,将会在屏幕上提示还剩下几次输入机会。 SetComLCD1602(0xc4); while(ErrorInfo[1][i]!='\\0') { }

这里密码错误了,在屏幕上错误的信息。 for(i=0;i<4;i++)

DelaySecond(250); CodeStr[0]='\\0';

LCD1602Input(ErrorInfo[1][i]); i++;

LCD1602Input(ErrorInfo[0][i]); i++;

这里有必要说一下EroTimes 当在登陆界面上每次输入密码按确定键错误的话,EroTimes机会+1,当达到3次,系统就会报警,(本程序采用中断报警,代码如下

第 21 页 (共 77 页)

智能防火防盗系统

节) EroTimes ++; Size=0;

Ensure=1; //必须置1 或者置0,不然错误了后 不能使用back 按钮了 ShowAllStr(); ??

4.6 显示模块

进入系统后,如右图6所示,在LCD显示芯片将依据程序显示设定的字符串显示,LCD设定2行16个字符(调用命令),SetComLCD1602(0x38);

SetComLCD1602(0x0c);开关光标,光标显示部分只将出现在第二行第11个的位置开始,这个可以一眼可以看出来密码输入的位置。默认密码为6位,也就是说修改后的密码也只能是6位,当程序中设定当超过6位时候,光标将不会往后面移动。

图6 显示模块电路图

RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 RW为读写信号线,高电平时进行读操作

第 22 页 (共 77 页)

系统软件的设计与实现

,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 其对LCD1602的操作代码如下: sbit RS // RS为寄存器选择 sbit RW //为读写信号线 sbit E // E端为使能端

对LCD的设置,使能改变读入数据部分 RS=0; RW=0; E=0;

P0=CommandLCD; E=1;

DelaySecond(10) E=0;

先将RS、RW、E端全部置低,在给一个使能E端上升沿让它读取指令,延迟有助于数据的读入稳定性。 向LCD1602中写数据部分 RS=1; RW=0; E=0; P0=InputDat; E=1;

DelaySecond(3); E=0;

先将RW E端全部置低、RS置高,寄存器处于读取数据状态,然后E端上升沿让它读取数据,延迟有助于数据的读入稳定性。

第 23 页 (共 77 页)

智能防火防盗系统

4.7 键盘模块

键盘模块,如右图7,在主函数内不断键盘进行扫描,可以把键盘映射到一个二维坐标,将P3口得P3.4~P3.7看成X轴的坐标大小,同理Y轴上坐标大小由P3.0~P3.3(本程序是在第四象限的坐标),当程序设定扫描P3 = 0xef 即0x11101111。按照上述规定分析xy轴,其结果不难推出,即x轴为高位1110,y轴为低四位为11111,则P3.4位为0,从而起到对P3.4口(第一列)的扫描。当P3.4口的Y轴上有值的话(这里0设定为有键按下),那么XY轴上就都有值了,数据将不再指向一条直线,而是得出一个点。比如0x11101110,按照上面的分析x轴上P3.4 = 0,y轴上P3.0 = 0,坐标(0 , 3);在键盘上此坐标对应这数字’7’,同理其他的键可以以此理解。

AllKeyScan扫描所有的按钮,P3口在main()里面初始化0xff, 在mian里面用无限循环对键盘扫描。碰到能取出点的坐标的情况将稍作延迟后确定后调用及对应的函数实现功能。

图7 键盘模块电路图

第 24 页 (共 77 页)

系统软件的设计与实现

本节键盘扫描部分代码如下: P3=0xef; P3 = 0xef

即0x11101111就是第一列。 if(EvetInf!=0xef) {

当P3 = 0xef 即第一列中有某个按键被按下。 EvetInf=P3; PlayButVocie();

当按下就会发声,调用发声函数。

DelaySecond(2);

EvetInf=P3;

延迟一下,再次确定是否P3列某个按键是否按下。 ??

switch(EvetInf)

case 0xee: JudgeStrSize(7);break;

0x11101110 即坐标(0,3),数据7,调用函数JudgeStrSize(7); case 0xed: JudgeStrSize(4);break;

0x11101101 即坐标(0,2),数据4,调用函数JudgeStrSize(4); case 0xeb: JudgeStrSize(1);break;

0x11101011 即坐标(0,1),数据1,调用函数JudgeStrSize(1); case 0xe7: ChangeCode();break;

0x11100111 即坐标(0,0),数据修改密码,调用函数ChangeCode();

EvetInf=EvetInf & 0x0f; 取Y轴低4位。 while(EvetInf!=0x0f) {EvetInf=P3;

EvetInf=EvetInf & 0x0f;}

把EvenInf数据复原、有利于减小误差。 ??

第 25 页 (共 77 页)


2015毕业设计智能报警器(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:大班幼儿关心同伴教学案例分析

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: