?? myboard.c
字號:
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) /*判斷該演示的流水燈方案*/
{
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<<rest) & (0xff>>(7-s_dropdown_i));/*使水滴流到某個燈并且讓流到底的燈常亮*/
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++;
}
}
}
}
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)%10)!=0) /*PWM周期為10*500us=5ms,判斷PWM周期到否*/
{
if((s_flashCounter%10)<s_gradualFlash_i) /*在PWM周期內按設定占空比調節燈的亮滅*/
{
P2=0xff;
}
else
{
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;
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); /*讓某個燈亮應該令相應引腳為低*/
if(++s_circleFlashCounter>=8) /*8個燈都亮過以后再重新開始*/
{
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燈亮滅改變一次*/
}
if(s_slowFlashCounter/5>=6) /*慢閃6/2=3個周期以后如果自動演示功能打開則跳到下一方案*/
{
s_slowFlashCounter=0;
if(LEDAutoFlag==1)
{
LEDFlag++;
}
}
}
}
/*************************************************************************/
void FastFlash(void) /*快閃方案*/
{
static uchar s_fashFlashCounter;
if(LEDCycle100msFlag==1) /*判斷100ms是否到*/
{
LEDCycle100msFlag=0;
P2=~P2; /*每100ms燈亮滅改變一次*/
if(++s_fashFlashCounter>=30) /*快閃30/2=15個周期以后如果自動演示功能打開則跳到下一方案*/
{
s_fashFlashCounter=0;
if(LEDAutoFlag==1)
{
LEDFlag=1;
}
}
}
}
/*************************************************************************/
void ScrShift(uchar keyIndex) /*六位數碼管順序左移*/
{
uchar i;
for(i=5;i>0;i--)
{
DisplayArray[i]=DisplayArray[i-1];
}
DisplayArray[0]=c_keyCode[keyIndex];
}
/*************************************************************************/
void ClearScr(void) /*清屏*/
{
uchar i;
for(i=0;i<6;i++)
{
DisplayArray[i]=0x00;
}
}
/*************************************************************************/
void ReadPassword() /*從24C02中讀取密碼*/
{
uchar i;
IICRead(0xa0,0,password,6);
for(i=0;i<6;i++)
{
DisplayArray[i]=password[i];
}
}
/*************************************************************************/
void WritePassword() /*將屏幕的六位數字作為密碼存入24C02中*/
{
IICWrite(0xa0,0,DisplayArray,6);
}
/*************************************************************************/
void StatusSend(void) /*下位機狀態反饋(串口)*/
{
uchar i;
IE&=0xef;
for(i=6;i>0;i--)
{
SBUF=DisplayArray[i-1];
while(TI!=1);
TI=0;
}
SBUF=s_musicCounter;
while(TI!=1);
TI=0;
SBUF=LEDFlag;
while(TI!=1);
TI=0;
IE|=0x10;
}
/*************************************************************************/
void Delay (unsigned int value) /*10us延時*/
{
while (value!=0)
{
value--;
}
}
/*************************************************************************/
void ModifyTime(void) /*調整時間*/
{
uchar ucharTemp;
ucharTemp=sec;
sec%=60; /*秒除60取余數為sec*/
min+=ucharTemp/60; /*分加上秒的進位先暫存于min*/
ucharTemp=min;
min%=60; /*分再除60取余數為min*/
hour=(hour+ucharTemp/60)%24; /*時加上分的進位除24取余數為hour時*/
DisplayArray[0]=(sec%10); /*將時間存入顯示緩沖區*/
DisplayArray[1]=(sec/10);
DisplayArray[2]=(min%10);
DisplayArray[3]=(min/10);
DisplayArray[4]=(hour%10);
DisplayArray[5]=(hour/10);
}
/*************************************************************************/
void ScanSeg7() /*數碼管掃描顯示*/
{
static uchar s_scanCounter;
s_scanCounter++;
if(s_scanCounter>5) s_scanCounter=0; /*ptr1>5表示6個數碼管都已經掃描過*/
P0=s_scanCounter|(DisplayArray[s_scanCounter]<<4);
}
/*************************************************************************/
void IICClockDelay() /*IIC總線時鐘電平延時*/
{
nop;nop;nop;nop;nop;nop;
}
/*************************************************************************/
void IICAck(bit ackValue) /*MCU對24C02的應答/不應答函數*/
{
if(ackValue==0) /*ackValue=0表示不應答*/
SDA=0;
else /*ackValue=1表示應答*/
SDA=1;
IICClockDelay();
SCL=1;
IICClockDelay();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -