?? system.c
字號:
#include "includes.h"
#include "key.h"
#include "DS1302.h"
#include "Delay.h"
#include "HT1621B.h"
#include "prototype.h"
#include "radar.h"
/*
***************************************************************************************************
* Function name : ReadAndDisplay
* Description : Read the date&time from DS1302 and send to diaplay
* Note : None
* Parameters : None
* Returns : None
* Attribute : Public function
* Others : Application routin
***************************************************************************************************
*/
void ReadAndDisplay(void)
{
UCHAR_8 data;
static UCHAR_8 dot=0;
if (0x00!=dot)
{
dot = 0x00;
}
else
{
dot = 0x01;
}
data = DS1302ReadByte(DS_CLOCK_HOUR);
HT1621BWritedata(0x00,LED_CODE[(data>>4)%10]);//時十位顯示
if (0x00!=dot)
{
HT1621BWritedata(0x02,LED_CODE[(data&0x0F)%10]);//時個位顯示帶點
}
else
{
HT1621BWritedata(0x02,LED_CODE[(data&0x0F)%10]&0x7F);//時個位顯示不帶點
}
data = DS1302ReadByte(DS_CLOCK_MIN);
if (0x00!=dot)
{
HT1621BWritedata(0x04,LED_CODE[((data&0x70)>>4)%10]);//秒十位顯示帶點
}
else
{
HT1621BWritedata(0x04,LED_CODE[((data&0x70)>>4)%10]&0x7F);//秒十位顯示不帶點
}
HT1621BWritedata(0x06,LED_CODE[(data&0x0F)%10]&0x7F);//秒個位顯示
data = DS1302ReadByte(DS_CLOCK_YEAR);
HT1621BWritedata(0x08,LED_CODE[(data>>4)%10]);//年十位顯示
HT1621BWritedata(0x0A,LED_CODE[(data&0x0F)%10]);//年個位顯示
data = DS1302ReadByte(DS_CLOCK_MONTH);
HT1621BWritedata(0x0C,LED_CODE[(data>>4)%10]);//月十位顯示
HT1621BWritedata(0x0E,LED_CODE[(data&0x0F)%10]);//月個位顯示
data = DS1302ReadByte(DS_CLOCK_DATE);
HT1621BWritedata(0x10,LED_CODE[(data>>4)%10]&0x7F);//日十位顯示
if (TESTBIT(SysFlag,Nag_bit))
{
HT1621BWritedata(0x12,LED_CODE[(data&0x0F)%10]);//負溫,日個位顯示
}
else
{
HT1621BWritedata(0x12,LED_CODE[(data&0x0F)%10]&0x7F);//正溫,日個位顯示
}
}
/*
***************************************************************************************************
* Function name : ReadAndStore
* Description : Read the data from DS1302 conver to metric and store to the buffer
* Note : This routine is application roution
* Parameters : UCHAR_8 * data_p,指向存儲緩沖的指針
* Returns : None
* Attribute : Public function
* Others : 讀回年月日小時分鐘轉(zhuǎn)換為十進制數(shù)并存儲于緩沖,共五個字節(jié)
***************************************************************************************************
*/
void ReadConvAndStore(UCHAR_8 * data_p)
{
UCHAR_8 counter;
data_p[0] = DS1302ReadByte(DS_CLOCK_HOUR);
data_p[1] = DS1302ReadByte(DS_CLOCK_MIN);
data_p[2] = DS1302ReadByte(DS_CLOCK_YEAR);
data_p[3] = DS1302ReadByte(DS_CLOCK_MONTH);
data_p[4] = DS1302ReadByte(DS_CLOCK_DATE);
DS1302WriteByte(0x00,DS_CLOCK_CONTL);//寫允許
DS1302WriteByte(0x80,DS_CLOCK_SEC);//時鐘振蕩停止
DS1302WriteByte(0x80,DS_CLOCK_CONTL);//寫保護
for (counter=0;counter<5;counter++)
{
data_p[counter] = (data_p[counter]>>4)*10+(data_p[counter]&0x0F);
}
}
/*
***************************************************************************************************
* Function name : ConvertAndWrite
* Description : Convert metric number to BCD code, Write to DS1302 and send to display
* Note : This routine is application roution
* Parameters : UCHAR_8 * data_p,指向存儲緩沖的指針
* Returns : None
* Attribute : Public function
* Others : 將十進制數(shù)轉(zhuǎn)換為BCD碼寫入DS1302并送顯示
***************************************************************************************************
*/
void ConvertAndWrite(const UCHAR_8 * const data_p)//第一個const表示數(shù)據(jù)內(nèi)容不可更改,第二個const表示指針值不可更改
{
UCHAR_8 counter;
UCHAR_8 data_buf[5];
//convert metric to BCD code
for (counter=0;counter<5;counter++)
{
data_buf[counter] = ((data_p[counter]/10)<<4)|(data_p[counter]%10);
}
DS1302WriteByte(0x00,DS_CLOCK_CONTL);//寫允許
DS1302WriteByte(data_buf[0],DS_CLOCK_HOUR);
DS1302WriteByte(data_buf[1],DS_CLOCK_MIN);
DS1302WriteByte(data_buf[2],DS_CLOCK_YEAR);
DS1302WriteByte(data_buf[3],DS_CLOCK_MONTH);
DS1302WriteByte(data_buf[4],DS_CLOCK_DATE);
DS1302WriteByte(0x30,DS_CLOCK_SEC);//時鐘振蕩開始,并設(shè)置為30秒
DS1302WriteByte(0x80,DS_CLOCK_CONTL);//寫保護
}
/*
***************************************************************************************************
* Function name : Updown
* Description : Trade the time data
* Note : This routine is application roution
* Parameters : data_p:指向欲修改數(shù)據(jù)的指針
* : max_value:up操作時的峰值,若當(dāng)前值為此值,按UP按鈕將置為min_value,
* : min_value:down操作時的最小值,若當(dāng)前值為此值,按DOWN按鍵將置為max_value
* Returns : 1:有按鍵操作,0:無按鍵操作
* Attribute : Public function
* Others : None
***************************************************************************************************
*/
UCHAR_8 Updown(UCHAR_8 * const data_p,UCHAR_8 max_value,UCHAR_8 min_value)//const 表示指針不可更改,但其指向的值可以改變
{
if (TESTBIT(ButtonFlag,KEY1_BIT))//up
{
CLEARBIT(ButtonFlag,KEY1_BIT);
(*data_p)++;
if ((*data_p)>max_value)
{
(*data_p) = min_value;
}
return(1);
}
if (TESTBIT(ButtonFlag,KEY2_BIT))//down
{
CLEARBIT(ButtonFlag,KEY2_BIT);
if ((*data_p)==min_value)
{
*data_p = max_value;
}
else
{
(*data_p)--;
}
return(1);
}
return(0);
}
/*
***************************************************************************************************
* Function name : KeyBoardTrade
* Description : Trade the keyboard data
* Note : This routine is application roution
* Parameters : None
* Returns : None
* Attribute : Public function
* Others : None
***************************************************************************************************
*/
void KeyBoardTrade(void)
{
/***************************hour min year month date**/
static UCHAR_8 time_buf[5] ={0x00,0x00,0x07,0x0B,0x00};
const UCHAR_8 max_value[5]={23, 59, 99, 12, 31};
const UCHAR_8 min_value[5]={ 0, 0, 0, 1, 1};
static UCHAR_8 set_flag=5;
if (0x00!=Radar_time)
{
if (5!=set_flag)//正在調(diào)時,立刻將數(shù)據(jù)保存退出
{
//將數(shù)據(jù)送顯并存入DS1302,數(shù)據(jù)將保留于緩存中,并將開啟DS1302走時
ConvertAndWrite(time_buf);
set_flag = 5;
}
return;
}
Alarm = 0;
if (!TESTBIT(SysFlag,Fir_Bit))
{
SETBIT(SysFlag,Fir_Bit);
HT1621BWritedata(0x18,0);
HT1621BWritedata(0x1A,0);
}
if (0x00!=ButtonFlag)//有任何按鍵將重新計時10秒
{
SetTimeOver = 0x0A;//調(diào)時空閑10秒將自動退出
}
if (TESTBIT(ButtonFlag,KEY3_BIT))
{
ButtonFlag = 0x00;//清除空閑間的按鈕標(biāo)志
if ((0x01==set_flag)||(0x04==set_flag))
{
HT1621BWritedata(set_flag*4,LED_CODE[(time_buf[set_flag]/10)%10]);
HT1621BWritedata(set_flag*4+2,LED_CODE[time_buf[set_flag]%10]&0x7F);
}
else if (set_flag<5)
{
HT1621BWritedata(set_flag*4,LED_CODE[(time_buf[set_flag]/10)%10]);
HT1621BWritedata(set_flag*4+2,LED_CODE[time_buf[set_flag]%10]);
}
set_flag++;
if (5==set_flag)
{
//將數(shù)據(jù)送顯并存入DS1302,數(shù)據(jù)將保留于緩存中,并將開啟DS1302走時
ConvertAndWrite(time_buf);
}
else if (6==set_flag)
{
set_flag = 0;
//將數(shù)據(jù)從DS1302讀出并轉(zhuǎn)換為十進制數(shù)存于緩沖中,并將停止DS1302走時
ReadConvAndStore(time_buf);
HT1621BWritedata(4,LED_CODE[(time_buf[1]/10)%10]);
}
}
else if (set_flag<5)
{
if (Updown(&time_buf[set_flag],max_value[set_flag],min_value[set_flag]))
{
if ((0x01==set_flag)||(0x04==set_flag))
{
HT1621BWritedata(set_flag*4,LED_CODE[(time_buf[set_flag]/10)%10]);
HT1621BWritedata(set_flag*4+2,LED_CODE[time_buf[set_flag]%10]&0x7F);
}
else
{
HT1621BWritedata(set_flag*4,LED_CODE[(time_buf[set_flag]/10)%10]);
HT1621BWritedata(set_flag*4+2,LED_CODE[time_buf[set_flag]%10]);
}
}
else if (0x00==LongKeyFlag)
{
if (TESTBIT(SysFlag,Time_500ms_Bit))
{
static UCHAR_8 dis=0;
CLEARBIT(SysFlag,Time_500ms_Bit);
if (0x00==dis)
{
dis = 0x01;
if ((0x00==set_flag)||(0x02==set_flag)||(0x03==set_flag))
{
HT1621BWritedata(set_flag*4,LED_CODE[(time_buf[set_flag]/10)%10]);
HT1621BWritedata(set_flag*4+2,LED_CODE[time_buf[set_flag]%10]);
}
else
{
HT1621BWritedata(set_flag*4,LED_CODE[(time_buf[set_flag]/10)%10]);
HT1621BWritedata(set_flag*4+2,LED_CODE[time_buf[set_flag]%10]&0x7F);
}
}
else
{
dis = 0x00;
if ((0x00==set_flag)||(0x02==set_flag)||(0x03==set_flag))
{
HT1621BWritedata(set_flag*4,0x80);
HT1621BWritedata(set_flag*4+2,0x80);
}
else
{
HT1621BWritedata(set_flag*4,0x80);
HT1621BWritedata(set_flag*4+2,0x00);
}
}
}
}
if (0x00==SetTimeOver)//超時退出
{
set_flag = 0x05;
//將數(shù)據(jù)送顯并存入DS1302,數(shù)據(jù)將保留于緩存中,并將開啟DS1302走時
ConvertAndWrite(time_buf);
}
}
else
{
if (TESTBIT(SysFlag,Time_500ms_Bit))
{
CLEARBIT(SysFlag,Time_500ms_Bit);
ReadAndDisplay();
ReadTempAndDisplay();
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -