📄 text1.lst
字号:
C51 COMPILER V8.02 TEXT1 05/19/2008 18:22:01 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************
2 file name: temprature control system
3 date : 2007-8-9
4 author : dalfer
5 instruction:关于温度显示的简单程
6 序为ds18b20单总线温度传感器,dq端接这p1.7,
7 *********************************************************/
8 #include <reg51.h>
9 #include <stdio.h>
10 #include <ctype.h>
11 #include <intrins.h>
12 #include <absacc.h>
13 /***************************************************************/
14 #define bit_add XBYTE[0X7FFF]
15 #define seg_add XBYTE[0XBFFF]
16 #define uchar unsigned char
17 #define uint unsigned int
18
19 #define SET 5000//设定
20 #define K 3//比例系数
21 #define TI 2//积分常数
22 #define TD 1//微分常数
23 #define T 1//采样周期
24 /***************************************************************/
25 char table[]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
26 char disp_dot[11]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xc0};
27
28 int ek=0;
29 int ek_1=0;
30 int ek_2=0;
31 int pt;
32 int it;
33 int dt;
34 int departure;
35 int result;
36 uint time;
37 uint point;
38 /***************************************************************/
39 sbit DQ=P1^0;
40 sbit con=P1^1;//低电平加热
41 sbit set_dis=P1^2;
42 sbit add=P1^3;
43 sbit sub=P1^4;
44 /***************************************************************/
45 bit inc_flag=0;//增频
46 bit dec_flag=0;//减频
47 bit dis_flag=0;//显示设定
48 /***************************************************************
49 *函数名称(function name): delay_18B20
50 *函数功能(function funcation): delay
51 *入口参数(in parameter): i
52 *出口参数(out parameter): NO
53 *备注(remark): 晶振12MHz
54 ****************************************************************/
55 void delay_18B20(unsigned int i)
C51 COMPILER V8.02 TEXT1 05/19/2008 18:22:01 PAGE 2
56 {
57 1 while(i--);
58 1 }
59 /***************************************************************
60 *函数名称(function name): Init_DS18B20
61 *函数功能(function funcation): Initialize DS18B20
62 *入口参数(in parameter): NO
63 *出口参数(out parameter): NO
64 *备注(remark): NO
65 ****************************************************************/
66 void Init_DS18B20(void)
67 {
68 1 unsigned char x=0;
69 1 DQ = 1; //DQ复位
70 1 delay_18B20(8); //稍做延时
71 1 DQ = 0; //单片机将DQ拉低
72 1 delay_18B20(80); //精确延时 大于 480us
73 1 DQ = 1; //拉高总线
74 1 delay_18B20(14);
75 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
76 1 delay_18B20(20);
77 1 }
78 /***************************************************************
79 *函数名称(function name): ReadOneChar
80 *函数功能(function funcation): Read a byte data
81 *入口参数(in parameter): NO
82 *出口参数(out parameter): NO
83 *备注(remark): NO
84 ****************************************************************/
85 int ReadOneChar(void)
86 {
87 1 unsigned char i=0;
88 1 unsigned char dat = 0;
89 1 for (i=8;i>0;i--)
90 1 {
91 2 DQ = 0; // 给脉冲信号
92 2 dat>>=1;
93 2 DQ = 1; // 给脉冲信号
94 2 if(DQ)
95 2 dat|=0x80;
96 2 delay_18B20(4);
97 2 }
98 1 return(dat);
99 1 }
100
101 /***************************************************************
102 *函数名称(function name): WriteOneChar
103 *函数功能(function funcation): Write a byte data
104 *入口参数(in parameter): dat
105 *出口参数(out parameter): NO
106 *备注(remark): NO
107 ****************************************************************/ //写一个字节
108 WriteOneChar(unsigned char dat)
109 {
110 1 unsigned char i=0;
111 1 for (i=8; i>0; i--)
112 1 {
113 2 DQ = 0;
114 2 DQ = dat&0x01;
115 2 delay_18B20(5);
116 2 DQ = 1;
117 2 dat>>=1;
C51 COMPILER V8.02 TEXT1 05/19/2008 18:22:01 PAGE 3
118 2 }
119 1 }
120 /***************************************************************
121 *函数名称(function name): ReadTemperature
122 *函数功能(function funcation): Read temprature
123 *入口参数(in parameter): NO
124 *出口参数(out parameter): NO
125 *备注(remark): NO
126 ****************************************************************/
127 int ReadTemperature(void)
128 {
129 1 unsigned char a=0;
130 1 unsigned char b=0;
131 1 unsigned int t=0;
132 1
133 1 Init_DS18B20();
134 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
135 1 WriteOneChar(0x44); // 启动温度转换
136 1 delay_18B20(100);
137 1 Init_DS18B20();
138 1 WriteOneChar(0xCC); //跳过读序号列号的操作
139 1 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
140 1 a=ReadOneChar();
141 1 b=ReadOneChar();
142 1 //传感器返回值除16得实际温度值
143 1 //为了得到2位小数位,先乘100,再除16,考虑整型数据长度,
144 1 //技巧处理后先乘25,再除4,除4用右移实现
145 1 t = (b*256+a)*25;
146 1 return( t >> 2 );
147 1 }
148 /***************************************************************
149 *名称(name): time1
150 *功能(funcation): PWM
151 *备注(remark): NO
152 ****************************************************************/
153 void time1(void) interrupt 3 using 3
154 {
155 1 TR1=0;
156 1 ET1=0;
157 1 EA=0;
158 1 if(dec_flag==1)//低电平变窄,高电平变宽
159 1 {
160 2 ++time;
161 2 if(time<(point))
162 2 {
163 3 con=0;
164 3 }
165 2 if(time>=(point))
166 2 {
167 3 con=1;
168 3 }
169 2 if(time>500)
170 2 {
171 3 time=0;
172 3 }
173 2 }
174 1 TR1=1;
175 1 ET1=1;
176 1 TH1=0xff;//100um
177 1 TL1=0xfe;
178 1 }
179 /***************************************************************
C51 COMPILER V8.02 TEXT1 05/19/2008 18:22:01 PAGE 4
180 *函数名称(function name): disp
181 *函数功能(function funcation): Display temprature on 7SEG-LED
182 *入口参数(in parameter): NO
183 *出口参数(out parameter): NO
184 *备注(remark): NO
185 ****************************************************************/
186 void disp(void)
187 {
188 1 unsigned int tmp;
189 1 tmp =ek;
190 1 bit_add = 0xff;
191 1 seg_add = table[tmp%10];
192 1 bit_add = 0xf7;
193 1 delay_18B20(100);
194 1 bit_add = 0xff;
195 1 seg_add = table[tmp/10%10];
196 1 bit_add=0xfb;
197 1 delay_18B20(100);
198 1 bit_add = 0xff;
199 1 seg_add = disp_dot[tmp/100%10];
200 1 bit_add = 0xfd;
201 1 delay_18B20(100);
202 1 bit_add = 0xff;
203 1 seg_add = table[tmp/1000];
204 1 bit_add= 0xfe;
205 1 delay_18B20(100);
206 1 }
207 /***************************************************************
208 *函数名称(function name): control
209 *函数功能(function funcation):
210 *入口参数(in parameter): NO
211 *出口参数(out parameter): NO
212 *备注(remark): NO
213 ****************************************************************/
214 void control(void)
215 {
216 1 delay_18B20(100);
217 1 disp();
218 1 if(ek<4500) //一直加热
219 1 {con=0;
220 2 EA=0;
221 2 dec_flag=0;
222 2 }
223 1 if((ek>=4500)&&(ek<=5000))//PID
224 1 {
225 2 TR1=1;
226 2 ET1=1;
227 2 EA=1;
228 2 if((ek>=4500)&&(ek<5000))//pid
229 2 {
230 3 point=SET-ek;//5000-45**的值
231 3 dec_flag=1;//低电平变窄,高电平变宽
232 3 }
233 2 if(ek==5000)
234 2 {
235 3 con=1;
236 3 }
237 2 }
238 1 if(ek>5000) //保持停止加热
239 1 {
240 2 con=1;
241 2 EA=0;
C51 COMPILER V8.02 TEXT1 05/19/2008 18:22:01 PAGE 5
242 2 dec_flag=0;
243 2 }
244 1 }
245 /***************************************************************
246 *函数名称(function name): main
247 *函数功能(function funcation): realize temprature controlled
248 *入口参数(in parameter): NO
249 *出口参数(out parameter): NO
250 *备注(remark): NO
251 ****************************************************************/
252 void main(void)
253 {
254 1 PT1=1;//中断优先
255 1 TH1=0xff;//100um
256 1 TL1=0xfe;
257 1 con=0;
258 1 while(1)
259 1 {
260 2 ek=ReadTemperature();
261 2 control();
262 2 if((dec_flag==1))
263 2 {
264 3 TR1=1;
265 3 ET1=1;
266 3 EA=1;
267 3 }
268 2 if((dec_flag==0))
269 2 {
270 3 TR1=0;
271 3 ET1=0;
272 3 EA=0;
273 3 }
274 2 }
275 1 }
276
277
278
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 572 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 41 ----
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -