📄 main.c
字号:
#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 + -