📄 ds1302.lst
字号:
C51 COMPILER V7.06 DS1302 06/27/2008 11:23:52 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN DS1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS1302.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /************************************/
2 /*杭州电子&计算机工作室 */
3 /*http://www.hificat.com */
4 /*DS1302测试程序 */
5 /*目标器件:AT89S51 */
6 /*晶振:11.0592MHZ */
7 /*编译环境:Keil 7.50A */
8 /************************************/
9
10 /*********************************包含头文件********************************/
11 #include "reg51.h"
12 #include <intrins.h>
13
14 /*********************************端口定义**********************************/
15 sbit DS1302_CLK = P1^0;
16 sbit DS1302_IO = P1^1;
17 sbit DS1302_RST = P1^2;
18
19 /*******************************共阳LED段码表*******************************/
20 unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
21
22 /******************************定义全局变量*********************************/
23 unsigned char second,minute,hour,week,day,month,year; //秒、分、时、星期、日、月、年
24 //unsigned char minute1,hour1;
25 unsigned char second1,minute1,hour1,week1,day1,month1,year1;
26 unsigned char t1,t2,i;
27 unsigned char time[]={0x08,0x06,0x19,0x04,0x09,0x30,0x00}; //初始时间数组
28
29 //P=8C
30
31 unsigned char secondchar,minutechar,hourchar,weekchar,daychar,monthchar,yearchar;
32
33 unsigned char keysum ;
34
35 sbit K1 = P3^2;
36 sbit K2 = P3^3;
37
38 unsigned char key_s, key_v, tmp;
39 unsigned char key_s1, key_v1;
40 //int kk;
41
42 /////////////////////温度/////
43 sbit DQ=P3^3; //数据传输线接单片机的相应的引脚
44
45 /*********************************定义全局变量******************************/
46 unsigned char tempL=0; //临时变量低位
47 unsigned char tempH=0; //临时变量高位
48 float temperature; //温度值
49
50
51
52 /****************************************************************************
53 函数功能:延时子程序
54 入口参数:k
55 出口参数:
C51 COMPILER V7.06 DS1302 06/27/2008 11:23:52 PAGE 2
56 ****************************************************************************/
57 void delayy(unsigned int k)
58 {
59 1 unsigned int n;
60 1 n=0;
61 1 while(n < k)
62 1 {n++;}
63 1 return;
64 1 }
65
66
67 void delay1(void)
68 {
69 1 int k;
70 1 for(k=0;k<400;k++);
71 1 }
72
73 /****************************************************************************
74 函数功能:数码管扫描延时子程序
75 入口参数:
76 出口参数:
77 ****************************************************************************/
78
79
80 /****************************************************************************
81 函数功能:数码管显示子程序
82 入口参数:k
83 出口参数:
84 ****************************************************************************/
85 void displayy(int k)
86 {
87 1 // P2=0xfe;
88 1 // P0=tab[k/1000];
89 1 // delay1();
90 1 // P2=0xfd;
91 1 // P0=tab[k%1000/100];
92 1 // delay1();
93 1 P2=0xfb;
94 1 P0=tab[k%100/10];
95 1 delay1();
96 1 P2=0xf7;
97 1 P0=tab[k%10];
98 1 delay1();
99 1 P2=0xef;
100 1 P0=0xc6;
101 1 delay1();
102 1
103 1 }
104
105 /****************************************************************************
106 函数功能:DS18B20初始化子程序
107 入口参数:
108 出口参数:
109 ****************************************************************************/
110 Init_DS18B20(void)
111 {
112 1 unsigned char x=0;
113 1 DQ=1; //DQ先置高
114 1 delayy(8); //延时
115 1 DQ=0; //发送复位脉冲
116 1 delayy(85); //延时(>480ms)
117 1 DQ=1; //拉高数据线
C51 COMPILER V7.06 DS1302 06/27/2008 11:23:52 PAGE 3
118 1 delayy(14); //等待(15~60ms)
119 1 }
120
121 /****************************************************************************
122 函数功能:向DS18B20读一字节数据
123 入口参数:
124 出口参数:dat
125 ****************************************************************************/
126 ReadOneChar(void)
127 {
128 1 unsigned char i=0;
129 1 unsigned char dat=0;
130 1 for (i=8;i>0;i--)
131 1 {
132 2 DQ=1;
133 2 delayy(1);
134 2 DQ=0;
135 2 dat>>=1;
136 2 DQ=1;
137 2 if(DQ)
138 2 dat|=0x80;
139 2 delayy(4);
140 2 }
141 1 return(dat);
142 1 }
143
144 /****************************************************************************
145 函数功能:向DS18B20写一字节数据
146 入口参数:dat
147 出口参数:
148 ****************************************************************************/
149 WriteOneChar(unsigned char dat)
150 {
151 1 unsigned char i=0;
152 1 for(i=8;i>0;i--)
153 1 {
154 2 DQ=0;
155 2 DQ=dat&0x01;
156 2 delayy(5);
157 2 DQ=1;
158 2 dat>>=1;
159 2 }
160 1 delayy(4);
161 1 }
162
163 /****************************************************************************
164 函数功能:向DS18B20读温度值
165 入口参数:
166 出口参数:temperature
167 ****************************************************************************/
168 ReadTemperature(void)
169 {
170 1 Init_DS18B20(); //初始化
171 1 WriteOneChar(0xcc); //跳过读序列号的操作
172 1 WriteOneChar(0x44); //启动温度转换
173 1 delayy(125); //转换需要一点时间,延时
174 1 Init_DS18B20(); //初始化
175 1 WriteOneChar(0xcc); //跳过读序列号的操作
176 1 WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位)
177 1 tempL=ReadOneChar(); //读出温度的低位LSB
178 1 tempH=ReadOneChar(); //读出温度的高位MSB
179 1 //温度转换,把高低位做相应的运算转化为实际温度
C51 COMPILER V7.06 DS1302 06/27/2008 11:23:52 PAGE 4
180 1 temperature=((tempH*256)+tempL)*0.0625;
181 1 delayy(200);
182 1 return(temperature);
183 1 }
184
185 /****************************************************************************
186 函数功能:主程序
187 入口参数:
188 出口参数:
189 ****************************************************************************/
190 ////////////////////////////////////////////////////////////////////////////////////////////////
191
192
193 /****************************************************************************
194 函数功能:数码管扫描延时子程序
195 入口参数:
196 出口参数:
197 ****************************************************************************/
198
199
200 void delayms(unsigned char ms)
201 // 延时子程序
202 {
203 1 unsigned char i;
204 1 while(ms--)
205 1 {
206 2 for(i = 0; i < 120; i++);
207 2 }
208 1 }
209
210
211 void delayms1(unsigned char ms)
212 // 延时子程序
213 {
214 1 unsigned char i;
215 1 while(ms--)
216 1 {
217 2 for(i = 0; i < 120; i++);
218 2 }
219 1 }
220
221
222 void displayhour(void)
223 {
224 1 P2=0xfe;
225 1 P0=0x8c;
226 1 delayms1(1);
227 1
228 1 P2=0xfd;
229 1 P0=tab[5];
230 1 delayms1(1);
231 1
232 1 P2=0xf7;
233 1 P0=tab[hour1/10];
234 1 delayms1(1);
235 1
236 1 // P2=0xfd;
237 1 P2=0xef;
238 1 P0=tab[hour1%10];
239 1 delayms1(1);
240 1 }
241
C51 COMPILER V7.06 DS1302 06/27/2008 11:23:52 PAGE 5
242 void displayminuite(void)
243 {
244 1
245 1 P2=0xfe;
246 1 P0=0x8c;
247 1 delayms1(1);
248 1
249 1 P2=0xfd;
250 1 P0=tab[6];
251 1 delayms1(1);
252 1
253 1 P2=0xf7;
254 1 P0=tab[minute1/10];
255 1 delayms1(1);
256 1
257 1 P2=0xef;
258 1 P0=tab[minute1%10];
259 1 delayms1(1);
260 1
261 1 }
262
263
264 void displayyear(void)
265 {
266 1 P2=0xff;
267 1
268 1 P2=0xfe;
269 1 P0=0x8c;
270 1 delayms1(1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -