📄 uart.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 + -