📄 lcd_18b20.lst
字号:
C51 COMPILER V7.08 LCD_18B20 05/14/2007 10:50:25 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE LCD_18B20
OBJECT MODULE PLACED IN LCD_18b20.OBJ
COMPILER INVOKED BY: D:\工具安装目录二\Keil C51\C51\BIN\C51.EXE LCD_18b20.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //#include <at89x51.h>//用AT89C51时就用这个头文件
2 #include <reg52.h>//用华邦W78E58B时必须用这个头文件
3 //#include <absacc.h>
4 //#include <ctype.h>
5 //#include <math.h>
6 //#include <stdio.h>
7 //#include <string.h>
8 #include <DS18B20.h> //测温头文件
9 #include <LCD1602.h> //液晶显示头文件
10 #include <keyscan.h> //键盘扫描头文件
11 sbit alarm=P2^6; //报警信号
12 //sbit DQ = P3^7; //定义DQ引脚为P3.7
13 unsigned char key_value; //存放键盘扫描值
14 bit up_one,down_one; //加1和减1标志
15 bit alarm_up_flag,alarm_down_flag; //上限报警和下限报警设置标志
16 bit set_temper_flag; //设置控制标志温度标志
17 bit alarm_switch; //报警开关
18
19 unsigned char user_temper; //用户标定温度
20 unsigned char TH=110,TL=-20,RS=0x3f; //上限温度110,下限-20,分辨率10位,也就是0.25C
21 unsigned char t[2],*pt; //用来存放温度值,测温程序就是通过这个数组与主函数通信的
22 unsigned char TempBuffer1[17]={0x2b,0x20,0x30,0x30,0x2e,0x30,0x30,0x20,
23 0x53,0x45,0x54,0x2b,0x20,0x30,0x30,0x43,'\0'};
24 //显示实时温度,上电时显示+ 00.00 SET+ 00C
25 unsigned char TempBuffer0[17]={0x54,0x48,0x3a,0x2b,0x20,0x30,0x30,0x20,
26 0x54,0x4c,0x3a,0x2b,0x20,0x30,0x30,0x43,'\0'};
27 //显示温度上下限,上电时显示TH:+ 00 TL:+ 00C
28 unsigned char code dotcode[4]={0,25,50,75};
29 /***因显示分辨率为0.25,但小数运算比较麻烦,故采用查表的方法*******
30 再将表值分离出十位和个位后送到十分位和百分位********************/
31
32
33
34 /***********用户设定温度转换为LCD显示数据**************
35 *功能:将用户设定温度user_temper,分离出符号位,百、十、个位
36 并将它们转化为ACSII码,送到液晶显示缓冲区
37 ******************************************************/
38 void user_temper_LCD(unsigned char temper)
39 {
40 1 if(temper>0x7f) //判断正负,如果为负温,将其转化为其绝对值
41 1 {
42 2 TempBuffer1[11]=0x2d; //0x2d为"-"的ASCII码
43 2 temper=~temper; //将负数的补码转换成绝对值
44 2 temper++;
45 2 }
46 1 else TempBuffer1[11]=0x2b; ////0x2B为"+"的ASCII码
47 1 TempBuffer1[12]=temper/100+0x30; //分离出temper的百十个位
48 1 if( TempBuffer1[12]==0x30) TempBuffer1[12]=0xfe; //百位数消隐
49 1 TempBuffer1[13]=(temper%100)/10+0x30; //分离出十位
50 1 TempBuffer1[14]=(temper%100)%10+0x30; //分离出个位
51 1 }
52
53
54
55 /***************温度上下限转换为LCD显示数据************
C51 COMPILER V7.08 LCD_18B20 05/14/2007 10:50:25 PAGE 2
56 *功能:将上下限报警温度,分离出符号位,百、十、个位
57 并将它们转化为ACSII码,送到液晶显示缓冲区
58 ******************************************************/
59 void alarm_LCD( unsigned char TH, unsigned char TL)
60 {
61 1 if(TH>0x7F) //判断正负,如果为负温,将其转化为其绝对值
62 1 {
63 2 TempBuffer0[3]=0x2d; //0x2d为"-"的ASCII码
64 2 TH=~TH; //将负数的补码转换成绝对值
65 2 TH++;
66 2 }
67 1 else TempBuffer0[3]=0x2b; //0x2B为"+"的ASCII码
68 1
69 1 if(TL>0x7f)
70 1 {
71 2 TempBuffer0[11]=0x2d; //0x2d为"-"的ASCII码
72 2 TL=~TL+1;
73 2 }
74 1 else TempBuffer0[11]=0x2b; //0x2B为"+"的ASCII码
75 1
76 1 TempBuffer0[4]=TH/100+0x30; //分离出TH的百十个位
77 1 if( TempBuffer0[4]==0x30) TempBuffer0[4]=0xfe; //百位数消隐
78 1 TempBuffer0[5]=(TH%100)/10+0x30; //分离出十位
79 1 TempBuffer0[6]=(TH%100)%10+0x30; //分离出个位
80 1 TempBuffer0[12]=TL/100+0x30; //分离出TL的百十个位
81 1 if( TempBuffer0[12]==0x30) TempBuffer0[12]=0xfe; //百位数消隐
82 1 TempBuffer0[13]=(TL%100)/10+0x30; //分离出十位
83 1 TempBuffer0[14]=(TL%100)%10+0x30; //分离出个位
84 1 }
85
86 /**********温度转换为LCD显示数据****************
87 *功能:将两个字节的温度值,分离出符号位,整数及小数
88 并将它们转化为ACSII码,送到液晶显示缓冲区
89 ************************************************/
90 void temper_LCD(void)
91 {
92 1 unsigned char x=0x00,y=0x00;
93 1 t[0]=*pt;
94 1 pt++;
95 1 t[1]=*pt;
96 1 if(t[1]>0x07) //判断正负温度
97 1 {
98 2 TempBuffer1[0]=0x2d; //0x2d为"-"的ASCII码
99 2 t[1]=~t[1]; /*下面几句把负数的补码*/
100 2 t[0]=~t[0]; /* 换算成绝对值*********/
101 2 x=t[0]+1; /***********************/
102 2 t[0]=x; /***********************/
103 2 if(x>255) /**********************/
104 2 t[1]++; /*********************/
105 2 }
106 1 else TempBuffer1[0]=0x2b; //0xfe为变"+"的ASCII码
107 1 t[1]<<=4; //将高字节左移4位
108 1 t[1]=t[1]&0x70; //取出高字节的3个有效数字位
109 1 x=t[0]; //将t[0]暂存到X,因为取小数部分还要用到它
110 1 x>>=4; //右移4位
111 1 x=x&0x0f; //和前面两句就是取出t[0]的高四位
112 1 t[1]=t[1]|x; //将高低字节的有效值的整数部分拼成一个字节
113 1 TempBuffer1[1]=t[1]/100+0x30; //+0x30 为变 0~9 ASCII码
114 1 if( TempBuffer1[1]==0x30) TempBuffer1[1]=0xfe; //百位数消隐
115 1 TempBuffer1[2]=(t[1]%100)/10+0x30; //分离出十位
116 1 TempBuffer1[3]=(t[1]%100)%10+0x30; //分离出个位
117 1 t[0]=t[0]&0x0c; //取有效的两位小数
C51 COMPILER V7.08 LCD_18B20 05/14/2007 10:50:25 PAGE 3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -