wh=(date_buffer[1]&0x0f)+48;
mould = & __ASCII[qh*16];
Draw_ASCII(78,70,0x0,mould);
mould = & __ASCII[wh*16];
Draw_ASCII(86,70,0x0,mould);
qh=String_M[0]-0xa0;
wh=String_M[1]-0xa0;
mould = & __HZK[ ( ( qh - 1 )*94 + wh- 1 )*32 ];
Draw_Text16(94,70,0x0f,mould);
//日
qh=(date_buffer[2]>>4)+48;
wh=(date_buffer[2]&0x0f)+48;
mould = & __ASCII[qh*16];
Draw_ASCII(110,70,0x0,mould);
mould = & __ASCII[wh*16];
Draw_ASCII(118,70,0x0,mould);
qh=String_D[0]-0xa0;
wh=String_D[1]-0xa0;
mould = & __HZK[ ( ( qh - 1 )*94 + wh- 1 )*32 ];
Draw_Text16(126,70,0x0f,mould);
//星期
for(k=0,xx=0;k<7-1;k++)
{
qh=ToWeek[date_buffer[3]][k]-0xa0;
wh=ToWeek[date_buffer[3]][k+1]-0xa0;
mould = & __HZK[ ( ( qh - 1 )*94 + wh- 1 )*32 ];
Draw_Text16(142+xx,70,0x0f,mould);
xx+=16;
k++;
}
//小时
qh=(date_buffer[4]>>4)+48;
wh=(date_buffer[4]&0x0f)+48;
mould = & __ASCII[qh*16];
Draw_ASCII(194,70,0x0,mould);
mould = & __ASCII[wh*16];
Draw_ASCII(202,70,0x0,mould);
mould = & __ASCII[ ':'*16 ];
Draw_ASCII(210,70,0x0f,mould);
//分
qh=(date_buffer[5]>>4)+48;
wh=(date_buffer[5]&0x0f)+48;
mould = & __ASCII[qh*16];
Draw_ASCII(218,70,0x0,mould);
mould = & __ASCII[wh*16];
Draw_ASCII(226,70,0x0,mould);
mould = & __ASCII[ ':'*16 ];
Draw_ASCII(234,70,0x0f,mould);
//秒
qh=(date_buffer[6]>>4)+48;
wh=(date_buffer[6]&0x0f)+48;
mould = & __ASCII[qh*16];
Draw_ASCII(242,70,0x0,mould);
mould = & __ASCII[wh*16];
Draw_ASCII(250,70,0x0,mould);
}
//按键中断,用于更新LCD上显示的时间
void __irq Key4_ISR(void)
{
rSRCPND = rSRCPND | 0x1;
rINTPND = rINTPND | 0x1;
flag=1; //置标志
}
//UART中断,用于修改时间
void __irq uartISP(void)
{
char ch;
static char temp;
static char count;
rSUBSRCPND |= 0x3;
rSRCPND |= 0x1<<28;
rINTPND |= 0x1<<28;
if(rUTRSTAT0 & 1) //接收数据处理部分
{
ch = rURXH0; //接收字节数据
if(ch==0xaa&&temp==0) //表示接收到修改时间的命令
{
temp=1;
count=0;
}
else if(temp==1) //接收时间数据
{
date_buffer[count]=ch; //依次存入时间数组内
count++;
if(count==7) //7个时间数据全部接收完毕
{
rUTXH0=0xaa; //发送0xAA
set_date(); //设置时间
count=0;
temp=0;
flag=1; //更新LCD上显示的时间
}
}
else
rUTXH0=ch; //不是接收时间的命令
}
}
void Main(void)
{
//初始化寄存器,内容省略
……
Brush_Background(0xffffff); //LCD背景为白色
show_date(); //在LCD上显示时间
flag=0; //清标志
while(1)
{
if(flag) //需要更新LCD上的显示时间
{
Brush_Background(0xffffff);
show_date();