📄 111.lst
字号:
C51 COMPILER V7.06 111 03/19/2007 22:42:42 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 111
OBJECT MODULE PLACED IN 111.OBJ
COMPILER INVOKED BY: D:\soft\keil\C51\BIN\C51.EXE 111.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //////////////////////////////////////
2 //////////智能抽水系统软件更新设计
3 /////////// 2007-3-18
4 ///////// / 杨峰
5 ///////////////////////////////////////
6
7 #include "89s51.h"
8 #include "LCD.H"
9 #define uint unsigned int
10 #define K1 P0_4 // 水位上限加
11 #define K2 P0_3 // 水位上限减
12 #define K3 P0_2 // 水位下限加
13 #define K4 P0_1 // 水位下限减
14 #define K5 P0_0 //应急键 按下则强制停止抽水
15
16 long int juli;
17 unsigned char second;
18 unsigned char shang=100,xia=1 ; //初始化 最高水位限制 为100 最低水位1
19 static long int Recieve_Time;
20 void Caculate_juli(void); //计算距离
21 /////////////////////////////////////////////////////////////////////
22
23 void delay(char m) //超声波发送延时
24 {
25 1 unsigned char i,j;
26 1 for(i=0;i<m;i++)
27 1 for(j=0;j<80;j++);
28 1 }
29
30 ///////////////////////////////////////////////////////////////////
31 void Delay1ms(int n) //LCD显示延时
32 {
33 1 int i,j;
34 1 for(i=0;i<n;i++)
35 1 for(j=0;j<125;j++);
36 1 }
37
38
39 ///////////////////////////////////////////////////////////
40 void intet0(void) interrupt 1 using 1 //T0益出中断,得到超声波返回时间
41 {
42 1 TH0=0X00; //重新赋值
43 1 TL0=0X00;
44 1 second++; // T0益出中断次数++
45 1 }
46
47 /////////////////////////////////////////////////////////////
48 void intex1(void) interrupt 2 using 1// 外部中断1服务程序
49 {
50 1 union {unsigned int time;unsigned char t[2];}count;//定义一个共用体,用来存放T0的值,将TH0 TL0的值整合在一
-起
51 1 IE=0;
52 1 TR0=0;
53 1 count.t[0]=TH0;
54 1 count.t[1]=TL0; //读取时间,计数多少则为多少US
C51 COMPILER V7.06 111 03/19/2007 22:42:42 PAGE 2
55 1 Recieve_Time=count.time;
56 1 TH0=0; //T0重新赋初值
57 1 TL0=0;
58 1 IE=0x8e; //开启中断
59 1 Caculate_juli();//计算距离
60 1 }
61 ////////////////////////////////////////////////////////////
62 void Caculate_juli(void) //计算距离
63 {
64 1 unsigned char i; //secondT0溢出次数
65 1 int Speed=170; // 340/2=170
66 1 juli=Recieve_Time*Speed;//Recieve_Time(us)*340(m/s)*10-6
67 1 //juli/=2000000; //若是 Speed=340; 则如此
68 1 for(i=0;i<second;i++)
69 1 {
70 2 juli+=11140000; //11.14为T0溢出一次对应距离 补齐八位是为了方便拆开显示
71 2 //juli/=1000000;
72 2 }
73 1 second=0; //中断记数器清零
74 1 }
75 //////////////////////////////////////////////////////////////
76 void Initial_display() //显示初始化
77 {
78 1 WriteInstruct(0x80);
79 1 WriteString("shuiwei:");
80 1 }
81 ////////////////////////////////////////////////////////////
82 void display()//显示程序
83 {
84 1 long int temp;
85 1 unsigned char i;
86 1 unsigned char value[8]; //存放JULI
87 1 for(i=0;i<8;i++) //逐一拆字 方便LCD显示
88 1 {
89 2 value[i]=temp%10;
90 2 temp/=10;
91 2 }
92 1 WriteInstruct(0x89); //在 shuiwei 后显示距离
93 1 WriteData(value[7]+0x30);//从高位向地位逐一显示 只显示四位 精度为CM
94 1 WriteData(value[6]+0x30);
95 1 WriteString("."); //小数点显示
96 1 WriteData(value[5]+0x30);
97 1 WriteData(value[4]+0x30); //显示两位小数,精度到CM
98 1 //Write_Data(value[3]+0x30); //后四位丢弃
99 1 //Write_Data(value[2]+0x30);
100 1 //Write_Data(value[1]+0x30);
101 1 //Write_Data(value[0]+0x30);
102 1
103 1 /* WriteInstruct(0xc0); // 显示格式控制
104 1 WriteData(juli/10+'0');
105 1 WriteData(juli%10+'0');
106 1 WriteString(":");*/
107 1 WriteInstruct(0xc0);
108 1 WriteData(shang/10+'0');
109 1 WriteData(shang%10+'0');
110 1 WriteString(":");
111 1 WriteData(xia/10+'0');
112 1 WriteData(xia%10+'0');
113 1 WriteString(":"); // 空格有影响 " : "
114 1
115 1 }
116
C51 COMPILER V7.06 111 03/19/2007 22:42:42 PAGE 3
117
118 ////////////////////////水位设定////////////////////////////
119
120 void keyboard() //键盘程序
121 {
122 1 if(K1==0) //最高水位限制为: 60---100
123 1 {
124 2 Delay1ms(10); //键消抖
125 2 while(!K1) //P3.0连续低电平时shang连续加1
126 2 {
127 3 if(shang!=100) //最高水位限制为100
128 3 {
129 4 shang++;
130 4 display();
131 4 Delay1ms(200);
132 4 }
133 3 else
134 3 {
135 4 shang=60; //shang等于100时,shang=60
136 4 display();
137 4 Delay1ms(200);
138 4 }
139 3 }
140 2 }
141 1
142 1 if(K2==0)
143 1 {
144 2 Delay1ms(10);
145 2 while(!K2) //P3.0连续低电平时shang连续减一
146 2 {
147 3 if(shang!=60)
148 3 {
149 4 shang--;
150 4 display();
151 4 Delay1ms(200);
152 4 }
153 3 else
154 3 {
155 4 shang=100; //shang等于60时,shang=100
156 4 display();
157 4 Delay1ms(200);
158 4 }
159 3 }
160 2 }
161 1
162 1 if(K3==0) /// 最低水位限制为 1-20
163 1 {
164 2 Delay1ms(10);
165 2 while(!K3) //P3.0连续低电平时xia连续加1
166 2 {
167 3 if(xia!=20)
168 3 {
169 4 xia++;
170 4 display();
171 4 Delay1ms(200);
172 4 }
173 3 else
174 3 {
175 4 xia=0; //xia等于20时,day=1
176 4 display();
177 4 Delay1ms(200);
178 4 }
C51 COMPILER V7.06 111 03/19/2007 22:42:42 PAGE 4
179 3 }
180 2 }
181 1
182 1 if(K4==0)
183 1 {
184 2 Delay1ms(10);
185 2 while(!K4) //P3.0连续低电平时xia连续-1
186 2 {
187 3 if(xia!=1)
188 3 {
189 4 xia--;
190 4 display();
191 4 Delay1ms(200);
192 4 }
193 3 else
194 3 {
195 4 xia=200; //xia等于1时,xia=60
196 4 display();
197 4 Delay1ms(200);
198 4 }
199 3 }
200 2
201 2 }
202 1
203 1 if(K5==0)
204 1 {
205 2 Delay1ms(10);
206 2 while(!K5)
207 2 {
208 3
209 3 P2_1=1; //强制关机。
210 3
211 3 }
212 2 }
213 1
214 1
215 1 }
216
217 //////////////////////////////////////////////////////////////////
218 //////////////////////系统主程序/////////////////////////////////
219
220
221 void mian(void)
222 {
223 1 IE=0x86; // EA=1 允许外中断1 T0 中断
224 1 TMOD=0x01; //T0模式一
225 1 TH0=0x00; //定时初值
226 1 TL0=0x00; //大于65536以后又需要重新开始记数了 中断一次则标志位加一(65536US)再算时间时候标志位乘以6
-5536
227 1 IP=0x04;
228 1 Initial_LCD(); // 初始化函数调用
229 1 Initial_display();//
230 1 display();
231 1 while(1)
232 1 {
233 2 keyboard(); //调用键盘
234 2 display(); //
235 2 P0_6=1; //发送超声波
236 2 TR0=1; //启动定时器0 测量超声波发射到接收的时间
237 2 delay(5); // 延时,抗干扰 必须小于超声波回波时间
238 2 P0_6=0; //停止发送
239 2 if(juli<xia) //现在测量的距离小于设定距离 则启动电机抽水
C51 COMPILER V7.06 111 03/19/2007 22:42:42 PAGE 5
240 2 {
241 3 P2_0=1; // 启动电机抽水
242 3 }
243 2
244 2 if(juli>shang) //现在距离大于设定抽水上限 则停止抽水
245 2 {
246 3 P2_1=1; //停止 电机停止抽水
247 3 }
248 2 }
249 1 }
250
251 ////////////////////////////////////END/////////////////////////////////////////////
252
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 768 ----
CONSTANT SIZE = 13 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 18
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -