s3c2440实时时钟的应用(二)

2014-11-24 09:15:12 · 作者: · 浏览: 1
uffer[1]>>4)+48;


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();