1、1602时钟带设定#includereg52.h#define uchar unsigned char#define uint unsigned intuchar code table=HL-8051-clock;uchar code table1=-;uchar code table2=ALL0000- ;uchar code table3= ;uchar clk_time3; 秒,分,时寄存器初始值sbit T_RST=P10;ds1302-5sbit T_IO=P11;ds1302-6sbit T_CLK=P12;ds1302-7sbit en=P34;sbit rw=P36;sbit
2、rs=P35;sbit led=P25;sbit dula=P26;sbit wela=P27;sbit ACC0=ACC0;sbit ACC7=ACC7;sbit up=P30;sbit down=P31;sbit set=P32;sbit did=P23;sbit GND=P37;uchar num,clock_ss,clock_sg,clock_fs,clock_fg,clock_ms,clock_mg,b,clock_s,clock_g;char hour,mie,sei,c,nhour,nmie,shour,smie;DS1302:写入操作(上升沿) void write_byte(
3、uchar da) uchar i; ACC=da; for(i=8;i0;i-) T_IO=ACC0; T_CLK=0; T_CLK=1; ACC=ACC1; DS1302:读取操作(下降沿)uchar read_byte(void) uchar i; for(i=0;i8;i+) ACC=ACC1; T_CLK = 1; T_CLK = 0; ACC7 = T_IO; return(ACC);DS1302写入数据(先送地址,再写数据) void write_1302(uchar addr,uchar da) T_RST=0; 停止工作 T_CLK=0; T_RST=1; 重新工作 writ
4、e_byte(addr); 写入地址 write_byte(da); T_RST=0; T_CLK=1;DS1302读取数据(先送地址,再读数据)uchar read_1302(uchar addr) uchar temp; T_RST=0; 停止工作 T_CLK=0; T_RST=1; 重新工作 write_byte(addr); 写入地址 temp=read_byte(); T_RST=0; T_CLK=1; 停止工作 return(temp);延时程序=a1msvoid delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);voi
5、d fn() did=0; delay(120); did=1; delay(120); did=0; delay(120); did=1; delay(120); did=0; delay(120); did=1; delay(120); did=0; delay(320); did=1; delay(400); void write_com(uchar com) rs=0; P0=com; delay(5); en=1; delay(5); en=0;void write_data(uchar date) rs=1; P0=date; delay(5); en=1; delay(5); e
6、n=0;void morning() shour=clock_ss10+clock_sg; smie=clock_fs10+clock_fg; if(b=0) if(nhour=shour) if(smie=nmie) fn(); void init() b=0; nhour=0; nmie=0; led=0;关led rw=0; GND=0; en=0; write_com(0x38);设置液晶 write_com(0x0c);设光标等 write_com(0x06);写一个字符地址指针加1且光标加1 write_com(0x01);清屏 write_com(0x80);设置s地址指针voi
7、d display(uchar add,date) if(b=0) clock_ms=clk_time0 16; clock_mg=clk_time0%16; led=0; clock_fs=clk_time1 16; clock_fg=clk_time1%16; led=0; clock_ss=clk_time2 16; clock_sg=clk_time2%16; write_com(0x80+0x44); write_data(0x30+clock_ss); write_com(0x80+0x45); write_data(0x30+clock_sg); write_com(0x80+0
8、x47); write_data(0x30+clock_fs); write_com(0x80+0x48); write_data(0x30+clock_fg); write_com(0x80+0x4a); write_data(0x30+clock_ms); write_com(0x80+0x4b); write_data(0x30+clock_mg); if(b!=0) clock_s=date 10; clock_g=date%10; write_com(0x80+0x40+add); write_data(0x30+clock_s); write_data(0x30+clock_g);
9、 void key() uchar clock_s1, clock_s2, clock_f1, clock_f2; rw=0; if(set=0) delay(10); if(set=0) did=0; delay(10); did=1; b+; while(!set); if(b=1) hour=clock_ss10+clock_sg; mie=clock_fs10+clock_fg; write_com(0x80+0x45); write_com(0x0f); if(b=2) write_com(0x80+0x48); if(b=3) write_com(0x80+0x40); for(n
10、um=0;num13;num+) write_data(table2num); write_com(0x80+0x45); display(4,nhour);write_com(0x80+0x45); if(b=4) write_com(0x80+0x48); display(7,nmie); write_com(0x80+0x48); if(b=5) write_com(0x80+0x40); for(num=0;num4;num+) write_data(table3num); write_com(0x80+0x45); write_com(0x0c); b=0; clock_s1=hou
11、r10;十进制转十六进制 clock_s2=hour%10;十进制转十六进制 clock_s1=clock_s1&0xff;十进制转十六进制 clock_s2=clock_s2&0xff;十进制转十六进制 clock_s1=4;十进制转十六进制 clock_s1=clock_s1clock_s2;十进制转十六进制 clock_f1=mie10;十进制转十六进制 clock_f2=mie%10;十进制转十六进制 clock_f1=clock_f1&0xff; 全1出1 与运算 clock_f2=clock_f2&0xff;十进制转十六进制 clock_f1=4;十进制转十六进制 clock_f1
12、=clock_f1clock_f2;十进制转十六进制 write_1302(0x8e,0x00); WP=0 写操作 write_1302(0x80,0x00);写秒 write_1302(0x82,clock_f1);写分 write_1302(0x84,clock_s1);写时 write_1302(0x86,0x14);写日 write_1302(0x88,0x02);写月 write_1302(0x8a,0x06);写星期 write_1302(0x8c,0x09); write_1302(0x8e,0x80); WP=1 写保护 if(b!=0) if(up=0) delay(10)
13、; if(up=0) did=0; delay(10); did=1; while(!up); if(b=1) hour+; if(hour=24) delay(1); hour=0; display(4,hour); write_com(0x80+0x45); if(b=2) mie+; if(mie=60) mie=0; display(7,mie); write_com(0x80+0x48); if(b=3) nhour+; if(nhour=24) delay(1); nhour=0; display(4,nhour); write_com(0x80+0x45); if(b=4) nm
14、ie+; if(nmie=60) nmie=0; display(7,nmie); write_com(0x80+0x48); if(down=0) delay(10); if(down=0) did=0; delay(10); did=1; while(!down); if(b=1) hour-; if(hour0) hour=23; display(4,hour); write_com(0x80+0x45); if(b=2) mie-; if(mie0) mie=59; display(7,mie); write_com(0x80+0x48); if(b=3) nhour-; if(nho
15、ur0) nhour=23; display(4,nhour); write_com(0x80+0x45); if(b=4) nmie-; if(nmie0) nmie=59; display(7,nmie); write_com(0x80+0x48); void main() uchar temp=0x80; uchar i; init();wela=1;关开发板数码管P0=0Xff;关开发板数码管wela=0;关开发板数码管 for(num=0;num15;num+) write_data(tablenum); delay(100); write_com(0x80+0x40); for(num=0;num15;num+) write_data(table1num); for(num=0;num16;num+) write_com(0x18); delay(20); write_1302(0x8e,0x00); write_1302(0x90,0xa4); write_1302(0x8e,0x80); while(1) if(b=0) temp=0x81; for(i=0;i3;i+) clk_timei=read_1302(temp); temp+=2; display(0x4b,0x00); morning(); key();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1