?? main.c
字號:
LcdSetXY(1, 0);
LcdPutFlashString("MUSIC: 1");
while (1)
{
FindTime(); //判斷各個時間段是否已經到達
if (time10msIsOK)
{
time10msIsOK = 0;
key8KeyValue = FindKeyValue(); //讀取鍵值
switch (key8KeyValue)
{
case key8:
time20sCounter = 0; //只要有鍵按下則清0 20s計數器
if (setbit) //如果有鍵按下則進行處理
{
if(noiseMusicOrPlayMusic) //判斷為播放音樂還是設置鬧鐘音樂
{
noiseMusicChoose = key8MusicPlayChoose;
}
else
{
PlayMusic(key8MusicPlayChoose, 1);
}
}
break;
case key3:
time20sCounter = 0; //只要有鍵按下則清0 20s計數器
setbit = 1; //有鍵按下標志位置1,表示有鍵按下
if (key8MusicPlayChoose < 9) //加1處理
{
key8MusicPlayChoose++;
}
else
{
key8MusicPlayChoose = 0x01;
}
break;
case key4:
time20sCounter = 0; //只要有鍵按下則清0 20s計數器
setbit = 1; //有鍵按下標志位置1,表示有鍵按下
if (key8MusicPlayChoose > 1) //減1處理
{
key8MusicPlayChoose--;
}
else
{
key8MusicPlayChoose = 0x09;
}
break;
};
}
if ((key8KeyValue == key8)||(time20sIsOK ==1)) //按下退出鍵或者20s沒有鍵按下則推出設置播放音樂界面,進入顯示主程序
{
DS1302ReadTimeData();
FindDataOfWeek();
Change();
LcdSetXY(0, 0);
LcdPutFlashString(solarData);
LcdSetXY(1, 0);
LcdPutFlashString(timeData);
DisplayOne();
break;
}
else //否則顯示此時選擇的音樂
{
LcdSetXY(1, 7);
LcdPutOneChar(key8MusicPlayChoose + 48);
}
}
}
unsigned char NoiseTimeFlag(void)
{
unsigned char noiseTimeFlag = 0x01;//是否達到鬧鐘時間的標志,并初始化為到達
unsigned char i;
for(i = 0; i < 8; i++)
{
if (DS1302Data[i] != noiseData[i])
{
noiseTimeFlag = 0x00; //如果有一個數據不同,表示沒有到達鬧鐘時間,清0鬧鐘到達標志
break;
}
}
return noiseTimeFlag;
}
void main(void)
{
unsigned char mainKeyValue; //主程序中用于判斷鍵值的變量
bit mainPlayNoise;
bit mainPlayHour;
mainPlayNoise = 0;
mainPlayHour = 0;
KeyInit(); // 按鍵處理程序初始化
LcdInit(); // 液晶顯示初始化
MusicInit(); // 音樂播放初始化
TimingInit(); // 定時初始化
UsartInit(); // 串口初始化
//液晶最開始顯示陽歷和時間格式
LcdSetXY(0, 0);
LcdPutFlashString(solarData);
LcdSetXY(1, 0);
LcdPutFlashString(timeData);
// noiseSetFlag = 0; //清0鬧鐘使能標志
noiseMusicChoose = 0x01; //鬧鐘音樂默認為第一首
mainKeyValue = 0x00; //清0鍵值
noiseMusicOrPlayMusic = 0; //初始化默認為設置播放音樂
/* noiseData[0]=00;
noiseData[1]=00;
noiseData[2]=12;
noiseData[3] = 5;
noiseData[4]=0x01;
noiseData[5]=0x01;
noiseData[6]=0x01;
noiseData[7]=0x14;
DS1302WriteRamData();
noiseSetFlag = 1;
*/
DS1302ReadRamData(); //讀取鬧鐘數據存入noiseData
#asm("sei") //開放中斷
//主程序中循環執行以下語句
/* DS1302Data[0]=56;
DS1302Data[1]=59;
DS1302Data[2]=11;
DS1302Data[3]=5;
DS1302Data[4]=0x01;
DS1302Data[5]=0x01;
DS1302Data[6]=0x01;
DS1302Data[7]=0x14;
// DS1302Data[11]=0x14;
DS1302WriteTimeData();
*/
while (1)
{
FindTime(); //判斷各個時間段是否已經到達
DS1302ReadTimeData(); //讀取時鐘數據
FindDataOfWeek(); //計算星期
Change(); //顯示數據送緩沖區
DisplayOne(); //顯示陽歷和時間
LcdSetXY(1, 6); //顯示鬧鐘標志
if (noiseData[8] == 0x01 )
{
LcdPutOneChar(0x2A);
}
else
{
LcdPutOneChar(0x20);
}
if (TCCR1B == 0x08)
{
mainPlayNoise = 0;
mainPlayHour = 0;
}
if ((NoiseTimeFlag() == 0x01) && (noiseData[8] == 0x01)) //判斷是否鬧鐘時間到,如果是的話延時1s鬧鐘起鬧
{
mainPlayNoise = 1;
// mainPlayHour = 0;
DS1302ReadTimeData();
Change();
DisplayOne();
delay_ms(300);
DS1302ReadTimeData();
Change();
DisplayOne();
delay_ms(300);
DS1302ReadTimeData();
Change();
DisplayOne();
delay_ms(400);
PlayMusic(noiseMusicChoose, 10);
}
else if ((DS1302Data[1] == 0) && (DS1302Data[0] == 0) && (mainPlayNoise == 0)) //判斷是否為整點,如果是的話延時1s報時
{
mainPlayHour = 1;
// mainPlayNoise = 0;
DS1302ReadTimeData();
Change();
DisplayOne();
delay_ms(300);
DS1302ReadTimeData();
Change();
DisplayOne();
delay_ms(300);
DS1302ReadTimeData();
Change();
DisplayOne();
delay_ms(400);
if (DS1302Data[2] % 12)
{
PlayMusic(0x0A, (DS1302Data[2] % 12));
}
else
{
PlayMusic(0x0A, 12);
}
}
// else
// {
// mainPlayNoise = 0;
// mainPlayHour = 0;
// }
if (time10msIsOK) //判斷是否10ms已經到達,如果是,則掃描一次按鍵
{
time10msIsOK = 0;
mainKeyValue = FindKeyValue(); //讀取鍵值
if ((mainKeyValue != 0) && (TCCR1B == 0x0A)) //如果按鍵按下時有音樂在播放,則關閉定時器1,停止音樂播放
{
TCCR1B = 0x08;
}
else
{
switch (mainKeyValue)
{
case key5 : //按鍵5按下則顯示農歷和星期
SeeLunarAndWeek();
break;
case key6: //按鍵6按下為設置時間和陽歷
SetTimeAndSolar();
break;
case key7: //按鍵7按下為設置鬧鐘時間和音樂
SetNoiseData();
break;
case key8: //按鍵8按下為播放音樂選擇
SetMusicPlay();
break;
};
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -