|
相关连接: [匠人DIY旋转时钟 系列文章 (连载中…)]
//-------------------------------------------------------- // 项目: // 模块:串行通讯 // 说明: // 设计:程序匠人(版权所有,引用者请保留原作者彰? //-------------------------------------------------------- /* 版本说明: Serial.c 2008-2-10 15:36
*/ //--------------------------------------------------------
//-------------------------------------------------------- //插入文件包 //-------------------------------------------------------- #i nclude "common.h" //--------------------------------------------------------
//-------------------------------------------------------- //串行通讯后台处理 //入口: COMM_BUF[] =通讯缓冲区(接收缓冲队列) // COMM_PUT_PTR =接收数据存放指针 // COMM_GET_PTR =接收数据读取指针 //-------------------------------------------------------- void comm_cnt(void) { tU08 i ;
while ( COMM_PUT_PTR != COMM_GET_PTR ) //接收数据存放指针<>接收数据读取指针,说明通讯缓冲区非空 { i = COMM_BUF[ COMM_GET_PTR ] ; //读取当前缓冲数据 if ( ++COMM_GET_PTR >= COMM_BUF_NUM ) COMM_GET_PTR=0 ; //接收数据读取指针+1,结果>=通讯缓冲区大小,则清零
if ( MOTOR_ST_FLAG ) //电机状态标志=1?(0=关闭,1=开启) { NO_KEY_JSQ = 0 ; //无按键计数器=0(每1S+1) //命令解析(根据命令字处理) switch( i ) { case COM_SET: //"设置"命令字 //显示状态 if ( SET_EN_FLAG == 0 ) { SET_EN_FLAG = 1 ; //设置使能标志=1(0=禁止,1=使能) SET_MODE = 0 ; //设置状态=0 }
//设置状态 else { SET_EN_FLAG = 0 ; //设置使能标志=0(0=禁止,1=使能) } break; case COM_CH: //"切换"命令字 //显示状态 if ( SET_EN_FLAG == 0 ) { if ( ++DISP_MODE > 3 ) DISP_MODE = 0 ; //显示状态+1,结果>最大值时,=0 } //设置状态 else { if ( ++SET_MODE > 5 ) //设置状态+1,结果>最大值时? { SET_MODE = 0 ; //设置状态=0 SET_EN_FLAG = 0 ; //设置使能标志=0(0=禁止,1=使能) } } break; case COM_INC: //"递增"命令字 //显示状态 if ( SET_EN_FLAG == 0 ) { if ( ++DISP_LINE_ADJ > 179 ) DISP_LINE_ADJ = 0 ; //盘面角度修正值+1,结果>最大值时,=0 DISP_LINE_ADJ_FLAG = 1 ; //EEPROM数据更新标志=1 } //设置状态 else { //根据设置状态判断 switch( SET_MODE ) { case 0: //设置状态0:时钟"时" if ( ++TIME_H > 23 ) TIME_H = 0 ; //时钟"时"+1,结果>最大值时,=0 break; case 1: //设置状态1:时钟"分" if ( ++TIME_M > 59 ) TIME_M = 0 ; //时钟"分"+1,结果>最大值时,=0 TIME_S = 0 ; //时钟"秒"=0 break; case 2: //设置状态2:闹钟"时" if ( ++TIMER_H > 23 ) TIMER_H = 0 ; //闹钟"时"+1,结果>最大值时,=0 TIMER_H_FLAG = 1 ; //EEPROM数据更新标志=1 break; case 3: //设置状态3:闹钟"分" if ( ++TIMER_M > 59 ) TIMER_M = 0 ; //闹钟"分"+1,结果>最大值时,=0 TIMER_M_FLAG = 1 ; //EEPROM数据更新标志=1 break; case 4: //设置状态4:闹铃时间 if ( ++SP_M > 99 ) SP_M= 0 ; //闹铃时间设置值+1,结果>最大值时,=0 SP_M_FLAG = 1 ; //EEPROM数据更新标志=1 break; case 5: //设置状态5:报时功能 FUN_ZDBS_FLAG = ! FUN_ZDBS_FLAG; //整点报时标志取反(0=禁止,1=使能) break; default: break; } } break; case COM_DEC: //"递减"命令字 //显示状态 if ( SET_EN_FLAG == 0 ) { if ( --DISP_LINE_ADJ > 179 ) DISP_LINE_ADJ = 179 ; //盘面角度修正值-1,结果为负时,=179 DISP_LINE_ADJ_FLAG = 1 ; //EEPROM数据更新标志=1 } //设置状态 else { //根据设置状态判断 switch( SET_MODE ) { case 0: //设置状态0:时钟"时" if ( --TIME_H > 23 ) TIME_H = 23 ; //时钟"时"-1,结果为负时,=最大值 break; case 1: //设置状态1:时钟"分" if ( --TIME_M > 59 ) TIME_M = 59 ; //时钟"分"-1,结果为负时,=最大值 TIME_S = 0 ; //时钟"秒"=0 break; case 2: //设置状态2:闹钟"时" if ( --TIMER_H > 23 ) TIMER_H = 23 ; //闹钟"时"-1,结果为负时,=最大值 TIMER_H_FLAG = 1 ; //EEPROM数据更新标志=1 break; case 3: //设置状态3:闹钟"分" if ( --TIMER_M > 59 ) TIMER_M = 59 ; //闹钟"分"-1,结果为负时,=最大值 TIMER_M_FLAG = 1 ; //EEPROM数据更新标志=1 break; case 4: //设置状态4:闹铃时间 if ( --SP_M > 99 ) SP_M= 99 ; //闹铃时间设置值-1,结果为负时,=最大值 SP_M_FLAG = 1 ; //EEPROM数据更新标志=1 break; case 5: //设置状态5:报时功能 FUN_ZDBS_FLAG = ! FUN_ZDBS_FLAG; //整点报时标志取反(0=禁止,1=使能) break; default: break; } }
break;
default: break; } } } }
//-------------------------------------------------------- // // THE END // // 版权所有:程序匠人(引用者请保留原作者姓名) // //--------------------------------------------------------
|