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

📄 uart.c

📁 a gps program
💻 C
字号:
#include "includes.h"
#include "uart.h"

/*设置波特率子函数*/
void SetBaud(uint baud)
{
    TH1 = 256 - OSC / baud / 32 / 12;
    TL1 = TH1;
}


void SendData0(void)
{
    SendBuf[0] = 'B';
	SendBuf[1] = 'J';
	SendBuf[2] = 'T';
    SendBuf[3] = ',';
    SendBuf[4] = Year / 10 + '0';
    SendBuf[5] = Year % 10 + '0';
    SendBuf[6] = Month / 10 + '0';
    SendBuf[7] = Month % 10 + '0';
    SendBuf[8] = Day / 10 + '0';
    SendBuf[9] = Day % 10 + '0';
    SendBuf[10] = ',';
    SendBuf[11] = Hour / 10 + '0';
    SendBuf[12] = Hour % 10 + '0';
    SendBuf[13] = Minute / 10 + '0';
    SendBuf[14] = Minute % 10 + '0';
    SendBuf[15] = Second / 10 + '0';
    SendBuf[16] = Second % 10 + '0';
    SendBuf[17] = ',';
		
	SendBuf[32] = ',';
    SendBuf[33] = Frequency / 10000 + '0';
    SendBuf[34] = Frequency % 10000 / 1000 + '0';
    SendBuf[35] = '.';
    SendBuf[36] = Frequency % 1000 / 100 + '0';
    SendBuf[37] = Frequency % 100 / 10 + '0';
	SendBuf[38] = Frequency % 10 + '0';
	SendBuf[39] = '\r';
	SendBuf[40] = '\n';
    SendCoun = 0;
    SendLen = 41;
    SBUF = SendBuf[0];
}

void SendData1(void)
{
    SendBuf[0] = '<';
	SendBuf[1] = 'B';
	SendBuf[2] = '>';
    SendBuf[3] = Hour / 10 + '0';
    SendBuf[4] = Hour % 10 + '0';
    SendBuf[5] = Minute / 10 + '0';
    SendBuf[6] = Minute % 10 + '0';
    SendBuf[7] = Second / 10 + '0';
    SendBuf[8] = Second % 10 + '0';
	SendBuf[9] = Year / 10 + '0';
    SendBuf[10] = Year % 10 + '0';
    SendBuf[11] = Month / 10 + '0';
    SendBuf[12] = Month % 10 + '0';
    SendBuf[13] = Day / 10 + '0';
    SendBuf[14] = Day % 10 + '0';
	SendBuf[15] = '<';
	SendBuf[16] = 'F';
	SendBuf[17] = '>';
    SendBuf[18] = Frequency / 10000 + '0';
    SendBuf[19] = Frequency % 10000 / 1000 + '0';
    SendBuf[20] = '.';
    SendBuf[21] = Frequency % 1000 / 100 + '0';
    SendBuf[22] = Frequency % 100 / 10 + '0';
	SendBuf[23] = Frequency % 10 + '0';
	SendBuf[24] = '<';
	SendBuf[25] = 'C';
	SendBuf[26] = '>';
    
    SendBuf[33] = '\r';
	SendBuf[34] = '\n';
    SendCoun = 0;
    SendLen = 35;
    SBUF = SendBuf[0];
}

void SendData2(void)
{
    SendBuf[0] = 'S';
	SendBuf[1] = 'T';
	SendBuf[2] = Hour / 10 + '0';
    SendBuf[3] = Hour % 10 + '0';
    SendBuf[4] = Minute / 10 + '0';
    SendBuf[5] = Minute % 10 + '0';
    SendBuf[6] = Second / 10 + '0';
    SendBuf[7] = Second % 10 + '0';
    SendBuf[8] = Day / 10 + '0';
	SendBuf[9] = Day % 10 + '0';
    SendBuf[10] = Month / 10 + '0';
    SendBuf[11] = Month % 10 + '0';
    SendBuf[12] = Year / 10 + '0';
    SendBuf[13] = Year % 10 + '0';
    SendBuf[14] = 'A';
	
    SendBuf[21] = Frequency / 10000 + '0';
    SendBuf[22] = Frequency % 10000 / 1000 + '0';
	SendBuf[23] = Frequency % 1000 / 100 + '0';
	SendBuf[24] = Frequency % 100 / 10 + '0';
    SendBuf[25] = '\r';
	SendBuf[26] = '\n';
    SendCoun = 0;
    SendLen = 27;
    SBUF = SendBuf[0];
}

/*判断是否闰年*/
uchar LeapYear(uchar yea)
{
    uchar temp, YesNo;
    temp = yea % 4;
    if (temp == 0)
        YesNo = 'y';
    else
        YesNo = 'n';
    return(YesNo);
}  

uint PastDays(uint year, uchar month, uchar day)
{
    uint pass_days;
    switch(month) {
        case 1:
            pass_days = day - 1;
            break;
        case 2:
            pass_days = 31 + day - 1;
            break;
        case 3:
            pass_days = 59 + day - 1;
            break;
        case 4:
            pass_days = 90 + day - 1;
            break;               
        case 5:
            pass_days = 120 + day - 1;
            break;
        case 6:
            pass_days = 151 + day - 1;
            break;    
        case 7:
            pass_days = 181 + day - 1;
            break;
        case 8:
            pass_days = 212 + day - 1;
            break;    
        case 9:
            pass_days = 243 + day - 1;
            break;
        case 10:
            pass_days = 273 + day - 1;
            break;    
        case 11:
            pass_days = 304 + day - 1;
            break;
        case 12:
            pass_days = 334 + day - 1;
            break;    
       default:      
            break;        
    }   
    if (LeapYear(year) == 'y' && month > 2) {
        pass_days = pass_days + 1;
    }  
    return(pass_days);   
}

uint TimeDiffer(uchar year0, uchar month0, uchar day0, uchar year1, uchar month1, uchar day1)
{
    uint y1, y2, y3;
    y1 = year0;
    y2 = year1;
    while (y1 < y2) {
       if (LeapYear(y1) == 'y') {
           y3 = y3 + 1;
       }  
       y1 = y1 + 1;  
    }
    y3 = y3 + (year1 - year0) * 365;
    y3 = y3 + PastDays(year1, month1, day1) - PastDays(year0, month0, day0);
    return(y3);
}

/*计算年,月,日  */
void ComputeDate(void)
{
    uint days;
    Year = (Date[4] - '0') * 10 + (Date[5] - '0');
    Month = (Date[2] - '0') * 10 + (Date[3] - '0');
    Day = (Date[0] - '0') * 10 + (Date[1] - '0');
    Hour = (Time[0] - '0') * 10 + (Time[1] - '0');
    Minute = (Time[2] - '0') * 10 + (Time[3] - '0');
    Second = (Time[4] - '0') * 10 + (Time[5] - '0');
    Hour += 8;
    if(Hour >= 24) {
        Hour -= 24;
        Day += 1;
    }
    switch(Month) {
        case 1:
            if ( Day > 31) {
                Day = 1;
                Month += 1;
            }
            break;
        case 2:
            if (LeapYear(Year) == 'y') {
                if (Day > 29) {
                    Day = 1;
                    Month += 1;
                }
            }
            else {
                if ( Day > 28) {
                    Day = 1;
                    Month += 1;
                }
            }
            break;
        case 3:
            if (Day > 31) {
                Day = 1;
                Month += 1;
            }
            break;
        case 4:
            if (Day > 30) {
                Day = 1;
                Month += 1;
            }
            break;
        case 5:
            if (Day > 31) {
                Day = 1;
                Month += 1;
            }
            break;
        case 6:
            if (Day > 30) {
                Day = 1;
                Month += 1;
            }
            break;
        case 7:
            if (Day > 31) {
                Day = 1;
                Month += 1;
            }
            break;
        case 8:
            if (Day > 31) {
                Day = 1;
                Month += 1;
            }
            break;
        case 9:
            if (Day > 30) {
                Day = 1;
                Month += 1;
            }
            break;
        case 10:
            if (Day > 31) {
                Day = 1;
                Month += 1;
            }
            break;
        case 11:
            if (Day > 30) {
                Day = 1;
                Month += 1;
            }
            break;
        case 12:
            if (Day > 31) {
                Day = 1;
                Month += 1;
            }
            break;
        default:
            break;
        }
    if (Month > 12) {
        Month = 1;
        Year += 1;
    }
    days = TimeDiffer(0, 1, 2, Year, Month, Day);
    Week = days % 7;
}

⌨️ 快捷键说明

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