📄 ds1302kt.lst
字号:
C51 COMPILER V8.18 DS1302KT 01/04/2010 16:36:09 PAGE 1
C51 COMPILER V8.18, COMPILATION OF MODULE DS1302KT
OBJECT MODULE PLACED IN DS1302KT.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS1302KT.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <at89x52.h>
2 #include <DS1302.h>
3 //定义共阳极字型码0123456789-
4 unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
5 unsigned char time[]={0,0,0,0,0,0,0,0};//用来储存时间
6 unsigned char date[]={0,0,0,0,0,0,0,0};//用来储存日期
7 SYSTEMTIME time1; //在ds1302.h文件中已经定义了一个名字为SYSTEMTIME的结构体,在这里我们定义一个变量名
8 //为time的SYSTEMTIME结构体
9 void delay(unsigned char i) //延时子程序
10 {
11 1 unsigned char j;
12 1 while((i--)!=0)
13 1 {
14 2 for(j=123;j>0;j--);
15 2 }
16 1 }
17 unsigned char button_time(n,x,y) //时钟调整子程序
18 unsigned char n,x,y;
19 {
20 1 if(P1_7==0)
21 1 {
22 2 delay(50);
23 2 if(P1_7==0)
24 2 {
25 3 n++;
26 3 if(n==x)
27 3 n=0;
28 3 while(P1_7==0);
29 3 }
30 2 }
31 1
32 1 if(P1_5==0)
33 1 {
34 2 delay(50);
35 2 if(P1_5==0)
36 2 {
37 3 if(n==0)
38 3 n=y;
39 3 else
40 3 n--;
41 3 while(P1_5==0);
42 3 }
43 2 }
44 1 return n;
45 1 }
46
47 unsigned char button_date(n,x,y) //日期调整子程序
48 unsigned char n,x,y;
49 {
50 1 if(P1_7==0)
51 1 {
52 2 delay(50);
53 2 if(P1_7==0)
54 2 {
55 3 n++;
C51 COMPILER V8.18 DS1302KT 01/04/2010 16:36:09 PAGE 2
56 3 if(n==x)
57 3 n=1;
58 3 while(P1_7==0);
59 3 }
60 2 }
61 1
62 1 if(P1_5==0)
63 1 {
64 2 delay(50);
65 2 if(P1_5==0)
66 2 {
67 3 if(n==1)
68 3 n=y;
69 3 else
70 3 n--;
71 3 while(P1_5==0);
72 3 }
73 2 }
74 1 return n;
75 1 }
76
77 void display(second10,second1,minute10,minute1,hour10,hour1) //显示子程序
78 unsigned char second10,second1,minute10,minute1,hour10,hour1;
79 {
80 1 P2=0xfe;
81 1 P0=dispcode[second10];//显示秒的十位
82 1 delay(1);
83 1
84 1 P2=0xfd;
85 1 P0=dispcode[second1]; //显示秒的个位
86 1 delay(1);
87 1
88 1 P2=0xfb;
89 1 P0=dispcode[10]; //显示"-"
90 1 delay(1);
91 1
92 1 P2=0xf7;
93 1 P0=dispcode[minute10];//显示分的十位
94 1 delay(1);
95 1
96 1 P2=0xef;
97 1 P0=dispcode[minute1]; //显示分的个位
98 1 delay(1);
99 1
100 1 P2=0xdf;
101 1 P0=dispcode[10]; //显示"-"
102 1 delay(1);
103 1
104 1 P2=0xbf;
105 1 P0=dispcode[hour10]; //显示时的十位
106 1 delay(1);
107 1
108 1 P2=0x7f;
109 1 P0=dispcode[hour1]; //显示时的个位
110 1 delay(1);
111 1 }
112
113 void main()
114 {
115 1 unsigned char flag;
116 1 Initial_DS1302(); //初始化DS1302这个时钟芯片,
117 1 while(1)
C51 COMPILER V8.18 DS1302KT 01/04/2010 16:36:09 PAGE 3
118 1 {
119 2 DS1302_GetTime(&time1); //读取时间参数
120 2 time[5]=(time1.Second)%10; //把秒的个位数据存入time[5]
121 2 time[4]=(time1.Second)/10; //把秒的十位数据存入time[4]
122 2 time[3]=(time1.Minute)%10; //把分的个位数据存入time[3]
123 2 time[2]=(time1.Minute)/10; //把分的十位数据存入time[2]
124 2 time[1]=(time1.Hour)%10; //把时的个位数据存入time[1]
125 2 time[0]=(time1.Hour)/10; //把时的十位数据存入time[0]
126 2 date[5]=(time1.Day)%10;
127 2 date[4]=(time1.Day)/10;
128 2 date[3]=(time1.Month)%10;
129 2 date[2]=(time1.Month)/10;
130 2 date[1]=(time1.Year)%10;
131 2 date[0]=(time1.Year)/10;
132 2
133 2 if(P1_4==0) //如果按下Time Start键一下,时钟开始正常显示时间,再按一下,显示日期
134 2 {
135 3 delay(50);
136 3 if(P1_4==0)
137 3 {
138 4 flag++;
139 4 if(flag>1)
140 4 {
141 5 flag=0;
142 5 }
143 4 }
144 3 while(P1_4==0);
145 3 }
146 2 if(P1_6==0) //如果按下Time Set键一下,开始显示日期,再按一下进入日期跟时钟的调节模式
147 2 {
148 3 delay(50);
149 3 if(P1_6==0)
150 3 {
151 4 flag++;
152 4 if(flag>7)
153 4 {
154 5 flag=0;
155 5 }
156 4 }
157 3 while(P1_6==0);
158 3 }
159 2
160 2 switch(flag)
161 2 {
162 3 case 0:display(time[0],time[1],time[2],time[3],time[4],time[5]); //调用子函数display,把存入数组time的
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -