附录A:硬件原理图
附录B:C语言源程序
#include sbit IO=P3^3; ds1302输入输出口(数据线) sbit SCLK=P3^4; ds1302时钟信号段(时钟线) sbit RST=P3^5; ds1302复位端口 sbit DISPLAY_DAT=P1^0; LED数据端口 sbit DISPLAY_CLK=P1^1; LED信号端口 sbit s1=P1^4; 功能键 sbit s2=P1^5; 加键 sbit s3=P1^6; 减键 sbit s4=P1^7; 切换键 bit flag,flag_time; char set_miao=0,set_fen=0,set_shi=12; uchar code SMG[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; 数码管位码 void delay() 延时5us { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } void delayxms(uint z) 延时程序 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void write_a_byte_to_1302 (uchar dat) 向DS1302写入一个字节 { unsigned char i; for(i=0;i<8;i++) { SCLK=0; delay(); dat=dat>>1; IO=CY; SCLK=1; delay(); } } uchar receive_a_byte_from_1302() 从DS1302读出一个字节 { unsigned char i; unsigned char temp=0x00; IO=1; for(i=0;i<8;i++) { SCLK=0; delay(); temp=temp>>1; if(IO==1) temp=temp|0x80; SCLK=1; delay(); } return temp16*10+temp; } uchar read_data(uchar addr) { unsigned char dat; RST=0; delay(); SCLK=0; delay(); RST=1; delay(); write_a_byte_to_1302(addr); dat=receive_a_byte_from_1302(); SCLK=1; RST=0; return dat; } void write_data(uchar addr,uchar dat) { RST=0; delay(); SCLK=0; delay(); RST=1; delay(); write_a_byte_to_1302(addr); write_a_byte_to_1302(dat); 从DS1302指定位置读取数据 向DS1302某地址写数据 SCLK=1; RST=0; } void get_time() 从DS1302中读取当前时间 { current_time[0]=read_data(0x81); 秒 current_time[1]=read_data(0x83); 分 current_time[2]=read_data(0x85); 时 current_time[3]=read_data(0x87); 日 current_time[4]=read_data(0x89); 月 current_time[5]=read_data(0x8D); 年 } void display1() 显示时分秒 { display_buffer[0]=current_time[0]; 秒个位 display_buffer[1]=current_time[0]10; 秒十位 display_buffer[2]=10; —— display_buffer[3]=current_time[1]; display_buffer[4]=current_time[1]10; display_buffer[5]=10; display_buffer[6]=current_time[2]; display_buffer[7]=current_time[2]10; } void display2() 显示年月日 { display_buffer[0]=current_time[3]; 天各位 display_buffer[1]=current_time[3]10; 天十位 display_buffer[2]=10; —— display_buffer[3]=current_time[4]; display_buffer[4]=current_time[4]10; display_buffer[5]=10; display_buffer[6]=current_time[5]; display_buffer[7]=current_time[5]010; } void display3() 显示秒表 { display_buffer[0]=current_time[0]; 秒个位 display_buffer[1]=current_time[0]10; 秒十位 display_buffer[2]=10; display_buffer[3]=0; display_buffer[4]=0; display_buffer[5]=10; display_buffer[6]=0; display_buffer[7]=0;
相关推荐: