03实时时钟模块

  • 格式:doc
  • 大小:38.00 KB
  • 文档页数:5

模块3 实时时钟模块sbit sclk_1302 =P3^2;sbit io_1302 =P3^3;sbit rst_1302 =P3^4;//*****************************************************************////1.函数:init_1302();//2.参数:无入口参数,无出口参数//3.所用变量://4.功能:只是在一上电时对时钟进行处理。

//****************************************************************//void init_1302(){rst_1302=0;sclk_1302=0;_nop_();_nop_();rst_1302=1;write_time(0x8e,0);//**********************************关写保护write_time(0x80,5);//**********************************写秒write_time(0x82,5);//**********************************写分write_time(0x84,0x22);//*******************************写时write_time(0x86,3);//**********************************写日期write_time(0x88,6);//**********************************写月份write_time(0x8a,3);//**********************************写星期write_time(0x8c,9);//**********************************写年份write_time(0x90,0xab);//*******************************写电源控制寄存器write_time(0x8e,0x80);//*******************************开写保护}//*****************************************************************// //1.函数:shijian();//2.参数:无入口参数,无出口参数//3.所用变量://4.功能:只是在调用显示时间时,对固有的现实进行处理。

//****************************************************************// void shijian(){write_str(4,2,2,2,8);//**********************************显示2write_str(4,10,0,2,8);//*********************************显示0write_str(4,34,11,2,8);//********************************显示/write_str(4,58,11,2,8);//********************************显示/write_str(2,26,12,2,8);//********************************显示:write_str(2,50,12,2,8);//********************************显示:}//*****************************************************************// //1.函数:read_1302();//2.参数:入口参数‘地址’,返回参数‘时间’。

//3.所用变量:(1)全局变量i;(2)局部变量d_t,db_t。

//4.功能:给定地址,读取其相应的时间。

//****************************************************************// uchar read_1302(uchar add){uchar db_t;bit d_t;rst_1302=0;sclk_1302=0;_nop_();_nop_();rst_1302=1;_nop_();_nop_();_nop_();_nop_();for(i=0;i<8;i++){io_1302=add%2;sclk_1302=1;sclk_1302=0;add/=2;}//*********************************************上升沿写入地址data_time=0;for(i=0;i<8;i++){sclk_1302=0;d_t=io_1302;sclk_1302=1;db_t|=d_t<<i;}//********************************************下降沿读出数据rst_1302=0;return(db_t);}//*****************************************************************// //1.函数:write_1302();//2.参数:入口参数为add,db_t。

//3.所用变量:(1)全局变量i; (2)局部变量add,db_t。

//4.功能:通过相应的地址,修改时间。

//****************************************************************// void write_1302(uchar add,uchar db_t){rst_1302=0;sclk_1302=0;_nop_();_nop_();rst_1302=1;_nop_();_nop_();_nop_();_nop_();for(i=0;i<8;i++){io_1302=add%2;sclk_1302=1;sclk_1302=0;add/=2;} //**********************************************写地址for(i=0;i<8;i++){io_1302=data_time%2;sclk_1302=1;sclk_1302=0;db_t/=2;}//***********************************************写时间rst_1302=0;}//*****************************************************************////1.函数:deal_1302();//2.参数:无入口参数,无返回参数//3.所用变量:j,time【7】;//4.功能:调用读时间,显示在线应的地点//****************************************************************//void deal_1302(void){for(j=0;j<7;j++) time[j]=read_1302(j*2+129);write_str(2,10,time[2]/16,2,8); //**********************************显示10时write_str(2,18,time[2]%16,2,8);//*********************************显示1时write_str(2,34,time[1]/16,2,8);//**********************************显示10分write_str(2,42,time[1]%16,2,8);//*********************************显示1分write_str(6,58,time[0]/16,2,8);//**********************************显示10秒write_str(6,66,time[0]%16,2,8);//*********************************显示1秒 write_str(0,2,time[5]+20,2,16);//*********************************显示星期write_str(4,26,time[6]/16,2,8);//**********************************显示10年write_str(4,34,time[6]%16,2,8);//*********************************显示1年write_str(4,42,time[4]/16,2,8);//**********************************显示10月 write_str(4,50,time[4]%16,2,8);//*********************************显示1月write_str(4,66,time[3]/16,2,8);//**********************************显示10日write_str(4,74,time[3]%16,2,8);//*********************************显示1日}//*****************************************************************// //1.函数:change_1302();//2.参数:无入口参数,无返回参数//3.所用变量:i,time【7】;//4.功能:调整显示修改时间//****************************************************************// void change_1302(){n++;n%=64;for(i=0;i<3;i++){write_str(2,66-i*24,time[i]%16,2,8);write_str(2,58-i*24,time[i]/16,2,8);}for(i=0;i<3;i++){write_str(0,74-i*24,time[i+3+i/2]%16,2,8);write_str(0,66-i*24,time[i+3+i/2]/16,2,8);}write_str(2,72,20+time[5]%16,2,16);if(n<32){if(sign_key2<7)write_str(4,2+sign_key2*8+((sign_key2-1)/2)*8,20,2,8);else if(sign_key2<13)write_str(2,2+(sign_key2-6)*8+((sign_key2-7)/2)*8,20,2,8);else{write_str(0,2,20,2,8);write_str(0,10,20,2,8);}}delay(10);}。