基于单片机的电子密码锁设计(5)

2019-04-09 08:18

本科毕业设计说明书(论文)

}

return keyValue[i]; } }

return '$';

第 17 页 共 41页

3.3.3 LCD显示子程序设计

LCD显示是本设计的核心模块之一,为了能在屏幕上总能显示恰当的信息,本设计中LCD显示子程序的功能,应为保障单个字符、字符串的显示,为主程序或其他子程序留出接口,以便需要时可以很容易调用。

本着上述目的,LCD显示子程序的结构如下图所示,它的目的是提供字符与字符串的显示函数。不同层次的函数之间是被调用的关系。

图3.9 显示模块结构图

各函数原型及参数介绍如下:

1void LCDWriteData(uchar Data) // 写数据函数 ○

2void LCDWriteCmd(uchar Cmd) // 写指令函数 ○

3void LCDPosition(uchar row,uchar column) //将坐标转换为LCD的坐标 ○

参数: row为所在行数(1或2),column为在行中的位置(0~15)

本科毕业设计说明书(论文)

4在指定位置写数据函数 ○

void writeChar(uchar row,uchar column, char c)

第 18 页 共 41页

参数: row指定行,column指定列位置,c为待写入的数据。 5写字符串函数 ○

void writeString(uchar row,uchar column1,uchar column2, char *s) 参数:row表示行,column1表示第一行起始地址,column2表示下一行起

始地址,均从1开始。

6 void moveString(char *s) //移动字符串函数 ○

7 void LCDInit(void) //液晶初始化函数 ○

{ LCDWriteCmd(0x38); //设置16*2显示,5*7点阵,8位数据接口 delay(30); LCDWriteCmd(0x01);//清屏 delay(30); LCDWriteCmd(0x06);//地址加一,整屏右移 delay(30); LCDWriteCmd(0x0f);//开显示,光标闪烁,显示光标 }

3.3.4 密码修改子程序设计

在本设计中,密码修改功能是使用外部中断触发的,这意味用户得以随时进行密码的修改,十分方便。因此,密码修改子程序同时也是外部中断0服务程序。若要修改密码,须先输入旧密码密码,密码验证通过后方可设置新密码,新密码输入结束后,验证位数,然后保存新密码。流程如图3.9所示。

本科毕业设计说明书(论文)

第 19 页 共 41页

图3.10 密码修改程序流程图

3.3.5 报警声音子程序设计

本程序的设计类似于电子音乐盒,可以实现1~7七个音符的各种组合,理论上可以播放任意音乐,但音阶始终位于1个八度内。

音调取决于物体振动的频率,频率越高,所发声音音调也就越高。本程序就是利用单片机产生不同频率的方波,来驱动蜂鸣器发出不同音调的声音。

设计中,系统使用了定时中断的方法。这里以起中的音阶“1”为例说明,其初值设为0xF720,对应十进制数63264,则计数65536 - 63264 = 2272次后溢出进入中断,若单片机外接24MHZ晶振,则计数一次对应0.5μs,即计数1136μs

本科毕业设计说明书(论文)

第 20 页 共 41页

后溢出。一个音阶周期为1136μs×2 = 2272μs,对应频率为1 / 2272μs = 440Hz。次频率为音阶“1”所对应的频率值。其他频率对应的计数初值可按照此方法推算出来,具体见表3.1 [17]。

表3.1 不同音阶所对应频率、计数初值

音阶 频率/Hz 计数初值 1 440 0xF720 2 494 0xF888 3 523 0xFC44 4 587 0xF959 5 659 0xFA13 6 698 0xFA67 7 784 0xFB04 由此,可得到报警声音模块的代码如下:

sbit Beep = P3^1;

uchar code scalesH[] = {0xf7,0xf8,0xfc,0xf9,0xfa,0xfa,0xfb}; //7个音符所对应的计数器初值

uchar code scalesL[] = {0x20,0x88,0x44,0x59,0x13,0x67,0x04}; uchar note;

//初始化函数

void AlarmInit()

{ TMOD = 0x01; //T/C0工作在方式一 ET0 = 1; //开定时器中断 EA = 1; //开总中断

TR0 = 0; //关闭定时器0 }

//播放声音

void play(uchar c) {

uint i; switch( c ) {

case 0 : note = 6;

for(i=0;i<3;i++) {

TR0 = 1; delay(300); TR0 = 0; delay(300); } break;

case 1 : for(note=2;note<6;note++) {

TR0 = 1;

本科毕业设计说明书(论文)

delay(300); TR0 = 0; delay(300); } break; }

Beep = 1; }

//定时器0的中断服务函数 void time0() interrupt 1 {

TH0 = scalesH[note]; TL0 = scalesL[note]; Beep = ~Beep; }

第 21 页 共 41页


基于单片机的电子密码锁设计(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:南村小学安全工作考核及奖惩制度

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

马上注册会员

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