📄 settime.lst
字号:
C51 COMPILER V7.50 SETTIME 04/12/2008 21:12:31 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SETTIME
OBJECT MODULE PLACED IN settime.OBJ
COMPILER INVOKED BY: D:\program files\keil\C51\BIN\C51.EXE settime.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2
3 #define uchar unsigned char
4
5 sbit SCLK = P2^6;
6 sbit IO = P2^7;
7 sbit RST = P2^5;
8
9 sbit ACC0 = ACC^0;
10 sbit ACC7 = ACC^7;
11
12 sbit DQ = P1^0;
13
14 sbit select = P3^2;
15 sbit add = P3^3;
16 sbit dec = P3^4;
17 sbit esc = P3^5;
18
19 bit flag2;
20
21 uchar flag,flag1;
22 uchar sec,min,hour,date,month;
23 uchar Num[10];
24
25 /* {0,1,2,3,4,5,6,7,8,9, °,C} */
26 uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc6,0x9c,0xbf,0xff};
27 uchar code SW[]={0x01,0x02,0x04,0x08};
28
29 void delay_2us(uchar t)
30 {
31 1 while(--t);
32 1 }
33
34 void delay_50us(uchar t)
35 {
36 1 uchar i;
37 1 for(;t>0;t--)
38 1 for(i=23;i>0;i--);
39 1 }
40
41 void Reset(void)
42 {
43 1 DQ = 0;
44 1 delay_50us(12);
45 1 DQ = 1;
46 1 delay_50us(2);
47 1 }
48
49 void WriteByte(uchar byte)
50 {
51 1 uchar i,j;
52 1 bit dat;
53 1 for(i=8;i>0;i--)
54 1 {
55 2 DQ = 0;
C51 COMPILER V7.50 SETTIME 04/12/2008 21:12:31 PAGE 2
56 2 dat = byte & 0x01;
57 2 byte = byte>>1;
58 2 if(dat)
59 2 {
60 3 DQ = 1;
61 3 }
62 2 else
63 2 {
64 3 DQ = 0;
65 3 }
66 2 delay_2us(30);
67 2 DQ = 1;
68 2 j++;
69 2 j++;
70 2 }
71 1 }
72
73 uchar ReadBit(void)
74 {
75 1 uchar dat;
76 1 uchar i;
77 1 DQ = 0;
78 1 i++;
79 1 i++;
80 1 DQ = 1;
81 1 i++;
82 1 i++;
83 1 dat = P1^0;
84 1 delay_2us(30);
85 1 DQ = 1;
86 1 return (dat);
87 1 }
88
89 uchar ReadByte(void)
90 {
91 1 uchar i,j,val;
92 1 val = 0x00;
93 1 for(i=8;i>0;i--)
94 1 {
95 2 val = val >> 1;
96 2 j = ReadBit();
97 2 val = (j << 7) | val;
98 2 }
99 1 return (val);
100 1 }
101
102 void Start_ds18b20(void)
103 {
104 1 Reset();
105 1 delay_2us(10);
106 1 WriteByte(0xcc);
107 1 WriteByte(0x44);
108 1 }
109
110 uchar ReadTemp(void)
111 {
112 1 uchar tempL,tempH,temp;
113 1 Reset();
114 1 delay_2us(50);
115 1 WriteByte(0xcc);
116 1 WriteByte(0xbe);
117 1 tempL = ReadByte();
C51 COMPILER V7.50 SETTIME 04/12/2008 21:12:31 PAGE 3
118 1 tempH = ReadByte();
119 1 flag = tempH & 0x80;
120 1 if(flag != 0)
121 1 {
122 2 tempL = ~tempL + 1;
123 2 tempH = ~tempH + 1;
124 2 }
125 1 tempL = tempL & 0xf0;
126 1 tempH = tempH & 0x0f;
127 1 temp = (tempL >> 4) | (tempH << 4);
128 1 return (temp);
129 1 }
130
131 /*********写一字节**********/
132 void writebyte1302(uchar data0)
133 {
134 1 uchar i;
135 1 ACC = data0;
136 1 for(i=8;i>0;i--)
137 1 {
138 2 IO = ACC0;
139 2 SCLK = 1;
140 2 SCLK = 0;
141 2 ACC = ACC >> 1;
142 2 }
143 1 }
144
145 /*******读一字节******************/
146 uchar readbyte1302()
147 {
148 1 uchar i;
149 1 for(i=8;i>0;i--)
150 1 {
151 2 ACC = ACC >> 1;
152 2 ACC7 = IO;
153 2 SCLK = 1;
154 2 SCLK = 0;
155 2 }
156 1 return(ACC);
157 1 }
158
159 /*********向DS1302写一字节内容********/
160 void Write1302(uchar Addr,uchar data1)
161 {
162 1 RST = 0;
163 1 SCLK = 0;
164 1 RST = 1;
165 1 writebyte1302(Addr);
166 1 writebyte1302(data1);
167 1 SCLK = 1;
168 1 RST = 0;
169 1 }
170
171 /*************读DS1302一字节的内容*********/
172 uchar Read1302(uchar Addr)
173 {
174 1 uchar temp;
175 1 RST = 0;
176 1 SCLK = 0;
177 1 RST = 1;
178 1 writebyte1302(Addr);
179 1 temp = readbyte1302();
C51 COMPILER V7.50 SETTIME 04/12/2008 21:12:31 PAGE 4
180 1 SCLK = 1;
181 1 RST = 0;
182 1 return(temp);
183 1 }
184
185 void settime()
186 {
187 1 uchar temp1,temp2;
188 1 uchar premin,prehour,predate,premonth;
189 1 temp1 = min / 10;
190 1 temp2 = min % 10;
191 1 premin = (temp1<<4) | temp2;
192 1 temp1 = hour / 10;
193 1 temp2 = hour % 10;
194 1 prehour = (temp1<<4) | temp2;
195 1 prehour = prehour | 0x80;
196 1 temp1 = date / 10;
197 1 temp2 = date % 10;
198 1 predate = (temp1<<4) | temp2;
199 1 temp1 = month / 10;
200 1 temp2 = month % 10;
201 1 premonth = (temp1<<4) | temp2;
202 1 Write1302(0x8e,0x00); //关闭写保护,准备向DS1302写入初始值
203 1 Write1302(0x80,0x80);
204 1 Write1302(0x82,premin);
205 1 Write1302(0x84,prehour);
206 1 Write1302(0x86,predate);
207 1 Write1302(0x88,premonth);
208 1 Write1302(0x80,0x00);
209 1 Write1302(0x8e,0x80); //打开写保护,禁止向DS1302写入
210 1 }
211
212
213 void Init1302()
214 {
215 1 Write1302(0x8e,0x00); //关闭写保护,准备向DS1302写入初始值
216 1 Write1302(0x80,0x00); //启动DS1302
217 1 Write1302(0x8e,0x80); //打开写保护,禁止向DS1302写入
218 1 }
219
220 /*********读取当前时间**********/
221 void Gettime()
222 {
223 1 sec = Read1302(0x81);
224 1 min = Read1302(0x83);
225 1 hour = Read1302(0x85);
226 1 date = Read1302(0x87);
227 1 month = Read1302(0x89);
228 1 min = (min / 16) * 10 + min % 16;
229 1 hour = hour & 0x1f;
230 1 hour = (hour / 16)*10 + hour % 16;
231 1 date = (date / 16) * 10 + date % 16;
232 1 month = (month / 16) * 10 + month % 16;
233 1 }
234
235 void showtemp(uchar x)
236 {
237 1 uchar n,w;
238 1 if(flag != 0)
239 1 {
240 2 Num[3] = 12;
241 2 }
C51 COMPILER V7.50 SETTIME 04/12/2008 21:12:31 PAGE 5
242 1 else
243 1 Num[3] = 13;
244 1 Num[0] = 11;
245 1 Num[1] = x%10;
246 1 Num[2] = x/10;
247 1 for(n=50;n>0;n--)
248 1 {
249 2 for(w=0;w<4;w++)
250 2 {
251 3 P0 = 0xff;
252 3 P2=SW[w];
253 3 P0=table[Num[w]];
254 3 delay_50us(5);
255 3 }
256 2 }
257 1 }
258
259 void scankey()
260 {
261 1 if(select == 0)
262 1 delay_50us(100);
263 1 if(select == 0)
264 1 {
265 2 while(!select);
266 2 flag1++;
267 2 }
268 1
269 1 if(flag1 == 1) //设置小时状态时
270 1 {
271 2 if(add == 0)
272 2 delay_50us(100);
273 2 if(add == 0)
274 2 {
275 3 while(!add);
276 3 if(hour == 12)
277 3 hour = 1;
278 3 else
279 3 hour++;
280 3 }
281 2 if(dec == 0)
282 2 delay_50us(100);
283 2 if(dec == 0)
284 2 {
285 3 while(!dec);
286 3 if(hour == 1)
287 3 hour = 12;
288 3 else
289 3 hour--;
290 3 }
291 2 }
292 1
293 1 if(flag1 == 2) //设置分钟状态时
294 1 {
295 2 if(add == 0)
296 2 delay_50us(100);
297 2 if(add == 0)
298 2 {
299 3 while(!add);
300 3 if(min == 59)
301 3 min = 0;
302 3 else
303 3 min++;
C51 COMPILER V7.50 SETTIME 04/12/2008 21:12:31 PAGE 6
304 3 }
305 2 if(dec == 0)
306 2 delay_50us(100);
307 2 if(dec == 0)
308 2 {
309 3 while(!dec);
310 3 if(min == 0)
311 3 min = 59;
312 3 else
313 3 min--;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -