📄 time.lst
字号:
C51 COMPILER V6.12 TIME 07/02/2008 18:15:23 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE TIME
OBJECT MODULE PLACED IN time.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE time.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 #include <stdio.h>
3
4 #define uchar unsigned char
5 #define uint unsigned int
6
7 sfr p0=0x80;
8 sfr p1=0x90;
9 sfr p2=0xa0;
10 sfr p3=0xb0;
11 sbit key0=p1^0;
12 sbit key1=p1^1;
13 sbit key2=p1^2;
14 sbit DQ=p1^7;
15
16 uchar code dis_7[12]={0x3f,0x06,0x5b,0x4f,0x66,
17 0x6d,0x7d,0x07,0x7f,0x67,0x40,0x40
18 };//断码0,1,2,3,4,5,6,7,8,9,-,-
19 //uchar code choose[6]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位选
20 uchar code choose[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位选
21 uchar data disbuffer[8]={0x01,0x02,0x0a,0x00,0x00,0x0b,0x00,0x00};
22 //显示缓冲区,hour,'-', minite, '-' second
23 uchar code dis_4[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
24 uchar code chocode[]={0x30,0xd0,0x60};
25 uchar data disbuffer1[]={0,0,0};
26 uint i;
27 uchar data ms50=0x00,second=0x00,minite=0x00,hour=12;
28 uchar temp1,temp2,temp;
29 uchar set=0;
30 //1MS延时
31 delay(uint t)
32 {
33 1 uint j;
34 1 for(i=0;i<t;i++)
35 1 for(j=0;j<120;j++);
36 1 }
37
38 //显示子程序
39 display()
40 {
41 1 uint i;
42 1 disbuffer[0]=hour/10;disbuffer[1]=hour%10;
43 1 disbuffer[3]=minite/10;disbuffer[4]=minite%10;
44 1 disbuffer[6]=second/10;disbuffer[7]=second%10;
45 1 for(i=0;i<8;i++)
46 1 {
47 2 p0=dis_7[disbuffer[i]];p2=choose[i];delay(1);p2=0xff;
48 2 }
49 1 }
50
51 //按键扫描程序
52 //void keyscan(void)
53 //{
54 // if(key0==0)
55 // {
C51 COMPILER V6.12 TIME 07/02/2008 18:15:23 PAGE 2
56 // delay(10);
57 // if(key0==0)
58 // {
59 // second++;
60 // if(second==60)
61 // {
62 // second=0;
63 // }
64 // disbuffer[7]=second%10;
65 // disbuffer[6]=second/10;
66 // while(key0==0);
67 // }
68 // }
69 // if(key1==0)
70 // {
71 // delay(10);
72 // if(key1==0)
73 // {
74 // minite++;
75 // if(minite==60)
76 // {
77 // minite=0;
78 // }
79 // disbuffer[4]=minite%10;
80 // disbuffer[3]=minite/10;
81 // while(key1==0);
82 // }
83 // }
84 // if(key2==0)
85 // {
86 // delay(10);
87 // if(key2==0)
88 // {
89 // hour++;
90 // if(hour==24)
91 // {
92 // hour=0;
93 // }
94 // disbuffer[1]=hour%10;
95 // disbuffer[0]=hour/10;
96 // while(key2==0);
97 // }
98 // }
99
100 //}
101
102
103 void set_time(void)
104 {
105 1 set++;
106 1 if(set>=4)
107 1 set=0;
108 1 }
109
110 void inc_time(void)
111 {
112 1 switch(set)
113 1 {
114 2 case 1:second++;if(second>=59)second=59;break;
115 2 case 2:minite++;if(minite>=59)minite=59;break;
116 2 case 3:hour++; if(hour>=23)hour=23;break;
117 2 default:break;
C51 COMPILER V6.12 TIME 07/02/2008 18:15:23 PAGE 3
118 2 }
119 1 }
120
121 void dec_time(void)
122 {
123 1 switch(set)
124 1 {
125 2 case 1:second--;if(second<=0)second=0;break;
126 2 case 2:minite--;if(minite<=0)minite=0;break;
127 2 case 3:hour--; if(hour<=0)hour=0;break;
128 2 default:break;
129 2 }
130 1 }
131
132 void keyscan(void)
133 {
134 1 if(key0==0)
135 1 {
136 2 delay(10);
137 2 if(key0==0)
138 2 set_time();
139 2 }
140 1 if(key1==0)
141 1 {
142 2 delay(10);
143 2 if(key1==0)
144 2 inc_time();
145 2 }
146 1 if(key2==0)
147 1 {
148 2 delay(10);
149 2 if(key2==0)
150 2 dec_time();
151 2 }
152 1 }
153
154 ////////////////////////////////////////////////////////////////
155
156 //测温程序
157 //***********ds18b20延迟子函数(晶振12MHz )*******/
158
159 void delay_18B20(uint i)
160 {
161 1 while(i--);
162 1 }
163
164 /**********ds18b20初始化函数**********************/
165
166 void Init_DS18B20(void)
167 {
168 1 unsigned char x=0;
169 1 DQ = 1; //DQ复位
170 1 delay_18B20(8); //稍做延时
171 1 DQ = 0; //单片机将DQ拉低
172 1 delay_18B20(80); //精确延时 大于 480us
173 1 DQ = 1; //拉高总线
174 1 delay_18B20(14);
175 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
176 1 delay_18B20(20);
177 1 }
178
179 /***********ds18b20读一个字节**************/
C51 COMPILER V6.12 TIME 07/02/2008 18:15:23 PAGE 4
180
181 unsigned char ReadOneChar(void)
182 {
183 1 uchar i=0;
184 1 uchar dat = 0;
185 1 for (i=8;i>0;i--)
186 1 {
187 2 DQ = 0; // 给脉冲信号
188 2 dat>>=1;
189 2 DQ = 1; // 给脉冲信号
190 2 if(DQ)
191 2 dat|=0x80;
192 2 delay_18B20(4);
193 2 }
194 1 return(dat);
195 1 }
196
197 /*************ds18b20写一个字节****************/
198
199 void WriteOneChar(uchar dat)
200 {
201 1 uchar i=0;
202 1 for (i=8; i>0; i--)
203 1 {
204 2 DQ = 0;
205 2 DQ = dat&0x01;
206 2 delay_18B20(5);
207 2 DQ = 1;
208 2 dat>>=1;
209 2 }
210 1 }
211
212 /**************读取ds18b20当前温度************/
213
214 void ReadTemperature(void)
215 {
216 1 uchar a=0;
217 1 uchar b=0;
218 1 uchar t=0;
219 1
220 1 Init_DS18B20();
221 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
222 1 WriteOneChar(0x44); // 启动温度转换
223 1
224 1 delay_18B20(100); // this message is wery important
225 1
226 1 Init_DS18B20();
227 1 WriteOneChar(0xCC); //跳过读序号列号的操作
228 1 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
229 1
230 1 delay_18B20(100);
231 1
232 1 a=ReadOneChar(); //读取温度值低位
233 1 b=ReadOneChar(); //读取温度值高位
234 1 temp1=b<<4;
235 1 temp1+=(a&0xf0)>>4;
236 1 temp2=a&0x0f;
237 1
238 1 temp=((b*256+a)>>4); //当前采集温度值除16得实际温度值
239 1
240 1
241 1 }
C51 COMPILER V6.12 TIME 07/02/2008 18:15:23 PAGE 5
242
243 dis()
244 {
245 1 uint i;
246 1 disbuffer1[0]=temp1/10;disbuffer1[1]=temp1%10;disbuffer1[2]=temp2/10;
247 1 for(i=0;i<3;i++)
248 1 {
249 2 p3=dis_4[disbuffer1[i]]|chocode[i];delay(1);p3=0xff;
250 2 }
251 1 }
252 //////////////////////////////////////////////////////////////////////////
253
254 void main(void)
255 {
256 1 TMOD=0X01;
257 1 TH0=0X3C;TL0=0XB0;
258 1 ET0=1;TR0=1;EA=1;
259 1 while(1)
260 1 {
261 2 ReadTemperature();
262 2 display();
263 2 dis();
264 2 keyscan();
265 2 }
266 1 }
267
268 //中断服务程序
269 void time_0(void) interrupt 1
270 {
271 1 ET0=0;TR0=0;TH0=0X3C;TL0=0XB0;TR0=1;
272 1 ms50++;
273 1 if(ms50==20)
274 1 {ms50=0;second++;
275 2 if(second==60)
276 2 {
277 3 second=0;minite++;
278 3 if(minite==60)
279 3 {
280 4 minite=0;hour++;
281 4 if(hour==24)
282 4 hour=0;
283 4 }
284 3 }
285 2 }
286 1 ET0=1;
287 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 660 ----
CONSTANT SIZE = 33 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 21 1
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -