📄 水温控制系统 (1).lst
字号:
C51 COMPILER V7.09 __温控制系统__1_ 12/06/2008 20:27:06 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE __温控制系统__1_
OBJECT MODULE PLACED IN .\水温控制系统 (1).obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\代码库\水温控制系统 (1).c BROWSE DEBUG OBJECTEXTEND PRINT(.\水温控制系统
- (1).lst) OBJECT(.\水温控制系统 (1).obj)
line level source
1
2 #include "Thermomete.h"
*** WARNING C318 IN LINE 2 OF ..\代码库\水温控制系统 (1).c: can't open file 'Thermomete.h'
3
4 sbit DQ=P1^1;//定义数据通信端口
*** ERROR C202 IN LINE 4 OF ..\代码库\水温控制系统 (1).C: 'P1': undefined identifier
5 bit Negative=0;//温度负值标志位
6
7 void delay_us(unsigned int x);//延时1us函数
8 void delay(unsigned int t);//延时函数
9 void lcd_code(unsigned char lcdcode);//向液晶写一个命令的函数
10 void lcd_data(unsigned char lcddata);//向液晶写一个数据的函数
11 void init_lcd(void);//初始化液晶屏函数
12 void delay_ms(unsigned int x);//延时1ms函数
13 void display_char(unsigned char *displaychar);//显示字符串函数
14 void display_tem(float f);//显示温度值函数
15 void Reset(void);//DS18B20复位函数
16 void Built(void);//自制摄氏温度符号函数
17 unsigned char read_data(void);//读一个字节数据函数
18 void write_data(unsigned char value);//写一个字节数据函数
19 float Read_Temperature(void);//读取温度并转换函数
20 float Set_tem(void);//设置一个我们需要的温度
21 void keyvaule(void);//读取键盘函数
22 bit FunctionKey_Flag=0,ChooseKey_Flag_add=0,ChooseKey_Flag_subb=0,ReturnKey_Flag=0;//定义功能键和选择键加
-、减标志位
23 bit Return=0,Error=0;
24 sbit p16=P1^6;
*** ERROR C202 IN LINE 24 OF ..\代码库\水温控制系统 (1).C: 'P1': undefined identifier
25 float num_2=0;
26 unsigned char num_0=0,num_1=0,num;
27
28 void main(void)
29 {
30 1 float temp,temp_1;
31 1 EA=0;
*** ERROR C202 IN LINE 31 OF ..\代码库\水温控制系统 (1).C: 'EA': undefined identifier
32 1 init_lcd();
33 1 Built();
34 1 lcd_code(0x80);
35 1 display_char("CurTem:");
36 1 delay(50);
37 1 lcd_code(0xc0);
38 1 display_char("Set_Tem:");
39 1
40 1
41 1 aa: while(1)
42 1 {
43 2 temp=Read_Temperature();//温度转换
44 2 lcd_code(0x88);
45 2 display_tem(temp);//显示当前温度
46 2 //delay_us(10);
47 2 if(temp_1<=temp)
48 2 {
49 3 p16=0;
C51 COMPILER V7.09 __温控制系统__1_ 12/06/2008 20:27:06 PAGE 2
*** ERROR C202 IN LINE 49 OF ..\代码库\水温控制系统 (1).C: 'p16': undefined identifier
50 3 }
51 2 else
52 2 {
53 3 p16=1;
*** ERROR C202 IN LINE 53 OF ..\代码库\水温控制系统 (1).C: 'p16': undefined identifier
54 3 }
55 2 keyvaule();
56 2 if(FunctionKey_Flag==1)
57 2 {
58 3 break;
59 3 }
60 2 }
61 1
62 1
63 1 FunctionKey_Flag=0;
64 1 Set_tem();
65 1
66 1 lcd_code(0xc9);
67 1 lcd_data(num_1+0x30);
68 1 lcd_data(num_0+0x30);
69 1 delay_us(20);
70 1 temp_1=Set_tem();
71 1 goto aa;
72 1
73 1
74 1
75 1 }
76
77
78 /***************延时1us函数*************/
79 void delay_us(unsigned int x)
80 {
81 1 while(x--);
82 1 }//x<255时,精确延时为(6*x)us
83
84
85
86 /***************延时1ms函数*************/
87 void delay_ms(unsigned int x)
88 {
89 1 unsigned char i;
90 1 while(x--)
91 1 {
92 2 for(i=0;i<125;i++);
93 2 }
94 1 }
95
96
97 /****************DS18B20复位函数******************/
98 void Reset(void)
99 {
100 1 unsigned char ch=0;
101 1 DQ = 1;//DQ复位
*** ERROR C202 IN LINE 101 OF ..\代码库\水温控制系统 (1).C: 'DQ': undefined identifier
102 1 delay_us(8);//延时
103 1 DQ = 0;//DQ拉低
*** ERROR C202 IN LINE 103 OF ..\代码库\水温控制系统 (1).C: 'DQ': undefined identifier
104 1 delay_us(80); //精确延时大于480us
105 1 DQ = 1;
*** ERROR C202 IN LINE 105 OF ..\代码库\水温控制系统 (1).C: 'DQ': undefined identifier
106 1 //控制器应该将数据单总线拉高,以便于在15~60uS后接收存在脉冲
C51 COMPILER V7.09 __温控制系统__1_ 12/06/2008 20:27:06 PAGE 3
107 1 delay_us(14);//延时,存在脉冲为一个60~240uS的低电平信号
108 1 ch=DQ;//接收存在脉冲
*** ERROR C202 IN LINE 108 OF ..\代码库\水温控制系统 (1).C: 'DQ': undefined identifier
109 1 delay(20);
110 1 }
111
112
113 /****************读一个字节数据函数******************/
114 unsigned char read_data(void)
115 {
116 1 unsigned char i;
117 1 unsigned char value = 0;
118 1 for (i=0;i<8;i++)
119 1 {
120 2 DQ = 0; //给脉冲信号
*** ERROR C202 IN LINE 120 OF ..\代码库\水温控制系统 (1).C: 'DQ': undefined identifier
121 2 value=value>>1;//产生至少1uS的低电平,表示读时间的起始
122 2 DQ = 1; //给脉冲信号,在总线被释放后的15uS中DS18B20会发送内部数据位
*** ERROR C202 IN LINE 122 OF ..\代码库\水温控制系统 (1).C: 'DQ': undefined identifier
123 2 if(DQ)
*** ERROR C202 IN LINE 123 OF ..\代码库\水温控制系统 (1).C: 'DQ': undefined identifier
124 2 {
125 3 value=value|0x80;
126 3 }
127 2 delay_us(4);
128 2 }
129 1 return(value);
130 1 }
131
132
133 /****************写一个字节数据函数******************/
134 void write_data(unsigned char value)
135 {
136 1 unsigned char i;
137 1 for(i=0;i<8;i++)
138 1 {
139 2 DQ=0;
*** ERROR C202 IN LINE 139 OF ..\代码库\水温控制系统 (1).C: 'DQ': undefined identifier
140 2 //写数据时间隙的前15uS总线需要是被控制器拉置低电平
141 2 DQ=value&0x01;
*** ERROR C202 IN LINE 141 OF ..\代码库\水温控制系统 (1).C: 'DQ': undefined identifier
142 2 delay_us(5);//芯片对总线数据的采样时间,采样时间在15~60uS
143 2 DQ=1;
*** ERROR C202 IN LINE 143 OF ..\代码库\水温控制系统 (1).C: 'DQ': undefined identifier
144 2 value=value>>1;
145 2 }//字节的读写是从低位开始的
146 1 delay(4);
147 1 }
148
149
150 /****************读取温度并转换函数******************/
151 //DS18b20一线工作协议流程为:
152 //复位 发送ROM指令 发送存储器指令 数据通信
153 float Read_Temperature(void)
154 {
155 1 unsigned char first_byte,second_byte,num=0;
156 1 float Temperature_value;
157 1 unsigned int buf;
158 1 Reset();//复位
159 1 write_data(0xcc);//跳跃ROM指令,跳过读序列号
160 1 write_data(0x44);//启动温度转换
161 1 delay_ms(750);//延时大于转换时间
C51 COMPILER V7.09 __温控制系统__1_ 12/06/2008 20:27:06 PAGE 4
162 1 Reset();//复位
163 1 write_data(0xcc);//跳跃ROM指令,跳过读序列号
164 1 write_data(0xbe);//从RAM中读数据,前两个字节为温度值
165 1 first_byte=read_data();//读取温度值低八位
166 1 second_byte=read_data();//读取温度值高八位
167 1 //Reset();//复位中止读数
168 1 num=second_byte&0x80;//判断温度值的正负
169 1 buf=second_byte;
170 1 buf=buf<<8;//温度值高八位存放在整型变量buf高八位
171 1 buf=buf|first_byte;//相或运算将温度值低八位存放在整型变量buf低八位
172 1 if(num!=0)
173 1 {
174 2 buf=(~buf)+1;
175 2 Negative=1;
176 2 }//温度值为负数,取反后加一
177 1 Temperature_value=buf*0.0625;//分辨率为12位,LSB=0.0625
178 1 return(Temperature_value);
179 1 }
180
181
182
183 /*****************设置温度值***********************/
184 float Set_tem(void)
185 {
186 1
187 1
188 1 lcd_code(0xc9);
189 1 lcd_data(num_1+0x30);
190 1 lcd_data(num_0+0x30);
191 1 while(1)
192 1 {
193 2 keyvaule();
194 2 if(ChooseKey_Flag_subb==1)
195 2 {
196 3 ChooseKey_Flag_subb=0;
197 3 if(num_0==0)
198 3 {
199 4 num_0=9;
200 4 }
201 3 else
202 3 {
203 4 num_0--;
204 4 }//减选择键按下,判断计时器是否越界
205 3 lcd_code(0xc9);
206 3 lcd_data(num_1+0x30);
207 3 lcd_data(num_0+0x30);
208 3 }
209 2 else if(ChooseKey_Flag_add==1)
210 2 {
211 3 ChooseKey_Flag_add=0;
212 3 if(num_0==9)
213 3 {
214 4 num_0=0;
215 4 }
216 3 else
217 3 {
218 4 num_0++;
219 4 }//加选择键按下,判断计时器是否越界
220 3 lcd_code(0xc9);
221 3 lcd_data(num_1+0x30);
222 3 lcd_data(num_0+0x30);
223 3 }
C51 COMPILER V7.09 __温控制系统__1_ 12/06/2008 20:27:06 PAGE 5
224 2 else if(FunctionKey_Flag==1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -