74_保险箱密码锁控制器

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

7.4接口定义目录引言7.4.1密码的输出、存储与显示7.4.2应用层接口7.4.3虚拟设备层接口7.4.4设备驱动层接口引言“决策”与“模块划分”侧重于软件,还未涉及到编程。当软件模块划分之后,接下来的工作就是定义归一化的接口规范了,而最后的工作才是编程。接口定义分为2部分:软件对外的接口和软件内部模块之间的接口。注意:接口并不仅仅是接口函数,还包括配置方法、相关的宏、变量、数据结构与使用方法。目录引言7.4.1密码的输出、存储与显示7.4.2应用层接口7.4.3虚拟设备层接口7.4.4设备驱动层接口7.4.1密码的输出、存储与显示密码的输出、存储与显示都使用ASCⅡ码表示,当存储密码时,则使用‘#’表示密码已经结束。目录引言7.4.1密码的输出、存储与显示7.4.2应用层接口7.4.3虚拟设备层接口7.4.4设备驱动层接口7.4.2应用层接口应用层仅包含一个人机交互程序,主要用于实现如图所示的状态机。1.提供给上层的接口因为人机交互程序内聚性很强,所以将它规划为任务。•人机交互函数:mainTask(),完成所有与人交互的工作。待机关锁开锁设置密码禁止输入输入“#”输入正确密码+“#”15秒无输入输入错误密码次数达到三次60秒输入“#”输入“*”输入密码+“#”输入错误密码+“#”图1状态转换图函数原型:voidmainTask(void)输入参数与返回值:无2.使用的下层接口应用层实际上使用虚拟设备层操作实际的设备,则人机交互程序使用•虚拟显示器驱动显示信息•虚拟键盘驱动获得用户输入的信息•虚拟存储器驱动获得和保存密码•虚拟锁驱动开锁和关锁•虚拟蜂鸣器驱动发出声音3.其他注意点人机交互程序堆栈数组名为GucMainTaskStk,人机交互程序为系统创建的第一个任务。7.4.2应用层接口目录引言7.4.1密码的输出、存储与显示7.4.2应用层接口7.4.3虚拟设备层接口7.4.4设备驱动层接口7.4.3虚拟设备层接口虚拟驱动用于屏蔽对象的控制细节,应用层就可以用统一的方法来实现,而无须关心具体是怎样实现的。当控制方法不一样时,则不必重新编写应用层的程序。虚拟设备层包含虚拟锁驱动,虚拟键盘驱动,虚拟显示器驱动,虚拟蜂鸣器驱动,虚拟存储器驱动。1.虚拟锁驱动(1)提供给上层的接口•externcharvirLockInit(unsignedcharucIndex)--虚拟锁初始化•externcharvirLockLock(unsignedcharucIndex)--关闭虚拟锁•externcharvirLockUnlock(unsignedcharucIndex)--打开虚拟锁(2)使用的下层接口虚拟锁驱动使用锁驱动7.4.3虚拟设备层接口2.虚拟键盘驱动(1)提供给上层的接口需要注意的是,如果在给定时间内没有按键输入,则设备可能进入待机状态。因此,读按键的API(应用程序编程接口)需要给定一个等待按键的时间。函数原型:charvirKeyInit(void)//虚拟键盘模块初始化返回值:0----成功,-1----失败函数原型:charvirKeyGet(unsignedintuiDly)//获得按键的ASCⅡ码输入参数:uiDly----以毫秒为单位,设定最大等待时间,0为无穷等待返回值:=0----键的ASCⅡ码,-1----失败(3)其它注意点虚拟键盘驱动应当使用一个任务来实现(2)使用的下层接口虚拟键盘驱动使用键盘驱动7.4.3虚拟设备层接口3.虚拟显示器驱动(2)使用的下层接口(1)提供给上层的接口•externcharvirMemInit(void)--虚拟存储器驱动初始化•externunsignedcharviMemRead(unsignedintuiAddr,char*pcData,unsignedcharucLen)--获得存储中的数据虚拟显示器驱动使用的是显示器驱动4.虚拟存储器驱动(1)提供给上层的接口•externcharvirShowInit(void)--虚拟显示器模块初始化•externcharvirShowPuts(char*pcStr)--虚拟显示器输出字符串•externcharvirShowClr(void)--虚拟显示器清屏7.4.3虚拟设备层接口(2)使用的下层接口虚拟存储器驱动使用的是CAT1024驱动输入参数::uiAddr---存储位置ucLen---数据长度输出参数:piData----读到的数据返回值:读到的数据数目•externcharviMemWrite(unsignedintuiAddr,char*pcData,unsignedcharucLen)--保存数据到存储器中输入参数::uiAddr---存储位置ucLen---数据长度piData----存储的数据输出参数:无输出参数返回值:写入的数据数目7.4.3虚拟设备层接口5.虚拟蜂鸣器驱动(1)提供给上层的接口(2)使用的下层接口虚拟蜂鸣器驱动使用蜂鸣器驱动函数原型:charvirBuzzerInit(void)//虚拟蜂鸣器初始化返回值:0----成功,-1----失败函数原型:charvirBuzzerTweet(unsignedcharunMod)//控制蜂鸣器鸣叫输入参数:ucMod----鸣叫方式VIR_BUZZER_STOP----停止鸣叫VIR_BUZZER_SHORT----1声短鸣叫VIR_BUZZER_TWO_SHORT----2声短鸣叫VIR_BUZZER_LONg----1声长鸣叫返回值:0----成功,-1----失败(3)其它注意点虚拟蜂鸣器驱动应当使用一个任务来实现目录引言7.4.1密码的输出、存储与显示7.4.2应用层接口7.4.3虚拟设备层接口7.4.4设备驱动层接口7.4.4设备驱动层接口设备驱动层的驱动用于直接控制相应的物理设备,一般来说,设备设备驱动层的驱动只实现硬件的基本功能,其高级功能在虚拟设备层实现。设备驱动层分为:•锁驱动•键盘驱动•显示器驱动•蜂鸣器驱动•CAT1024驱动•I2C驱动1.锁驱动接口•externcharphyLockInit(void)--锁初始化,返回值:0--成功,-1--失败•externcharphyLockLock(void)--关锁,返回值:0--成功,-1--失败•externcharphyLockUnlock(void)--开锁,返回值:0--成功,-1--失败7.4.4设备驱动层接口2.键盘驱动接口•externcharzyKeyInit(void)--键盘模块始化,返回值:0--成功,-1--失败•externcharzyKeyGet(void)--获得瞬时按键状态(去抖前按键状态),不支持组合键,返回值:0--成功,-1--失败3.显示器驱动接口•externcharzyLedDisplayInit(void)--LED数码管驱动初始化,无输入参数,返回值:0--成功,-1--失败•externvoidzyLedDisplayScan(void)--LED数码管扫描程序,=200HZ的频率调用,无输入参数和返回值•externunsignedcharGucZyLedDsipayShowBuf[]--显示缓冲区7.4.4设备驱动层接口4.蜂鸣器驱动接口•externcharphyBuzzerInit(void)---蜂鸣器初始化,无输入参数,返回值:0--成功,-1--失败•externcharphyBuzzerTweet(unsignedintuiFreq)---蜂鸣器鸣叫,uiFreq:声音频率,返回值:0--成功,-1--失败•externcharphyBuzzerStop(void)---蜂鸣器停止鸣叫,无输入参数,返回值:0--成功,-1--失败•externvoidisrTimer(void)_interupt3---Timer1中断服务函数,通过翻转蜂鸣器管脚使蜂鸣器发声5.CAT1024驱动接口•externchar_zyCat1024Init(void)--CAT1024初始化,返回值:0--成功,-1--失败•externunsignedchar_zyCat1024Write(unsignedcharucAddr,unsigned*pucData,unsignedcharucDataLen)--向CAT1024写数据7.4.4设备驱动层接口输入参数:ucAddr---数据地址ucDataLen---要写的数据长度pucData----要写的数据返回值:已发送的数据字节数•externunsignedchar_zyCat1024Read(unsignedcharucAddr,unsigned*pucData,unsignedcharucDataLen)--从CAT1024中读数据输入参数::ucAddr---数据地址ucDataLen---要读的数据长度输出参数:pucData----读到的数据返回值:已读到的数据字节数6.I2C驱动接口•externvoid_zyI2cInit(void)---初始化I2C为主模式,返回值:0--成功,-1--失败•externunsignedchar_zyI2cWrite(unsignedcharucAddr,unsignedintuiRegAddr,unsignedchar_ucRegAddrLen,unsignedchar*pucData,unsignedcharucDataLen)---将数据写入I2C从器件7.4.4设备驱动层接口输入参数:ucAddr---从机地址uiRegAddr---寄存器地址uiRegAddrLen---寄存器地址长度(单位为字节)ucDataLen---要写入的数据长度pucData----要写入的数据返回值:已写入的数据字节数•externunsignedcharzyI2cWrite(unsignedcharucAddr,unsignedintuiRegAddr,unsignedcharucRegAddrLen,unsignedchar*pucData,unsignedcharucDataLen)---从I2C从器件读数据输入参数:ucAddr---从机地址uiRegAddr---寄存器地址uiRegAddrLen---寄存器地址长度(单位为字节)ucDataLen---要读的数据长度输出参数:pucData----读到的数据返回值:已读到的数据字节数7.4.4设备驱动层接口值得注意的是:•目前没有发现寄存器地址超过16位的器件,因此,寄存器地址可以用unsignedint类型变量来保存;•大多数I2C从机寄存器地址为8位(一个字节),一部分位16位(两个字节),I2C标准没有规定寄存器地址的长度,因此,需要一个参数给出寄存器地址的长度;•I2C支持7位地址模式和10位地址模式,但目前还没有发现仅支持10位地址模式的器件,因此,规划本驱动仅支持7位的地址模式。7.5编写代码目录7.5.1概述7.5.2可复用的驱动7.5.3I2C驱动7.5.4CAT1024驱动7.5.5虚拟键盘驱动7.5.6虚拟蜂鸣器驱动7.5.7人机交互程序7.5.8主程序7.5.1概述1.简述大多数开发人员将编写代码和调试放在第一步来做,在没有经验时,摸着石头过河也是一种很好的选择。前面的步骤就是给过河指定一条路线,当有了正确的路线之后,则过河就是一件容易的事情了。同理,有了前面的步骤且结果正确的话,则编写代码与调试同样也是一件轻松的事了,其所花的时间往往不足整个开发过程的1/3。2.步骤每个模块的开发其实也可以看作一个独立模块的嵌入式软件的开发,7.2节、7.3节和7.4节所制定的内容可以看作这个模块的限制条件。因此,每个模块的开发步骤可以遵循整个软件的开发步骤,同样按照决策、模块划分、接口定义、编写代码和测试验收5个步骤来进行。(1)决策7.2节是针对整个软件的,不会将每个模块的所有决策都囊括进来。因此,一些遗漏的决策需要在编写代码之前决

1 / 66
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功