当前位置:首页 > 51开发板使用手册 - 图文
AT89S5X Demo Board User’s Manual Owen Studio break;
case 0x0b: min++; /*按B键:调整时钟分值*/
ModifyTime();
break ;
case 0x0c: hour++; /*按C键:调整时钟时值*/ ModifyTime(); break;
case 0x0d: if(musicKeyFlag==1) /*按D键:开始/停止音乐自动循环播放*/ { s_musicCounter=1; musicAutoFlag=1; musicKeyFlag=~musicKeyFlag; } else { s_musicCounter=10; musicAutoFlag=0; musicKeyFlag=~musicKeyFlag; } s_tableCounter=0x00; break;
case 0x0e: if(LEDKeyFlag==1) /*按*键:开始/停止流水灯自动演示*/ {
AutoShow();
LEDKeyFlag=~LEDKeyFlag; } else {
StopAutoShow(); LEDKeyFlag=~LEDKeyFlag; } break;
case 0x0f: if(++LEDFlag>5) /*按#键:流水灯方案循环切换*/ { LEDFlag=1; }
break; default: break; } }
/********************************************************************/ void LEDHandle(void) /*流水灯方案选择*/ {
switch(LEDFlag) /*判断该演示的流水灯方案*/ {
- 28 -
AT89S5X Demo Board User’s Manual Owen Studio case 0x01: DropDown(); break; /*水滴方案*/ case 0x02: CircleFlash(); break; /*环扫方案*/
case 0x03: GradualFlash(); break; /*渐明渐暗方案*/ case 0x04: SlowFlash(); break; /*慢闪方案*/ case 0x05: FastFlash(); break; /*快闪方案*/ } }
/********************************************************************/ void AutoShow(void) /*开始流水灯自动循环演示*/ {
LEDFlag=1;
LEDAutoFlag=1; }
/********************************************************************/ void StopAutoShow(void) /*停止流水灯自动循环演示*/ {
LEDAutoFlag=0; }
/********************************************************************/ void DropDown(void) /*水滴方案*/ {
static uchar s_dropdownCounter=0,s_dropdown_i=7,s_dropdown_OverCounter; uchar rest;
if(LEDCycle100msFlag==1) /*判断100ms是否到*/ {
LEDCycle100msFlag=0; rest=s_dropdownCounter%8;
P2=~(0x01<
/*让流到底的灯常亮*/
if(s_dropdownCounter>=(8-s_dropdown_i)*7) /*判断一个水滴流程是否完成*/ {
s_dropdownCounter+=8-s_dropdown_i; /*每流完一个流程下一个水滴的*/ s_dropdown_i--; /*流程就要相应减少一个灯*/ if(s_dropdown_i==0) /*整个水滴流程完了吗*/ { s_dropdown_i=7; s_dropdownCounter=0; if(++s_dropdown_OverCounter>=1) /*一个完整水滴流程完了之后*/
{ /*如果自动演示功能打开则跳到下一方案*/
s_dropdown_OverCounter=0; if(LEDAutoFlag==1) { LEDFlag++; }
- 29 -
AT89S5X Demo Board User’s Manual Owen Studio
} }
} else {
s_dropdownCounter++; } }
}
/********************************************************************/ void GradualFlash(void) /*渐明渐暗方案*/ {
static uchar s_gradualFlash_i=10,s_flashCounter,s_gradualFlash_OverCounter; static bit s_gradualFlash_i_Flag=0;
if(LEDCycle500usFlag==1) /*判断500us是否到*/ {
LEDCycle500usFlag=0;
if(((++s_flashCounter))!=0) /*PWM周期为10*500us=5ms, 判断其到否*/ {
if((s_flashCounter) P2=0x00; } } else /*PWM周期到了*/ { P2=0xff; if((s_flashCounter/10)>=10) /*改变PWM占空比前先判断延时10*5ms*/ { /*=50ms到否, 没到在此周期内占空比保持不变*/ s_flashCounter=0; if(s_gradualFlash_i_Flag==0) /*需要渐明则调高占空比*/ { s_gradualFlash_i--; } else /*需要渐暗则调低占空比*/ { s_gradualFlash_i++; } if(s_gradualFlash_i==0 || s_gradualFlash_i>=10) { /*如果渐明或渐暗完毕则交换*/ s_gradualFlash_i_Flag=~s_gradualFlash_i_Flag; - 30 - AT89S5X Demo Board User’s Manual Owen Studio if(++s_gradualFlash_OverCounter>=6) /*渐明渐暗6/2=3个周期后*/ { /*如果自动演示功能打开则跳到下一方案*/ s_gradualFlash_OverCounter=0; if(LEDAutoFlag==1) { LEDFlag++; } } } } } } } /********************************************************************/ void CircleFlash(void) /*环扫方案*/ { static uchar s_circleFlashCounter,s_circle_OverCounter; if(LEDCycle100msFlag==1) /*判断100ms是否到*/ { LEDCycle100msFlag=0; P2=~(0x01< s_circleFlashCounter=0; if(++s_circle_OverCounter>=5) /*循环5遍后如果自动演示*/ { /*功能打开则跳到下一方案*/ s_circle_OverCounter=0; if(LEDAutoFlag==1) { LEDFlag++; } } } } } /********************************************************************/ void SlowFlash(void) /*慢闪方案*/ { static uchar s_slowFlashCounter; if(LEDCycle100msFlag==1) /*判断100ms是否到*/ { LEDCycle100msFlag=0; if((++s_slowFlashCounter%5)==0) /*判断5*100ms=500ms是否到*/ { P2=~P2; /*每500ms灯亮灭改变一次*/ - 31 -
共分享92篇相关文档