📄 fantest.lst
字号:
C51 COMPILER V7.50 FANTEST 07/21/2006 16:14:00 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE FANTEST
OBJECT MODULE PLACED IN fantest.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE fantest.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************start***************************************/
2 #include <STDIO.h>
3 #include <STC12C.h>
4 #include <Intrins.h>
5 #include <fan.h>
6 #include <math.h>
7
8
9 /***************************************************************************
10 函数名称: Delay_Set
11 函数功能: 以ms为单位延时一定的时间
12 输入参数: 延时常数
13 输出参数: 无
14 ***************************************************************************/
15 void Delay_Set(uint i)
16 {
17 1 uint m, k;
18 1
19 1 /* 时钟为11.0592MHz, 每个指令周期的执行时间约为1us. */
20 1
21 1 for(m=0;m<i;m++)
22 1 {
23 2 k = CN_TIMER; /* 1ms延时设置 */
24 2 while(k--); /* 5个指令周期 */
25 2 }
26 1 }
27
28 /***************************************************************************
29 函数名称: Delay_us
30 函数功能: 以6us为单位延时一定的时间,每次调用再额外加5us
31 输入参数: 延时常数
32 输出参数: 无
33 ***************************************************************************/
34 void Delay_us(uint i)
35 {
36 1 while (i--);
37 1 }
38 /***************************************************************************
39 函数名称: main
40 函数功能: 数码管显示
41 输入参数: 无
42 输出参数: 无
43 ***************************************************************************/
44 /*********************************************************************************************************
-********/
45 /*void main()
46 {
47 uchar i,j,k,l;
48 uchar code data_arry [11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; /* 定义"0~9,-"*/
-
49 /* while (1)
50 {
51
52 AD_FAN_CONT1=0;
53 AD_FAN_CONT2=0;
C51 COMPILER V7.50 FANTEST 07/21/2006 16:14:00 PAGE 2
54 for (i=0;i<=99;i++)
55 {
56 j = i%10;
57 k = i/10;
58 if (j ==0 && i!=0)
59 {
60 AD_SPEAK=0;
61 Delay_Set(CN_1000ms);
62 AD_SPEAK=1;
63 }
64
65 LE1=0;LE2=1;
66 P2 = data_arry[j];
67 Delay_Set(CN_5ms);
68 LE1=1;LE2=0;
69 P2 = data_arry[k];
70 Delay_Set(CN_5ms);
71 LE2=1;
72 Delay_Set(CN_1000ms);
73 }
74 AD_TEMP_LED=0;
75 Delay_Set(CN_2000ms);
76 AD_TEMP_LED=1;
77 Delay_Set(CN_2000ms);
78 AD_OVTEMP_ALM=0;
79 Delay_Set(CN_2000ms);
80 AD_OVTEMP_ALM=1;
81 Delay_Set(CN_2000ms);
82 AD_SPEAK=0;
83 Delay_Set(CN_1000ms);
84 AD_SPEAK=1;
85 Delay_Set(CN_2000ms);
86 AD_FAN_ALM =0;
87 Delay_Set(CN_2000ms);
88 AD_FAN_ALM =1;
89 Delay_Set(CN_2000ms);
90 AD_FAN_CONT1 =1;
91 for (l=0;l<20;l++)
92 {
93 Delay_Set(CN_2000ms);
94 }
95 AD_FAN_CONT1= 0;
96 Delay_Set(CN_2000ms);
97 AD_FAN_CONT2 =1;
98 for (l=0;l<20;l++)
99 {
100 Delay_Set(CN_2000ms);
101 }
102 AD_FAN_CONT2= 0;
103 Delay_Set(CN_2000ms);
104 AD_FAN_CONT1 =1; AD_FAN_CONT2 =1;
105 for (l=0;l<20;l++)
106 {
107 Delay_Set(CN_2000ms);
108 }
109 AD_FAN_CONT1 =0; AD_FAN_CONT2 =0;
110 Delay_Set(CN_2000ms);
111
112
113 }
114
115
C51 COMPILER V7.50 FANTEST 07/21/2006 16:14:00 PAGE 3
116 } */
117 /*********************************************************************************************************
-/
118
119
120
121 /********************************************************************************************************
-****/
122 /*****************************************************************************
123 函数名称: ADC_Init
124 函数功能: ADC初始化
125 输入参数: ADC通道号
126 输出参数: 无
127 ****************************************************************************/
128 //void ADC_Init()
129 // {
130
131 // P1M0 = 0x01; /* P1.0为开漏,其余I/O为传统口*/
132 // P1M1 = 0x01;
133 // ADC_CONTR = CN_P10_ADC; /* 选第一路ADC,并开启ADC电源,速率为210个时钟周期*/
134 // Delay_Set(CN_1ms); // /* 开A/D转换电源后要加延时,1ms以内就足够了*/
135
136 // }
137
138 /***************************************************************************
139 函数名称: Get_AD_Result
140 函数功能: 获取A/D值
141 输入参数: 无
142 输出参数: 返回获取的10位A/D
143 ***************************************************************************/
144 //void Get_AD_Result ()
145 //{
146 // uint ADC_fan_low; /* AD转换低位寄存器*/
147 // uint ADC_fan_high; /* AD转换高位寄存器*/
148 // uint k,i,l,j=0;
149 // uint min,max;
150 // uint ADC_buff[10];
151 // ADC_DATA = 0;
152 // ADC_LOW2 = 0;
153
154 // for (i = 0;i < 10;i++) /*取10次AD值*/
155 // {
156 // ADC_Init();
157 // ADC_CONTR=ADC_CONTR | 0x08; /*启动AD转换*/
158 // while(!(ADC_CONTR & 0x10)) /*判断AD是否转换结束!!最好在此加一个延时判断,以免进入死循*/
159 // {
160 // l++;
161 // if (l>250)break; /*最好在此加一个延时判断,以免进入死循*/
162 // }
163 // l=0;
164 // ADC_CONTR = ADC_CONTR & 0xef; /*清转换结束标志*/
165 // ADC_fan_high = ADC_DATA;
166 // ADC_fan_low = ADC_LOW2;
167 // k = ADC_fan_high;
168 // k <<= 2;
169 // k = k | (ADC_fan_low & 0x0003);
170 // ADC_buff[i] = k;
171 // }
172 // min = max = ADC_buff[0];
173 // for (i = 0;i <10; i++)
174 // {
175 // j += ADC_buff[i];
C51 COMPILER V7.50 FANTEST 07/21/2006 16:14:00 PAGE 4
176 // if (min > ADC_buff[i])
177 // min = ADC_buff[i];
178 // else
179 // max = ADC_buff[i];
180 // }
181 // j = j -(min + max); /* 去掉最大值和最小值*/
182 // j = j>>3; /* 取平均值*/
183 // g_ADC_fan = j;
184 // }
185
186 /***************************************************************************
187 函数名称: Display_handle
188 函数功能: 根据温度值进行处理,并在数码管显示
189 输入参数: 无
190 输出参数: 无
191 ***************************************************************************/
192 /*void Display_handle()
193 {
194 uchar i,j,l;
195 uchar code data_arry [11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; /* 定义"0~9,-"
-*/
196 // Delay_Set(CN_10ms);
197 // g_temp_getcnt++;
198 // if(g_temp_getcnt>=200)
199
200 // {
201 // WDG_CONTR = 0x35;
202 // l=(g_ADC_fan*6)/10;
203 // i = l%10;
204 // j = l/10; */
205 // LE1 = 0; /* 开个位显示*/
206 // P2 = data_arry[i]; /* 显示个位*/
207 // Delay_Set(CN_5ms);
208 // LE1 = 1; LE2 = 0; /* 开十位显示*/
209 // P2 = data_arry[j]; /* 显示十位*/
210 // Delay_Set(CN_5ms);
211 // LE2 = 1;
212 // }
213 // } */
214
215 /***************************************************************************
216 函数名称: main
217 函数功能: 系统AD测试
218 输入参数: 无
219 输出参数: 无
220 ***************************************************************************/
221 /*void main()
222 { // uint l;
223 System_Init();
224 for(;;)
225 {
226 // AD_FAN_CONT1 =1; AD_FAN_CONT2 =1;
227 Get_AD_Result ();
228 Display_handle();
229 //
230 }
231 } */
232 /********************************************************************************************************
-/
233
234
235
C51 COMPILER V7.50 FANTEST 07/21/2006 16:14:00 PAGE 5
236 /***************************************************************************
237 函数名称: DS18B20_Init
238 函数功能: 数字温度传感器DS18B20初始化
239 输入参数: 温度传感器号
240 输出参数: DS18B20复位成功标志(全局变量)
241 ***************************************************************************/
242 void DS18B20_Init(uchar temp_number)
243 {
244 1 uchar i;
245 1 uchar j,k;
246 1
247 1 i = 0;
248 1 if(temp_number==CN_TEMP1)
249 1 {
250 2 AD_TEMP1 = 1; /* 传感器输入端口1复位 */
251 2 Delay_us(CN_45us); /* 延时45us */
252 2 AD_TEMP1 = 0;
253 2 Delay_us(CN_525us); /* 精确延时大于480us,取525us */
254 2 AD_TEMP1 = 1; /* 拉高端口 */
255 2 Delay_us(CN_30us);
256 2 k=0; /* 滤波计数器 */
257 2 for(j=0;j<10;j++)
258 2 {
259 3 if(!AD_TEMP1) /* 如果检测结果为0则初始化成功,为1则失败. */
260 3 {
261 4 k++; /* 检测到低电平加1. */
262 4 }
263 3 }
264 2 if(k>3)
265 2 gb_18b20init1_ok = TRUE; /* 复位成功. */
266 2 else
267 2 gb_18b20init1_ok = FALSE;/* 复位失败. 温感开路或温感损坏 */
268 2 Delay_us(CN_200us);
269 2 k=0;
270 2 AD_TEMP1=1; /* 输入允许. */
271 2 if(TRUE==gb_18b20init1_ok)
272 2 {
273 3 for(j=0;j<10;j++)
274 3 {
275 4
276 4 if(AD_TEMP1) /* 如果检测结果为1则初始化成功,为0则失败. */
277 4 {
278 5 k++; /* 检测到高电平加1 */
279 5 }
280 4 }
281 3 if(k>3)
282 3 gb_18b20init1_ok = TRUE; /* 复位成功. */
283 3 else
284 3 gb_18b20init1_ok = FALSE;/* 复位失败. 温感对地短路 */
285 3 }
286 2 }
287 1 if(temp_number==CN_TEMP2)
288 1 {
289 2 AD_TEMP2 = 1; /* 传感器输入端口2复位 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -