📄 改进程序.lst
字号:
C51 COMPILER V8.01 改絖程序 11/22/2006 20:12:51 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE 改絖程序
OBJECT MODULE PLACED IN 改进程序.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 改进程序.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include<intrins.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 #define ulong unsigned long
6
7 uint c=340;
8 ulong l,time;
9 char i=1,j=1,k=80,aa;
10 char t,tp=10,ts,tg,lb,ls,lg,lsf,fh,cb,cs,cg;
11 sbit RW=P2^1;
12 sbit RS=P2^0;
13 sbit E=P2^2;
14 sbit rece=P3^3;
15 sbit k2=P1^1;
16 sbit k1=P1^0;
17 sbit k3=P1^2;
18 sbit k4=P1^3;
19
20 sbit sg=P3^7;
21 sbit ctl=P3^5;
22 void delay(uint i) //延时程序//
23 {while(i--);
24 1 }
25
26 //************液晶显示***************//
27
28 void writercom(uchar q) //写命令//
29 {E=1;
30 1 RS=0;
31 1 RW=0;
32 1 P0=q;
33 1 E=0;
34 1 delay(20);
35 1 }
36
37 void writerdata(uchar o)//写数据//
38 {
39 1 E=1;
40 1 RS=1;
41 1 RW=0;
42 1 P0=o;
43 1 E=0;
44 1 delay(20);
45 1 }
46
47 void writer_d(uchar *u)//写数据串//
48 {while(*u)
49 1 writerdata(*u++);
50 1 }
51
52 void xsinit(void)
53 {writercom(0x01);
54 1 writercom(0x38);//使用8位数据,显示两行,使用5*7的字型//
55 1 writercom(0x0c);//显示设置,不显示光标,字符不显闪琐//
C51 COMPILER V8.01 改絖程序 11/22/2006 20:12:51 PAGE 2
56 1 writercom(0x06);//光标从左往右移,内容不移//
57 1 }
58
59 /**************温度输入程序***********************/
60
61 void inptt()
62 {while(1)
63 1 {if(k2==0){tp++;if(tp>=99)tp=99;}
64 2 delay(7000);
65 2 if(k1==0){tp--;if(tp<=(-30))tp=(-30);}
66 2 delay(7000);
67 2 t=tp;
68 2 if(t<0){fh=0x2d;t=~t+1;}
69 2 else{fh=0x20;}
70 2 ts=t/10;
71 2 tg=t%10;
72 2 writercom(0x80);
73 2 writer_d(" T:");
74 2 writerdata(fh);
75 2 writerdata(ts+0x30);
76 2 writerdata(tg+0x30);
77 2 writerdata(0xdf);
78 2 writer_d("C ");
79 2 writercom(0xba);
80 2 writer_d("Press K4 finish ");
81 2 if(k4==0)break;
82 2 }
83 1 }
84
85 //**********超声波发射程序**************************//
86
87 void sen() //超声波发射程序//
88 {uchar times=0;
89 1 TMOD=0x12; //定时器1工作在定时方式1,定时器0工作在定时方式2//
90 1 IE=0x84; //中断设置//
91 1 TH0=244;
92 1 TL0=244;
93 1 TR0=1;
94 1 TR1=1; //开定时器//
95 1 while(1)
96 1 {while(TF0==0);
97 2 sg=~sg;
98 2 times++; //翻转20次,发送10个脉冲信号的超声波//
99 2 TF0=0;
100 2 if(times==20)break;}
101 1 TR0=0;
102 1 times=0;
103 1 }
104
105 //**********外中断服务程序******************************//
106
107 rec()interrupt 2 using 2//接收中断程序//
108 {TR1=0; //关计数器//
109 1 ctl=0;
110 1 time=TH1*256+TL1; //算出t的值,t的单位为us//
111 1 l=time*c/2;
112 1 TH1=0;
113 1 TL1=0;
114 1 }
115
116 //************数据处理,显示结果***************//
117
C51 COMPILER V8.01 改絖程序 11/22/2006 20:12:51 PAGE 3
118 void dataxs()
119 {if(tp>=10)c=338+(tp-10)*0.6;
120 1 else c=338+(10-tp)*0.6;
121 1 cb=c/100;
122 1 cs=c%100/10;
123 1 cg=c%100%10;
124 1 lb=l/1000000;
125 1 ls=l%1000000/100000;
126 1 lg=l%1000000%100000/10000;
127 1
128 1 /******显示********/
129 1 writercom(0x80);
130 1 if(l<=130000)writer_d("too near! ");
131 1 else if(l>=5000000)writer_d("too long! ");
132 1 else {writer_d("L=");
133 2 writerdata(lb+0x30);
134 2 writerdata('.');
135 2 writerdata(ls+0x30);
136 2 writerdata(lg+0x30);
137 2 writer_d("m ");
138 2 writer_d("c=");
139 2 writerdata(cb+0x30);
140 2 writerdata(cs+0x30);
141 2 writerdata(cg+0x30);
142 2 writer_d("m/s ");
143 2 }
144 1 }
145
146 //****状态1,手动控制******************//
147
148 void unauto()
149 {while(i)
150 1 {while(k--)
151 2 {writercom(0xba);
152 3 writer_d("Press K4 measure");
153 3 if(k4==0||k3==0){i=0;break;}
154 3 delay(2000);}
155 2 k=20;
156 2 while(k--)
157 2 {writercom(0xba);
158 3 writer_d(" ");
159 3 if(k4==0||k3==0){i=0;break;}
160 3 delay(2000);}
161 2 k=20;
162 2 }
163 1 i=1;
164 1 ctl=0;
165 1 sen();//调超声波发射程序;
166 1 delay(50);
167 1 ctl=1;
168 1 }
169
170 //****状态2,实时监控******************//
171
172 void aut()
173 {writercom(0xba);
174 1 writer_d("real time measur");
175 1 ctl=0;
176 1 sen();
177 1 delay(50);
178 1 ctl=1;
179 1 }
C51 COMPILER V8.01 改絖程序 11/22/2006 20:12:51 PAGE 4
180
181 //*****状态选择************************//
182 ztxz()
183 {while(k3==0&&aa==0)
184 1 {while(1)
185 2 {if(k3==1)break;}
186 2 aa=1;
187 2 }
188 1 while(k3==0&&aa==1)
189 1 {while(1)
190 2 {if(k3==1)break;}
191 2 aa=0;
192 2 }
193 1 }
194 //********主程序*******************//
195
196 main()
197 {xsinit();
198 1 inptt();//温度输入//
199 1 while(1)
200 1 {while(!aa)
201 2 {unauto();
202 3 break;
203 3 }
204 2 while(aa)
205 2 {aut();
206 3 break;
207 3 }
208 2
209 2 while(k--)//等待回波//
210 2 {ztxz();//状态切换键判断
211 3 delay(2000);
212 3 }
213 2 k=20;
214 2 dataxs();
215 2 }
216 1 }
217
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 991 ----
CONSTANT SIZE = 127 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 26 3
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 + -