⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 SUMSUNG S3C44B0X ARM7的一个RTC实时时钟的显示和修改的例程
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "option.h"
#include "def.h"
#include "44b.h"
#include "44blib.h"
//////////////////////////

#define TESTYEAR 	(0x99)
#define TESTMONTH 	(0x12)
#define TESTDAY		(0x31)
#define TESTDATE        (0x06)  // SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7   
#define TESTHOUR	(0x23)
#define TESTMIN		(0x59)
#define TESTSEC		(0x59)

#define TESTYEAR2	(0x00)
#define TESTMONTH2 	(0x01)
#define TESTDAY2	(0x01)
#define TESTDATE2	(0x07)  // SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7   
#define TESTHOUR2	(0x00)
#define TESTMIN2	(0x00)
#define TESTSEC2	(0x00)
////////////////////////////////////////
void Isr_Init(void);
void HaltUndef(void);
void HaltSwi(void);
void HaltPabort(void);      
void HaltDabort(void);

int Test_Rtc_Alarm(void);
void Test_Rtc_Tick(void);
void Display_Rtc(void);
void DisplayRtc(void);
void Rtc_Init(void);
void __irq Rtc_Tick(void);        //函数声明关键字,使用_irq关键字的函数可以被用来作为中断处理程序,
                                  //除了浮点寄存器外,其他所以寄存器都必须保存
void __irq Rtc_display(void);
char *date[8] = {"","SUN","MON","TUE","WED","THU","FRI","SAT"};
volatile unsigned int sec_tick;
int year,month,day,weekday,hour,min,sec;
volatile int i;
volatile char c;
volatile int c_buffer;
volatile int c_year;
volatile int c_month;
volatile int c_day;
volatile int c_date;
volatile int c_hour;
volatile int c_min;
volatile int c_sec;

void Main(void)
{
    unsigned char *src, *dst;
    int i;
    unsigned int memSum;

    rSYSCFG=SYSCFG_8KB;
#if (PLLON==1)                            //在option.h文件中已经宏定义MCLK=40000000,PLLON=1,PLL_M=0x48
                                          //PLL_P=0x3,PLL_S=0x2
    ChangePllValue(PLL_M,PLL_P,PLL_S);
#endif

    Isr_Init();
    Port_Init();
    Uart_Init(0,115200);
    Uart_Select(0);        
    Delay(0);  //calibrate Delay()
    Led_Display(7);          //LED亮
    Delay(1000);  //calibrate Delay()
    Led_Display(0);          //LED灭
    Delay(5000);  //calibrate Delay()
    Led_Display(7);          //LED亮
    Uart_Printf("This test should be excuted once RTC test(Alarm) for RTC initialization\n");
    Uart_Printf("Press 'M' in your keyboard if you want to modify time!\n");
    Rtc_Init(); 
    pISR_TICK=(unsigned)Rtc_display;

    rRTCCON = 0x01;    // R/W enable, 1/32768, Normal(merge), No reset
    sec_tick=1;
    rINTMSK=~(BIT_GLOBAL|BIT_TICK);    // 允许全局中断和TICK时间滴答中断
    
    rTICINT = 127+(1<<7);	//START    // 设置TICK TIME计数寄存器,使能时间滴答中断,时间滴答计数值为127

//    Uart_Getch();
//    rINTMSK |= (BIT_GLOBAL | BIT_TICK);  // 关闭全局中断和TICK时间滴答中断
//    rRTCCON=0x0;	//END                // R/W disable
    
    while(1)
    {
       Uart_Select(0);
//      Delay(500);  //calibrate Delay()
//      Led_Display(7);          //LED全亮
//      Delay(500);  //calibrate Delay()
//      Led_Display(0);          //LED全灭
//      Delay(500);  //calibrate Delay()
      Led_Display(1);          //LED1亮
      Delay(2000);  //calibrate Delay()
	  Led_Display(2);          //LED2亮
      Delay(2000);  //calibrate Delay()
      Led_Display(4);          //LED3亮
      Delay(2000);  //calibrate Delay()
//      Led_Display(7);          //LED全亮
//      c=Uart_Getch();
//      i=Uart_GetIntNum();
//      i=0x8;
//      Uart_Printf("\b\b0%x",i);
    }


}

void __irq Rtc_display(void)
{
    rI_ISPC=BIT_TICK;           //清除INT_TICK的中断挂起标志
    c=Uart_GetKey();
//    Uart_Printf("%c\n",c);
    if (c=='m')
    {
        Uart_Printf("\nPlease input the year!(<100)\n");
        c_buffer=Uart_GetIntNum();
		c_year=(((c_buffer/10)<<4)|(c_buffer%10));
        rBCDYEAR=c_year;

        Uart_Printf("Please input the month!(<13)\n");
        c_buffer=Uart_GetIntNum();
		c_month=(((c_buffer/10)<<4)|(c_buffer%10));
        rBCDMON=c_month;

        Uart_Printf("Please input the day!(<32)\n");
        c_buffer=Uart_GetIntNum();
		c_day=(((c_buffer/10)<<4)|(c_buffer%10));
        rBCDDAY=c_day;

        Uart_Printf("Please input the week!(<8)\n");
        c_buffer=Uart_GetIntNum();
		c_date=(((c_buffer/10)<<4)|(c_buffer%10));
        rBCDDATE=c_date;

        Uart_Printf("Please input the hour!(<24)\n");
        c_buffer=Uart_GetIntNum();
		c_hour=(((c_buffer/10)<<4)|(c_buffer%10));
        rBCDHOUR=c_hour;

        Uart_Printf("Please input the minute!(<60)\n");
        c_buffer=Uart_GetIntNum();
		c_min=(((c_buffer/10)<<4)|(c_buffer%10));
        rBCDMIN=c_min;

        Uart_Printf("Please input the second!(<60)\n");
        c_buffer=Uart_GetIntNum();
		c_sec=(((c_buffer/10)<<4)|(c_buffer%10));
        rBCDSEC=c_sec;
    }
    if(rBCDYEAR == 0x99) 
	    year = 0x1999;
	else 
	    year = 0x2000 + rBCDYEAR;
	    month=rBCDMON;
	    day=rBCDDAY;
	    weekday=rBCDDATE;
	    hour=rBCDHOUR;
	    min=rBCDMIN;
	    sec=rBCDSEC;

	    if(month<10&day>10&hour>10&min>10&sec>10)
	    Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,0%1x,%2x,%s,%2x:%2x:%2x",year,month,day,date[weekday],hour,min,sec);	
	    else if(month>10&day<10&hour>10&min>10&sec>10)
	    Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,%2x,0%1x,%s,%2x:%2x:%2x",year,month,day,date[weekday],hour,min,sec);	
           else if(month>10&day>10&hour<10&min>10&sec>10)
	    Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,%2x,%2x,%s,0%1x:%2x:%2x",year,month,day,date[weekday],hour,min,sec);	
           else if(month>10&day>10&hour>10&min<10&sec>10)
	    Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,%2x,%2x,%s,%2x:0%1x:%2x",year,month,day,date[weekday],hour,min,sec);	
           else if(month>10&day>10&hour>10&min>10&sec<10)
	    Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,%2x,%2x,%s,%2x:%2x:0%1x",year,month,day,date[weekday],hour,min,sec);
           else if(month<10&day<10&hour>10&min>10&sec>10)
	    Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,0%1x,0%1x,%s,%2x:%2x:%2x",year,month,day,date[weekday],hour,min,sec);
           else if(month<10&day>10&hour<10&min>10&sec>10)
	    Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,0%1x,%2x,%s,0%1x:%2x:%2x",year,month,day,date[weekday],hour,min,sec);
           else if(month<10&day>10&hour>10&min<10&sec>10)
	    Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,0%1x,%2x,%s,%2x:0%1x:%2x",year,month,day,date[weekday],hour,min,sec);
           else if(month<10&day>10&hour>10&min>10&sec<10)
	    Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,0%1x,%2x,%s,%2x:%2x:0%1x",year,month,day,date[weekday],hour,min,sec);
           else if(month>10&day<10&hour<10&min>10&sec>10)
	    Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,%2x,0%1x,%s,0%1x:%2x:%2x",year,month,day,date[weekday],hour,min,sec);
           else if(month>10&day<10&hour>10&min<10&sec>10)
	    Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,%2x,0%1x,%s,%2x:0%1x:%2x",year,month,day,date[weekday],hour,min,sec);
           else if(month>10&day<10&hour>10&min>10&sec<10)
	    Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,%2x,0%1x,%s,%2x:%2x:0%1x",year,month,day,date[weekday],hour,min,sec);
           else if(month>10&day>10&hour<10&min<10&sec>10)
	    Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,%2x,%2x,%s,0%1x:0%1x:%2x",year,month,day,date[weekday],hour,min,sec);
           else if(month>10&day>10&hour<10&min>10&sec<10)
	    Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,%2x,%2x,%s,0%1x:%2x:0%1x",year,month,day,date[weekday],hour,min,sec);
           else if(month>10&day>10&hour>10&min<10&sec<10)
	    Uart_Printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%4x,%2x,%2x,%s,%2x:0%1x:0%1x",year,month,day,date[weekday],hour,min,sec);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -