📄 humidity.lst
字号:
C51 COMPILER V8.08 HUMIDITY 12/04/2007 13:03:12 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE HUMIDITY
OBJECT MODULE PLACED IN humidity.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE humidity.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /****************************************************************************/
2 /* */
3 /* Copyright (c) 2005, 老树工作室 */
4 /* All rights reserved. */
5 /* */
6 /* */
7 /****************************************************************************/
8 /****************************************************************************/
9 /* 文件名:humidity.c */
10 /* 版 本:Version 1.0 */
11 /* 描 述:利用hs1101与tlc555检测湿度的代码 */
12 /* 根据数据手册,简化湿度计算公式如下: */
13 /* humidity = (hum_const - 0.702*(fhz_tlc555-40)) / 10 */
14 /* fhz_tlc555>=7000: hum_const=5143.7 */
15 /* 6700<=fhz_tlc555<7000: hum_const=5183.7 */
16 /* fhz_tlc555<6700: hum_const=5203.7 */
17 /* */
18 /* 作 者:spot */
19 /* 函 数: */
20 /* time0_over_int */
21 /* ext1_int_proc */
22 /* system_init */
23 /* */
24 /* 历史记录: */
25 /* spot 2005-06-25 Creat Inital version. (Version 1.0) */
26 /****************************************************************************/
27
28 #include <reg52.h>
29 #include <absacc.h>
30 #include <intrins.h>
31 #include "../includes/types.h"
32
33 /* 函数声明 */
34 void time0_over_int(void); /* 定时器0中断服务程序 ,使用第1组寄存器 */
35 void ext1_int_proc(void); /* 外部中断1中断服务程序,使用第2组寄存器 */
36 void system_init(void); /* 系统上电初始化 */
37 void display_humidity(u_int current_humidity);/* 在数码管上显示当前湿度 */
38 extern void load_number(u_char number, bit dp);
39 extern void send_latch_clock(void);
40 extern void clear_led(void);
41 /* 声明结束 */
42
43 u_int fhz_tlc555; /* tlc555输出频率 */
44 u_char timer_count; /* 定时计数 */
45 bit timer_int; /* 定时标志 */
46 float hum_const; /* 计算湿度的常数 */
47
48 /* 定时器0中断服务程序 ,使用第1组寄存器 */
49 void time0_over_int(void) interrupt 1 using 1
50 {
51 1 TF0=0;
52 1 timer_int=1;
53 1 TH0 = -(46080 / 256);
54 1 TL0 = -(46080 % 256);
55 1 }
C51 COMPILER V8.08 HUMIDITY 12/04/2007 13:03:12 PAGE 2
56
57 /* 外部中断1中断服务程序,使用第2组寄存器 */
58 void ext1_int_proc(void) interrupt 2 using 2
59 {
60 1 fhz_tlc555++;
61 1 }
62
63 /* 系统上电初始化 */
64 void system_init(void)
65 {
66 1 EA = 0;
67 1 timer_int = 0;
68 1 timer_count = 0;
69 1
70 1 TMOD = 0x01; /*定时器0工作于方式1*/
71 1 TCON = 0x04; /*外部中断下降沿触发*/
72 1 TH0 = -(46080 / 256); /*定时50毫秒*/
73 1 TL0 = -(46080 % 256);
74 1 PT0 = 1; /*定时器0高优先级*/
75 1 TR0 = 1; /*定时器0启动计数*/
76 1 IE = 0x86; /*定时器0,外部中断1,CPU开中断*/
77 1 }
78
79 /* 计算当前湿度 */
80 u_int get_humidity(u_int fhz) /* 输入fhz为tlc555的频率计数 */
81 {
82 1 u_int humidity = 0;
83 1 if(fhz >= 7000)
84 1 {
85 2 hum_const = 5143.7;
86 2 }
87 1 else if ( (fhz >= 6700) && (fhz < 7000) )
88 1 {
89 2 hum_const = 5183.7;
90 2 }
91 1 else if(fhz < 6700)
92 1 {
93 2 hum_const = 5203.7;
94 2 }
95 1 humidity = (u_int)( (hum_const - 0.702*(fhz - 40)) / 10);
96 1 return humidity;
97 1 }
98
99 /* 在数码管上显示当前湿度 */
100 void display_humidity(u_int current_humidity)
101 {
102 1 load_number( (current_humidity %10), 0);
103 1 load_number( (current_humidity /10), 0);
104 1 send_latch_clock();
105 1 }
106
107 main()
108 {
109 1 u_int real_hum;
110 1
111 1 system_init();
112 1 while(1)
113 1 {
114 2 if (timer_int == 1) /* 50毫秒定时到 */
115 2 {
116 3 timer_int = 0;
117 3 timer_count++;
C51 COMPILER V8.08 HUMIDITY 12/04/2007 13:03:12 PAGE 3
118 3
119 3 if (timer_count == 100) /* 5秒定时到 */
120 3 {
121 4 timer_count = 0;
122 4 fhz_tlc555 /= 5;
123 4 real_hum = get_humidity(fhz_tlc555);
124 4 clear_led();
125 4 display_humidity(real_hum);
126 4 fhz_tlc555 = 0;
127 4 }
128 3 }
129 2 }
130 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 279 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 4
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -