




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
KeilC51常用功能模块使用说明2001/11/19说明本文档包括单片机系统中常用到的时钟中断、通讯及键盘扫描等模块(见所附源程序)的说明。这些模块使用前后台系统模型。为达到最大的灵活性,需要在用户工程中定义config.h文件,在其中定义各模块可选参数的设置,而不是直接更改源代码。这些可选内容大部分为宏定义,如果不定义宏相应的功能在编译时被屏蔽,不会增加代码长度。具体可选内容见各模块中的说明。在Config.h文件中还要包含一个单片机硬件的资源头文件。各模块使用了定义在Common.h中的一些数据类型。如:BIT(bit)BYTE(unsignedchar)等,具体请参见源程序。时钟模块在单片机软件设计中,时钟是重要资源,为了充分利用时钟资源,故设计本时钟模块。本模块使用定时器0,在完成用户指定功能的同时,还能够自动处理一些其它模块中与时钟相关的信息。时钟模块由声明文件Timer.h以及实现文件Timer.c组成。用户应该在Config.h中定义宏TIMER_RELOAD来设定定时器0的重装载初值。推荐的定时器0的中断时间大于1毫秒。在程序的初始化阶段调用时钟模块的初始化函数InitTimerModule()之后,就可以使用时钟模块所以支持的各种功能。具体描述如下:延时:当用户需要进行一定时间的延时时,可以通过调用Delay()来进行,参数为时钟中断的次数。如时钟中断周期为1ms,想进行100ms的延时,则可以调用Delay(100)。注意:如果延时的绝对时间小于时钟中断的周期,则不能够用本方法做到延时。定时:当程序中需要使用定时功能时,如等待某外部事件,如果在一定时间内发生则继续执行,如果在这段时间内发生,则认为出现错误,转向错误处理机制。在此推荐一种编程模式,但用户可以用自己认为更合理的方式处理此类问题。这里简单说明一下关于阻塞式函数及非阻塞式函数。简单说,阻塞式函数就是当检测完成条件,如果不能够完成则等待,如:voidCheckSomething()/gbitSuccessFlagisaglobalvariablewhile(gbitSuccessFlag=FALSE)/donothingbutwaiting可以看到,当bitSuccessFlag没有被设置为TRUE时,函数保持等待状态不返回,这样就是阻塞式的函数。另外一种情况:BITCheckSomething()if(gbitSuccessFlag=TRUE)/returnTRUE;returnFALSE;在这里,如果所检测的事件有没有完成,函数进行检测之后,立刻返回,通过返回值报告完成情况,如果没有完成,则等待调用者分配再次执行的机会。这样的函数就是非阻塞函数。在应用定时功能时,首先要将检测函数定义成非阻塞函数。如上面的第二个版本的CheckSomething。然后下面模式:BITbitDone=FALSE;ResetClock();/cleartimerinterrupttimescounterwhile(GetClock()MAX_WAITINGTIME)if(CheckSomething()=TRUE)bitDone=TRUE;break;if(bitDone=FALSE)/processtimeout或者简单写成:BITbitDone=FALSE;ResetClock();while(GetClock()=(z)当然,用户也可以将IsPackageHeader和IsPackageTailer定义成为函数,通过BIT类型的返回值来向调用者提供与相应宏相同的信息。另一种办法需要在Config.h文件中定义宏SCOMM_ComplexPackageFormat。(需要注意的是,不能够同时定义SCOMM_SimplePackageFormat和SCOMM_ComplexPackageFormat宏,否则会造成严重的不可预见性错误。这时需要提供回调函数QueryPackageFormat,原形如下:BYTEQueryPackageFormat(BYTEbyData,BYTEbyCount,BYTEbyParam);函数中三个参数的含义与使用简单数据包格式时判断数据包尾的宏的参数相同。函数通过返回值来通知作为调用者的接收函数对接收到的数据如何处理,但目前这种方法仅为需要处理复杂数据包格式时的一种可选方法,但不推荐。用户如果想使用这种方法可以自己更改接收函数中相应的#ifdefSCOM_ComplexPackageFormat#endif/SCOMM_ComplexPackageFormat预编译指令之间的内容。例如指定QueryPackageFormat的返回值的含义:0:继续找数据包头或继续找数据包尾。1:找到数据包头。2:找到数据包尾。3:数据包出错,需要抛弃。然后更改源代码来实现上面的协议。注意:当用户需要使用字符串的时候,可以利用简单的包装函数将字符串转换为字节数组。所以没有必要提供专用的字符串处理函数。键盘扫描模块键盘扫描模块有两种工作方式,一种为自动的由时钟模块调用,另一种是由程序员自行调用。1)由时钟模块自动调用的方式将时钟模块实现文件(Timer.h)及键盘扫描模块的实现文件(KBScan。c)包含进工程,在Config.h文件中添加TIMER_KBSCANDELAY宏。时钟模块自动对时钟中断进行计数,当达到TIMER_KBSCANDELAY宏所定义的值后,自动调用键盘扫描模块中的函数KBScanProcess()进行键盘扫描,也就是说,这个宏的值可以决定按键消抖动的时间。用户应该提供两个回调函数OnKBScan()及OnKeysPressed()。在函数OnKBScan中进行键盘扫描,并返回扫描码。扫描码的类型缺省为BYTE,当键盘规模较大时,BYTE不能够完全包含键盘信息时,可在Config.h文件中重定义宏KBVALUE,如下:#defineKBVALUEWORD这样,就可以使用16位的键盘扫描码,如果此时还达不到要求,可以将键盘扫描码定义成一个结构,但这样做将会增加代码量及消耗更多的RAM资源,故不推荐。扫描模块调用OnKBScan取得扫描码,并调用用户可以重定义的宏IsNoKeyPressed来判断是否有键按下,缺省的IsNoKeyPressed实现如下:#defineIsNoKeyPressed(x)(x)=0x00)即认为OnKBScan返回0扫描码时为没有键按下,如果扫描函数返回其它非零扫描码做为无键按下的扫描码时,可以在Config.h文件中重定义IsNoKeyPressed宏的实现。8位键盘扫描码(缺省值)时,相应的扫描函数为:BYTEOnKBScan()当扫描模块经过软件消抖动之后,发现有键按下,就会调用另一个回调函数OnKeysPressed。函数的声明应该如下:voidOnKeyPressed(BYTEbyKBValue,BYTEbyState)其中中的参数byKBValue的类型为BYTE,此为缺省值,如果使用其它类型的扫描码,就将此参数变为相应类型。这个值由OnKBScan返回。另一个参数byState在通常情况下为零。但当用户在Config.h中定义宏KBSCAN_BRUSTCOUNT,同时键盘上的某键被按住不放时,扫描模块对它自己的调用(注意这里和TIMER_KBSCANDELAY宏不同,TIMER_KBSCANDELAY是时钟中断足够的次数后调用扫描模块,而KBSCAN_BRUSHCOUNT为扫描模块自身的被调用次数)进行计数,当达到KBSCAN_BRUSTCOUNT时,扫描模块调用OnKeysPressed,此时第一个参数的含义不变,而byState变成1,同时计数器复位,又经过一段时间后,用值为3的byState调用OnKeysPressed。这样就可以很方便的实现多功能键或者检测某键的长时间被按下。2)由用户
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绍兴电动推拉棚施工方案
- 山东杏林科技职业学院《商务英语阅读2》2023-2024学年第二学期期末试卷
- 四平职业大学《宪法与法理学前沿问题研究》2023-2024学年第二学期期末试卷
- 济南幼儿师范高等专科学校《移动后台设计与开发》2023-2024学年第一学期期末试卷
- 营口理工学院《药厂设备及车间工艺设计》2023-2024学年第一学期期末试卷
- 宜春幼儿师范高等专科学校《概率论与数理统计II》2023-2024学年第二学期期末试卷
- 吉林交通职业技术学院《装饰材料与构造》2023-2024学年第二学期期末试卷
- 洛阳文化旅游职业学院《农业环境监测》2023-2024学年第二学期期末试卷
- 烟台铁皮房防水施工方案
- 2025至2031年中国水晶活性金深层滋养去角质层行业投资前景及策略咨询研究报告
- 2025年高压电工作业考试国家总局题库及答案(共280题)
- 转炉炼钢设备与工艺课件
- 汽车吊车施工安全技术交底
- 电工基础(中职)完整版教学课件
- 小班语言绘本《小蛇散步》绘本PPT
- 杭州房建工程监理大纲范本
- DB22∕T 2797.1-2017 玄武岩纤维复合筋及玄武岩纤维混凝土设计与施工规范 第1部分:玄武岩纤维复合筋
- 庆阳剪纸艺术:演示文稿
- 人居环境学导论
- 钢结构设计总说明(新版)
- 2017年中国陵园墓地市场规模现状分析及十三五投资价值评估报告(目录)-副本-副本(3)-副本
评论
0/150
提交评论