📄 temp-control.lst
字号:
C51 COMPILER V6.12 TEMP_CONTROL 09/07/2007 15:03:22 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE TEMP_CONTROL
OBJECT MODULE PLACED IN .\temp-control.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\temp-control.c DEBUG OBJECTEXTEND
stmt level source
1 #include <reg52.H>
2 #define uint unsigned int
3 #define uchar unsigned char
4 uchar discod[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0,0x83,0xc6,0xa1,0x86,0x8e};
5 ////////////////={ 0 1 2 3 4 5 6 7 8 9 a b c d e f};
6 uint disbuf[4]={0x01,0x02,0x03,0x04};
7 uint fled,alrmcode=600,coolcode=500;
8 uint temp;
9 sbit led1=P0^0;
10 sbit led2=P0^1;
11 sbit led3=P0^2;
12 sbit led4=P0^3;
13
14 sbit k1=P2^0;
15 sbit k2=P2^1;
16 sbit k3=P2^2;
17 sbit k4=P2^3;
18 sbit ALRM =P2^4;
19 sbit ALRMLED=P2^5;
20 sbit COOL =P2^6;
21 sbit COOLLED=P2^7;
22
23 sbit DQ=P3^7; //定义通信端口
24 ////////////////////////////////////////////////////
25 main()
26 {
27 1 for(;;)
28 1 {
29 2 uchar d;
30 2 P0=0;
31 2 temp=ReadTemperature();fled=12;
*** WARNING C206 IN LINE 31 OF .\TEMP-CONTROL.C: 'ReadTemperature': missing function-prototype
32 2 if(temp>alrmcode){ALRM=1;ALRMLED=1;}else{ALRM=0;ALRMLED=0;}
33 2 if(temp>coolcode){COOL=1;COOLLED=1;}else{COOL=0;COOLLED=0;}
34 2 for(d=0;d<7;d++){display();}
*** WARNING C206 IN LINE 34 OF .\TEMP-CONTROL.C: 'display': missing function-prototype
35 2 if(k4==0){key();}
*** WARNING C206 IN LINE 35 OF .\TEMP-CONTROL.C: 'key': missing function-prototype
36 2 }
37 1 }
38 /////////////////////////////////////////////////////
39 key()
40 {
41 1
42 1 if(k4==0)
43 1 { temp=alrmcode;fled=11;
44 2 while(k4==0){display();}
45 2 while(k3==1)
46 2 {
47 3
48 3 if(k1==0){temp=alrmcode;fled=11;}
49 3 if(k2==0){temp=coolcode;fled=15;}
50 3 display();
51 3 if(k4==0)
52 3 {
C51 COMPILER V6.12 TEMP_CONTROL 09/07/2007 15:03:22 PAGE 2
53 4 back: while(k3==0);
54 4 if(k4==0)
55 4 {
56 5 while(k3==1)
57 5 {
58 6 display();
59 6 if(fled==11)
60 6 {
61 7 while(k3==1)
62 7 {
63 8 if(k1==0){alrmcode++;temp=alrmcode;}
64 8 if(k2==0){alrmcode--;temp=alrmcode;}
65 8 display();display();display();display();display();display();
66 8 display();display();display();display();display();display();
67 8 }
68 7 }
69 6 if(fled==15)
70 6 {
71 7 while(k3==1)
72 7 {
73 8 if(k1==0){coolcode++;temp=coolcode;}
74 8 if(k2==0){coolcode--;temp=coolcode;}
75 8 display();display();display();display();display();display();
76 8 display();display();display();display();display();display();
77 8 }
78 7 }
79 6 goto back;
80 6 }
81 5 }
82 4 }
83 3 } } }
84 /////////////////////////////////////////////////////
85 display()
86 {
87 1 uchar c;
88 1 disbuf[0]=temp/100;
89 1 disbuf[1]=(temp%100)/10;
90 1 disbuf[2]=((temp%100)%10);
91 1 disbuf[3]=fled;
92 1 P1=discod[disbuf[0]];P0=1;
93 1 for(c=0;c<150;c++);
94 1 P1=(discod[disbuf[1]]&0x7f);P0=2;
95 1 for(c=0;c<150;c++);
96 1 P1=discod[disbuf[2]];P0=4;
97 1 for(c=0;c<150;c++);
98 1 P1=discod[disbuf[3]];P0=8;
99 1 for(c=0;c<150;c++);
100 1 }
101 //延时函数
102
103 void delay(unsigned int i)
104 {
105 1 while(i--);
106 1 }
107
108 //初始化函数
109 Init_DS18B20(void)
110 {
111 1 unsigned char x=0;
112 1 DQ = 1; //DQ复位
113 1 delay(8); //稍做延时
114 1 DQ = 0; //单片机将DQ拉低
C51 COMPILER V6.12 TEMP_CONTROL 09/07/2007 15:03:22 PAGE 3
115 1 delay(80); //精确延时 大于 480us
116 1 DQ = 1; //拉高总线
117 1 delay(14);
118 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
119 1 delay(20);
120 1 }
121
122 //读一个字节
123 ReadOneChar(void)
124 {
125 1 unsigned char i=0;
126 1 unsigned char dat = 0;
127 1 for (i=8;i>0;i--)
128 1 {
129 2 DQ = 0; // 给脉冲信号
130 2 dat>>=1;
131 2 DQ = 1; // 给脉冲信号
132 2 if(DQ)
133 2 dat|=0x80;
134 2 delay(4);
135 2 }
136 1 return(dat);
137 1 }
138
139 //写一个字节
140 WriteOneChar(unsigned char dat)
141 {
142 1 unsigned char i=0;
143 1 for (i=8; i>0; i--)
144 1 {
145 2 DQ = 0;
146 2 DQ = dat&0x01;
147 2 delay(5);
148 2 DQ = 1;
149 2 dat>>=1;
150 2 }
151 1 //delay(4);
152 1 }
153
154 //读取温度
155 ReadTemperature(void)
156 {
157 1 unsigned char a=0;
158 1 unsigned char b=0;
159 1 unsigned int t=0;
160 1 float tt=0;
161 1 Init_DS18B20();
162 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
163 1 WriteOneChar(0x44); // 启动温度转换
164 1 Init_DS18B20();
165 1 WriteOneChar(0xCC); //跳过读序号列号的操作
166 1 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
167 1 a=ReadOneChar();
168 1 b=ReadOneChar();
169 1 t=b;
170 1 t<<=8;
171 1 t=t|a;
172 1 tt=t*0.625;
173 1 //t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用
174 1 return(tt);
175 1 }
176
C51 COMPILER V6.12 TEMP_CONTROL 09/07/2007 15:03:22 PAGE 4
177
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 681 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 32 7
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 3 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -