📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 03/30/2009 08:19:11 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "main.h"
2
3
4 /***************************************///
5 void delay_ms(unsigned int count)
6 {
7 1 uint i,j;
8 1 for(j=0;j<count;j++)
9 1 {
10 2
11 2 for(i=0;i<350;i++)
12 2 ;
13 2 }
14 1 }
15
16 void init_port(void)
17 {
18 1 P0=0xFF;
19 1 P1=0xFF;
20 1 P2=0xFF;
21 1 P3=0xFF;
22 1 }
23
24 /**********************************///开机准备时间
25 void minute(uchar a)
26 {
27 1 uchar a1,a2,a3;
28 1 TMOD=0x01; /*定时器为模式为1*/
29 1 TH0=(65536-50000)/256; /*设定定时器值为50毫秒*/
30 1 TL0=(65536-50000)%256;
31 1 TR0=1; /*启动定时器*/
32 1 for(a3=0;a3<a;a3++)
33 1 {
34 2 for(a2=0;a2<60;a2++) /*定时1分钟*/
35 2 {
36 3 for(a1=0;a1<20;a1++) /*定时1s*/
37 3 {
38 4 do{}while(!TF0);
39 4 TF0=0;
40 4 TH0=(65536-50000)/256; /*重新装载*/
41 4 TL0=(65536-50000)%256;
42 4 }
43 3 }
44 2 }
45 1 }
46 /*************************************/
47
48 /***********************串口收发程序********************************/
49 void b9600(void)
50 {
51 1 SCON = 0x50; //串口工作方式设置字节,1个起始位,8个数据位,1个停止位组成10位帧
52 1 PCON = 0x80; //波特率加倍模式
53 1 TMOD |= 0x20; //0010, //COM2:自动重置初值的8位定时/计数器
54 1 TH1 = 0xfa;TL1=0xfa;
55 1 //串行口波特率发生器,=f=12M
C51 COMPILER V8.02 MAIN 03/30/2009 08:19:11 PAGE 2
56 1 TR1 = 1;
57 1 //启动T1
58 1 }
59
60
61 //串口发送字符程序
62 void SendByte(uchar SSD)
63 {
64 1 TI = 0;
65 1 RI = 0;
66 1 SBUF = SSD;
67 1 while (!TI){}
68 1 ;
69 1 TI = 0;
70 1 }
71
72 //串口接收字符程序
73 unsigned char RxByte(void)
74 {
75 1 unsigned char a;
76 1
77 1 while (RI == 0){}
78 1 ; //为低是一直停止
79 1 RI = 0;
80 1 a = SBUF;
81 1 return (a);
82 1 }
83
84 //向串口发送一个字符串,strlen为该字符串长度
85 void SendStr(unsigned char *str, unsigned int strlen)
86 {
87 1 unsigned int k = 0;
88 1 do
89 1 {
90 2 SendByte(*(str + k));
91 2 k++;
92 2 }
93 1 while (k < strlen);
94 1 }
95 /***********************************************************/
96
97
98 /***********得到温度值转换成十进制***********/
99 uchar receive_temperature(void)
100 {
101 1 unsigned char tempL=0,tempH=0,temperature=0;
102 1 uchar buffer[8]={0,0,0,0,0,0,0,0};
103 1 receive_string(0x9B,buffer,8);//iic读取转换结果,放入buffer中
104 1 delay_ms(10);
105 1 tempH=buffer[0];tempL=buffer[1];
106 1 // SendByte(buffer[0]);
107 1 //SendByte(buffer[1]);
108 1 temperature=((tempH*256)+tempL)*0.01; //数据处理
109 1 return(temperature);
110 1 }
111
112
113 /**********数值转换ANSII码*********/
114 void adc_str(uint Val,uchar *Data)//对应标准ANSII码表,代码48刚好对应ANSII中的'0',其他的如是类推
115 {
116 1 Data[0]=Val/10+48;//Data[3]=48+5= '5'
117 1 Data[1]=Val%10+48;//Data[4]=48+0 '0'
C51 COMPILER V8.02 MAIN 03/30/2009 08:19:11 PAGE 3
118 1 }
119 /*************************************************************************///
120
121 /******************************主函数**************************************/
122 void main()
123 {
124 1 uchar temperature1,temperature2,temperature0;
125 1 uchar set,cool,min;
126 1 uchar Data[]={"12 "};
127 1 uchar Work[]={"work "};
128 1
129 1
130 1
131 1 init_port();
132 1 b9600();
133 1 //delay_ms(10);
134 1 while(1)
135 1 {
136 2 if(P0^0!=0)
137 2 {
138 3 P1=0xee; // 循环风机启动,制冷系统关闭,风阀A打开,风阀B关闭
139 3
140 3 min=RxByte();//得到定时运行准备时间
141 3 //SendByte(min);
142 3 minute(min);
143 3 b9600();
144 3 SendStr(Work,6);
145 3
146 3
147 3 while(P0^0!=0)
148 3 {
149 4 b9600();
150 4 set=RxByte(); // 得到设定温度值
151 4 //SendByte(set);
152 4 cool=RxByte(); // 得到冷源温度值
153 4 //SendByte(cool);
154 4 P2=0x80; //通道1选通
155 4 temperature1=receive_temperature(); //得到室内温度值
156 4 adc_str(temperature1,Data);
157 4 SendStr("i=",2);
158 4 SendStr(Data, 3);
159 4 P2=0x00; //通道0选通
160 4 temperature0=receive_temperature(); //得到室外温度值
161 4 adc_str(temperature0,Data);
162 4 SendStr("o=",2);
163 4 SendStr(Data, 3);
164 4 //SendByte(temperature0);
165 4 P2=0x40; //通道2选通
166 4 temperature2=receive_temperature(); //得到回风管温度值
167 4 adc_str(temperature2,Data);
168 4 SendStr("p=",2);
169 4 SendStr(Data,3);
170 4
171 4 //SendByte(temperature2);
172 4
173 4 if(temperature1<=(set-3)) // 检查室内温度是否达到设定温度
174 4 {
175 5 P1=0xed; //制冷系统关闭,风阀A关闭,风阀B打开
176 5 //temperature1=receive_temperature(); //得到温度值
177 5 //SendByte(temperature1);
178 5 SendStr("S1/ ",4);
179 5 //delay_ms(500);
C51 COMPILER V8.02 MAIN 03/30/2009 08:19:11 PAGE 4
180 5 }
181 4 else if(temperature1>=(set+3)) // 室内温度达到(设定温度+3)度
182 4 {
183 5 if(temperature0<=cool) // 室外温度达到冷源温度
184 5 {
185 6 P1=0xee;
186 6 SendStr("S2/ ",4);
187 6 //delay_ms(500);
188 6 }
189 5 if(temperature0>=(cool+3)) // 室外温度达到(冷源温度+3)
190 5 {
191 6 if(temperature2>=temperature0) // 回风管温度高于室外温度
192 6 {
193 7 P1=0xe6;
194 7 SendStr("S3/ ",4);
195 7 //SendByte(3);
196 7 //delay_ms(500);
197 7 }
198 6 else //回风管温度不高于室外温度
199 6 {
200 7 P1=0xe5;
201 7 SendStr("S4/ ",4);
202 7 //SendByte(4);
203 7 //delay_ms(500);
204 7 }
205 6 }
206 5 }
207 4
208 4 //delay_ms(500);
209 4 }
210 3 }
211 2 else P1=0xff;
212 2 }
213 1 }
214 /**********************************主函数结束*************************//////
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 619 ----
CONSTANT SIZE = 48 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 34
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 + -