长春师范学院毕业论文 第一章 1引言
图 3.1 主程序流程图
3.2液晶驱动程序
LCD显示部分采用 SPLC501 液晶模组附带的驱动程序。该驱动程序的架构如图 3.2所示。
13
长春师范学院毕业论文 第一章 1引言
图 3.2 LCD驱动程序架构
驱动程序由 5 个文件组成,分别为:底层驱动程序文件 SPLC501Driver_IO.inc、SPLC501Driver_IO.asm;用户 API 功能接口函数文件 SPLC501User.h、SPLC501User.c、DataOSforLCD.asm。
SPLC501Driver_IO.inc:该文件为底层驱动程序的头文件,主要对使用到的寄存器(如端口控制寄存器等)进行定义,还对 SPCE061A 与 SPLC501 液晶显示模组的接口进行配置;用户可以根据自已的需求来配置此文件,但要使端口的分配符合实际硬件的接线。
SPLC501Driver_IO.asm:该文件为底层驱动程序,负责与 SPLC501 液晶显示模组进行数据传输的任务,主要包括端口初始化、写控制指令、写数据、读数据等函数;这些函数仅供 SPLC501User.c 调用,不建议用户在应用程序中调用这些函数。
SPLC501User.h:该文件为用户 API 功能函数文件的头文件,主要对一些记
14
长春师范学院毕业论文 第一章 1引言
住符进行定义,以及配置LCD 的一些设置,另外该文件里还对 SPLC501User.c 中的函数作了外部声明,用户需要使用 LCD 的 API功能函数时,需要把该文件包含在用户的 C 文件中。
SPLC501User.c:文件中定义了针对 LCD显示的各种 API 功能函数。 DataOSforLCD.asm:该文件中提供了一些供 API 功能函数调用的数据处理子程序,主要完成显示效果的叠加、画圆偏差量的计算等。
3.3按键扫描程序
系统使用 1024Hz 时基中断对 IOA口低八位进行扫描,并进行去抖、长短按键判断等工作按键扫描程序提供如下三个 API 函数以供用户使用按键功能: 语法格式:void KeyScan_Init(void); 入口参数:无 出口参数:无 返回值:无
功 能:按键扫描初始化。调用该函数将同时初始化按键扫描使用的 I/O口。 void KeyScan_Init(void) { }
ui_KeyScanState = C_KeyStateFirst; ui_KeyState = C_NullKey; ui_KeyCount = 0; ui_KeyCountBK = 0; ui_KeyID = C_Null; ui_RepeatEvent = 0; ui_RepeatCount = 0; DrvKeyInit();
15
长春师范学院毕业论文 第一章 1引言
语法格式:void KeyScan_ServiceLoop(); 入口参数:无 出口参数:无 返回值:无
功 能:按键扫描后台服务程序。该函数一般被安置在 1KHz 时基中断中。 void KeyScan_ServiceLoop(void) {
switch(ui_KeyScanState) {
case C_KeyStateFirst:
if(C_Null != DrvGetKeyID()) { } break;
if(ui_KeyCount > C_DebounceLimit) {
if(C_Null != DrvGetKeyID()) {
if(DrvGetKeyID() == ui_KeyID) {
ui_KeyState = C_SKeyState;
ui_KeyScanState = C_KeyStateRepeat;
ui_KeyID = DrvGetKeyID();
ui_KeyScanState = C_KeyStateDebounce; ui_KeyCount = 0; ui_RepeatEvent = 0; ui_RepeatCount = 0;
case C_KeyStateDebounce:
16
长春师范学院毕业论文 第一章 1引言
}
}
} else { }
ui_KeyScanState = C_KeyStateFirst;
else { }
ui_KeyScanState = C_KeyStateFirst; ui_KeyCount = 0;
//
else { } break;
if(C_Null != DrvGetKeyID()) {
if(DrvGetKeyID() == ui_KeyID) {
if(ui_KeyCount > C_FirstRepeatTim - C_RepeatTim) {
if(++ui_RepeatCount >= C_RepeatTim) { }
ui_RepeatCount = 0; ui_RepeatEvent = 1;
ui_KeyCount++;
case C_KeyStateRepeat:
// // // // // // //
17