📄 lcd_18b20.lst
字号:
118 1 t[0]>>=2; //左移两位,以便查表
119 1 x=t[0];
120 1 y=dotcode[x]; //查表换算成实际的小数
121 1 TempBuffer1[5]=y/10+0x30; //分离出十分位
122 1 TempBuffer1[6]=y%10+0x30; //分离出百分位
123 1 }
124
125 /*********键盘命令处理函数************
126 *功能:把键盘值转化成相应的功能标志位
127 *备注:为了提高程序的健壮性,在功能标志位无效时,
128 **up_one和down_one都无效,并且各功能标志之间
129 **采用互锁处理,虽然这样麻烦,特别是功能标志较多时
130 **更是麻烦,但各功能标志之间是同级别的;
131 **也可采用多重if else方法,虽然简单,
132 **但各功能标志之间有了明显的优先级差别
133 **************************************/
134 void key_command(unsigned char x)
135 {
136 1 switch(x)
137 1 {
138 2 case 1: up_one=1;break;
139 2 case 2: down_one=1;break;
140 2 case 5: alarm_up_flag=!alarm_up_flag;break;
141 2 case 6: alarm_down_flag=!alarm_down_flag;break;
142 2 case 7: set_temper_flag=!set_temper_flag;break;
143 2 case 8: alarm_switch=!alarm_switch;break;
144 2 default: break;
145 2 }
146 1 if(!(alarm_up_flag||alarm_down_flag||set_temper_flag))
147 1 {
148 2 up_one=0x00; //在没有相应功能标志有效时
149 2 down_one=0x00; //up_one和down_one都被锁定
150 2 }
151 1 if(alarm_up_flag&&(!alarm_down_flag)&&(!set_temper_flag))//设置上限报警
152 1 {
153 2 if(up_one)//上限报警加1
154 2 {
155 3 TH++;up_one=0;
156 3 if(TH>=100)//超过100度,回零到20度
157 3 TH=20;
158 3 }
159 2 if(down_one)//上限报警减1
160 2 {
161 3 TH--;down_one=0;
162 3 if(TH<=20)//小于20度,回零到20度
163 3 TH=20;
164 3 }
165 2 }
166 1 if((!alarm_up_flag)&&(alarm_down_flag)&&(!set_temper_flag))//设置下限报警
167 1 {
168 2 if(up_one)
169 2 {
170 3 TL++;up_one=0;
171 3 if(TL>=20)//高于20度,回零到0度
172 3 TL=0;
173 3 }
174 2 if(down_one)
175 2 {
176 3 TL--;down_one=0;
177 3 if(TL<=0)//低于0度,回零到0度
178 3 TL=0;
179 3 }
C51 COMPILER V7.08 LCD_18B20 05/14/2007 10:50:25 PAGE 4
180 2 }
181 1
182 1 if((!alarm_up_flag)&&(!alarm_down_flag)&&(set_temper_flag))//设置用户标定温度
183 1 {
184 2 if(up_one)
185 2 {
186 3 user_temper++;up_one=0;
187 3 if(user_temper>=60)//高于60度,回零到0度
188 3 user_temper=0;
189 3 }
190 2 if(down_one)
191 2 {
192 3 user_temper--;down_one=0;
193 3 if(user_temper<=0)//低于0度,回零到0度
194 3 user_temper=0;
195 3 }
196 2 }
197 1 //if(alarm_switch)
198 1
199 1 }
200
201
202 main()
203 {
204 1 setds18b20(TH,TL,RS); //设置上下限报警温度和分辨率
205 1 delay(100);
206 1 while(1)
207 1 {
208 2 pt=ReadTemperature(); //测温函数返回这个数组的头地址
209 2 //读取温度,温度值存放在一个两个字节的数组中,
210 2 temper_LCD(); //实测温度转化为ACSII码,并送液晶显示缓冲区
211 2 user_temper_LCD(user_temper); //用户设定温度转化为ACSII码,并送液晶显示缓冲区
212 2 alarm_LCD(TH,TL); //上下限报警温度转化为ASCII码,并送液晶显示缓冲区
213 2 LCD_Initial(); //第一个参数列号,第二个为行号,为0表示第一行
214 2 //为1表示第二行,第三个参数为显示数据的首地址
215 2 LCD_Print(0,0,TempBuffer0);
216 2 LCD_Print(0,1,TempBuffer1);
217 2
218 2 scan_full(); //看有无键按下
219 2 if(key_ok) //如有键按下则看到底哪个键按下
220 2 {
221 3 key_value=key_scan(); //调用键盘扫描程序
222 3 key_command(key_value); //键盘命令处理函数
223 3 }
224 2 }
225 1 }
226
227
228
229
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1056 ----
CONSTANT SIZE = 4 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 44 5
IDATA SIZE = ---- ----
BIT SIZE = 7 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -