📄 clock.c
字号:
#include "2410addr.h"
#include "2410lib.h"
#include "timer.h"
//void alm_start();
//void alm_stop();
char *date[8] = { "","星期天","星期一", "星期二", "星期三", "星期四","星期五", "星期六" } ;
int year,sec,mini,hour,dat,weekday,mon;
void alm_int(U8 almyear,U8 almmonth,U8 almday,
U8 almhour,U8 almminitue,U8 almsec)
{
rRTCCON=0x01;
rALMYEAR=almyear;
rALMMON=almmonth;
rALMDATE=almday;
rALMHOUR=almhour;
rALMMIN=almminitue;
rALMSEC=almsec;
rRTCCON=0x00;
}
void realtime_set(U8 YEARDATA,U8 MONDATA,U8 DATEDATA,U8 DAYDATA,
U8 HOURDATA,U8 MINDATA,U8 SECDATA)
{
rRTCCON=0x01;
rBCDYEAR=YEARDATA;
rBCDMON=MONDATA;
rBCDDATE=DATEDATA;
rBCDDAY=DAYDATA;
rBCDHOUR=HOURDATA;
rBCDMIN=MINDATA;
rBCDSEC=SECDATA;
rRTCCON = 0x00; //disable RTC write
}
void get_time()
{
rRTCCON=0x01;
if(rBCDYEAR==0x99)
year=0x1999;
else
year =0x2000+rBCDYEAR;
mon=rBCDMON;
//day=rBCDDAY;
weekday=rBCDDAY;
dat=rBCDDATE;
hour=rBCDHOUR;
mini=rBCDMIN;
sec=rBCDSEC;
rRTCCON = 0x0; //disable RTC write
}
void __irq Tick_Isr()
{
get_time();
Uart_Printf("今天是: %4x-%02x-%02x- %s %02x:%02x:%02x\n",year,mon,dat,date[weekday],hour,mini,sec);
ClearPending(BIT_TICK);
}
void realtime_start()
{
pISR_TICK=(unsigned)Tick_Isr;
rTICNT=0xFF;//Tick time interrupt enable;Tick time count value=127,1s
EnableIrq(BIT_TICK);//open RTC TICK INTERRUPT
}
void realtime_stop()
{
rTICNT &= ~(1<<7);
DisableIrq(BIT_TICK);
}
void alm_stop()
{
DisableIrq(BIT_RTC);
rRTCALM=0x00;
}
void __irq alm()
{
ClearPending(BIT_RTC);
rGPBCON=(rGPBCON|0x03)&0xFFFFFFFD;//GPB0???output
rGPBUP|=0x01; //disable GPF pull up
rGPBDAT=(rGPBDAT&0xFFFFFFFE)|0x01;
ClearPending(BIT_ALLMSK);
Delay(10000);
//GPB0=1,beep disable
rGPBCON=(rGPBCON|0x03)&0xFFFFFFFD;//GPB0???output
rGPBUP|=0x01; //disable GPF pull up
rGPBDAT=(rGPBDAT&0xFFFFFFFE)|0x00;
// CloseAlarm();
Uart_Printf("s3c244A RTCALM oucer \n");
//enable_beep=0;
alm_stop();
}
void alm_start()
{
pISR_RTC=(unsigned)alm;
ClearPending(BIT_RTC);
rRTCALM = (0x7f); //enable alarm
EnableIrq(BIT_RTC);
}
int Main()
{
SetClockDivider(1, 1);
SetSysFclk(DFT_FCLK_VAL);
Port_Init();
Uart_Select(0);
Uart_Init(0, UART_BAUD);
realtime_set(0x08,0x04,0x30,0x1,0x23,0x59,0x55);
alm_int(0x08,0x05,0x01,0x0,0x0,0x15);
Uart_Printf("The main is begined");
realtime_start();
alm_start();
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -