?? main.c
字號:
/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.6 Professional
Automatic Program Generator
?Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mail:office@hpinfotech.com
Project :
Version :
Date : 2008-6-28
Author : F4CG
Company : F4CG
Comments:
Chip type : ATmega16
Program type : Application
Clock frequency : 4.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#include "ds1302ram.h"
#include "key.h"
#include "lcd.h"
#include "music.h"
#include "time.h"
#include "timing.h"
#include "usart.h"
#include "ds1302ram.c"
#include "key.c"
#include "lcd.c"
#include "music.c"
#include "time.c"
#include "timing.c"
#include "usart.c"
//bit noiseSetFlag; //用于存放鬧鐘是否起鬧的標志
unsigned char noiseMusicChoose; //定義鬧鐘音樂選擇的變量
bit noiseMusicOrPlayMusic; //標識設(shè)置播放的音樂還是鬧鐘音樂
void SeeLunarAndWeek(void);
void SetTimeAndSolar(void);
void SetNoiseData(void);
void SetMusicPlay(void);
unsigned char NoiseTimeFlag(void);
void SeeLunarAndWeek(void)
{
LcdClear(); //清屏
LcdSetXY(0, 0); //設(shè)置顯示農(nóng)歷初始化的數(shù)據(jù)
LcdPutFlashString(lunarData);
time2sIsOK = 0; //清哦2s到達的標志以及計數(shù)器
time2sCounter = 0;
while (1)
{
FindTime(); //判斷各個時間段是否已經(jīng)到達
DS1302ReadTimeData(); //讀取時間
FindDataOfWeek(); //計算星期
SolarToLunar(); //國歷轉(zhuǎn)換為農(nóng)歷
Change(); //顯示數(shù)據(jù)送緩沖區(qū)
DisplayTwo(); //顯示農(nóng)歷和星期
if (time2sIsOK == 1) //2s到了則返回顯示陽歷和時間
{
LcdSetXY(0, 0);
LcdPutFlashString(solarData);
LcdSetXY(1, 0);
LcdPutFlashString(timeData);
DisplayOne();
break;
}
}
}
void SetTimeAndSolar(void)
{
unsigned char key6KeyValue; //用于存儲鍵值
bit setbit; //有鍵按下的標志
bit setOnbit; //顯示的標志
unsigned char key6I; //循環(huán)變量
setbit = 0; //各個標志位清0
setOnbit = 0;
key6KeyValue = 0;
time10msIsOK = 0;
time500msIsOK = 0;
time20sIsOK = 0;
time500msCounter = 0;
time20sCounter = 0;
//顯示初始化
LcdSetXY(0, 0);
LcdPutFlashString(solarData);
LcdSetXY(1, 0);
LcdPutFlashString(timeData);
DS1302ReadTimeData();
Change();
DisplayOne();
key6I = 0;
while (1)
{
FindTime(); //判斷各個時間段是否已經(jīng)到達
if(time10msIsOK)
{
time10msIsOK = 0;
key6KeyValue = FindKeyValue(); //讀取鍵值
switch (key6KeyValue)
{
case key6:
time20sCounter = 0; //只要有鍵按下則清0 20s計數(shù)器
if (setbit) //設(shè)置時間
{
FindDataOfWeek(); //計算星期
DS1302WriteTimeData();
}
break;
case key1: //按鍵1為右移處理
setbit = 1; //有鍵按下標志位置1,表示有鍵按下
time20sCounter = 0; //只要有鍵按下則清0 20s計數(shù)器
//以下兩行顯示為了防止剛才恰好沒有顯示
LcdPutOneChar((DS1302Data[key6I] / 10) + 48);
LcdPutOneChar((DS1302Data[key6I] % 10) + 48);
if (key6I == 0)
{
key6I = 6;
}
else if (key6I == 4)
{
key6I = 2;
}
else
{
--key6I;
}
break;
case key2: //按鍵2為左移處理
setbit = 1; //有鍵按下標志位置1,表示有鍵按下
time20sCounter = 0; //只要有鍵按下則清0 20s計數(shù)器
//以下兩行顯示為了防止剛才恰好沒有顯示
LcdPutOneChar((DS1302Data[key6I] / 10) + 48);
LcdPutOneChar((DS1302Data[key6I] % 10) + 48);
if (key6I == 6)
{
key6I = 0;
}
else if (key6I == 2)
{
key6I = 4;
}
else
{
++key6I;
}
break;
case key3: // 按鍵3為加1處理
setbit = 1; //有鍵按下標志位置1,表示有鍵按下
time20sCounter = 0; //只要有鍵按下則清0 20s計數(shù)器
++DS1302Data[key6I];
break;
case key4: //按鍵4為減1處理
setbit = 1; //有鍵按下標志位置1,表示有鍵按下
time20sCounter = 0; //只要有鍵按下則清0 20s計數(shù)器
--DS1302Data[key6I];
break;
case key5: //按鍵5為加10處理
setbit = 1; //有鍵按下標志位置1,表示有鍵按下
time20sCounter = 0; //只要有鍵按下則清0 20s計數(shù)器
DS1302Data[key6I] += 10;
break;
case key8: //按鍵8為減10處理
setbit = 1; //有鍵按下標志位置1,表示有鍵按下
time20sCounter = 0; //只要有鍵按下則清0 20s計數(shù)器
DS1302Data[key6I] -= 10;
break;
};
}
if ((key6KeyValue == key6)||(time20sIsOK ==1))//按下退出鍵或者20s沒有鍵按下則推出時間設(shè)置
{
DS1302ReadTimeData();
FindDataOfWeek();
Change();
LcdSetXY(0, 0);
LcdPutFlashString(solarData);
LcdSetXY(1, 0);
LcdPutFlashString(timeData);
DisplayOne();
break;
}
else
{
if (time500msIsOK) //500ms到,取反顯示標志
{
time500msIsOK = 0;
setOnbit = ~setOnbit;
}
switch (key6I) //選擇顯示的位置
{
case 0:
LcdSetXY(1, 14);
break;
case 1:
LcdSetXY(1, 11);
break;
case 2:
LcdSetXY(1, 8);
break;
case 4:
LcdSetXY(0, 14);
break;
case 5:
LcdSetXY(0, 11);
break;
case 6:
LcdSetXY(0, 8);
break;
};
DS1302CheckDataOve();
if (setOnbit) //500ms顯示數(shù)據(jù),500ms顯示空格
{
LcdPutOneChar(0x20);
LcdPutOneChar(0x20);
}
else
{
LcdPutOneChar((DS1302Data[key6I] / 10) + 48);
LcdPutOneChar((DS1302Data[key6I] % 10) + 48);
}
switch (key6I) //選擇顯示的位置
{
case 0:
LcdSetXY(1, 14);
break;
case 1:
LcdSetXY(1, 11);
break;
case 2:
LcdSetXY(1, 8);
break;
case 4:
LcdSetXY(0, 14);
break;
case 5:
LcdSetXY(0, 11);
break;
case 6:
LcdSetXY(0, 8);
break;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -