📄 chaoshengbo.lst
字号:
C51 COMPILER V7.50 CHAOSHENGBO 09/11/2008 20:26:15 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE CHAOSHENGBO
OBJECT MODULE PLACED IN chaoshengbo.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE chaoshengbo.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************/
2 //Program Name : 超声波测距仪
3 //Dedigned by : sc.Dai
4 //Date : 2007.4.10
5 /********************************************/
6 #include <reg52.h>
7 #include "intrins.h"
8 #include "12864LCDdriver.h"
9 #define uchar unsigned char
10 #define uint unsigned int
11 #define ulong unsigned long int
12 #define V=173
13 sbit CSOut=P1^0;
14 sbit Start=P1^4;
15
16 ulong TIME;
17 uchar DISTANCE;
18 uchar code discode[11]={'0','1','2','3','4','5','6','7','8','9',' '};
19 ulong data disnum[5];
20 bit data ReceiveOK=0;
21 bit data TOut;
22 bit data FLAG;
23
24 /*-----------------------------------------------------------*/
25 //延时函数
26 /*-----------------------------------------------------------*/
27 void delay2(uchar x)
28 {
29 1 uchar a,b;
30 1 for(a=0;a<x;a++)
31 1 for(b=0;b<255;b++);
32 1 }
33
34 /*-----------------------------------------------------------*/
35 //初始化
36 /*-----------------------------------------------------------*/
37 void init(void)
38 {
39 1 lcd_init();//LCD初始化,开机调用一次
40 1 TMOD=0x01;//T0定时器方式1
41 1 IT0=0;//INT0负边沿触发
42 1 IP=0x01;//INT0高优先级
43 1 EA=1;//开总中断
44 1 }
45
46 /*-----------------------------------------------------------*/
47 //超声波发射函数
48 /*-----------------------------------------------------------*/
49 void CCOut(void)
50 {
51 1 TR0=1;
52 1 //40KHz
53 1 CSOut=0;//1
54 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
55 1 _nop_();_nop_();
C51 COMPILER V7.50 CHAOSHENGBO 09/11/2008 20:26:15 PAGE 2
56 1 CSOut=1;//2
57 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
58 1 _nop_();
59 1 CSOut=0;//3
60 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
61 1 _nop_();_nop_();
62 1 CSOut=1;//4
63 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
64 1 _nop_();
65 1 CSOut=0;//5
66 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
67 1 _nop_();_nop_();
68 1 CSOut=1;//6
69 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
70 1 _nop_();
71 1 CSOut=0;//7
72 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
73 1 _nop_();_nop_();
74 1 CSOut=1;//8
75 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
76 1 _nop_();
77 1 CSOut=0;//9
78 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
79 1 _nop_();_nop_();
80 1 CSOut=1;//10
81 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
82 1 _nop_();
83 1 CSOut=0;//11
84 1 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
85 1 _nop_();_nop_();
86 1 CSOut=1;//12
87 1 }
88
89 /*-----------------------------------------------------------*/
90 //数据处理函数
91 /*-----------------------------------------------------------*/
92 void DataProcess(void)
93 {
94 1 ulong time=0;
95 1 TIME=TH0;
96 1 TIME=(TIME<<8)|TL0;
97 1 TIME*=173;//距离
98 1 TIME=TIME/10000;//单位:CM
99 1 disnum[0]=(uchar)TIME%10; //个位
100 1 disnum[4]=TIME/10;
101 1 disnum[1]=(uchar)disnum[4]%10;//十位
102 1 disnum[4]=disnum[4]/10;
103 1 disnum[2]=(uchar)disnum[4]%10;//百位
104 1 disnum[4]=disnum[4]/10;
105 1 disnum[3]=(uchar)disnum[4]%10;//千位
106 1 }
107 /*-----------------------------------------------------------*/
108 //超时处理函数 T0
109 /*-----------------------------------------------------------*/
110 void TimeOut(void) interrupt 1
111 {
112 1 TR0=0;
113 1 ET0=0;
114 1 EX0=0;
115 1 ReceiveOK=0;
116 1 TOut=1;
117 1 }
C51 COMPILER V7.50 CHAOSHENGBO 09/11/2008 20:26:15 PAGE 3
118
119 /*-----------------------------------------------------------*/
120 //超声波接收处理函数
121 /*-----------------------------------------------------------*/
122 void Receive(void) interrupt 0
123 {
124 1 TR0=0;
125 1 EX0=0;
126 1 ET0=0;
127 1 ReceiveOK=1; //设定接收成功标志
128 1 TOut=0; //清除超时标志
129 1 }
130
131
132 /*-----------------------------------------------------------*/
133 //测量结果显示函数
134 /*-----------------------------------------------------------*/
135 void LCDDisplay(void)
136 {
137 1 lcd_home();
138 1 lcd_writestr(0,0," 超声波测距仪 ");
139 1 lcd_writestr(1,0,"********");
140 1 lcd_writestr(2,0,"当前被测距离为:");
141 1 lcd_writestr(3,0," 厘米 ");
142 1 lcd_writechar(discode[disnum[3]],discode[disnum[2]],discode[disnum[1]],discode[disnum[0]]);
143 1 }
144
145 /*-----------------------------------------------------------*/
146 //出错提示函数
147 /*-----------------------------------------------------------*/
148 void ErrorDisplay(void)
149 {
150 1 lcd_home();
151 1 lcd_writestr(0,0," 超声波测距仪 ");
152 1 lcd_writestr(1,0,"********");
153 1 lcd_writestr(2,0,"未收到回波信号,");
154 1 lcd_writestr(3,0,"请缩短测量距离!");
155 1 }
156
157 /*-----------------------------------------------------------*/
158 //预备好提示函数
159 /*-----------------------------------------------------------*/
160 void ReadyDis(void)
161 {
162 1 lcd_home();
163 1 lcd_writestr(0,0," 超声波测距仪 ");
164 1 lcd_writestr(1,0,"********");
165 1 lcd_writestr(2,0," 已准备好 ");
166 1 lcd_writestr(3,0," 等待测量 ");
167 1 }
168
169 /*-----------------------------------------------------------*/
170 //主函数
171 /*-----------------------------------------------------------*/
172 void main(void)
173 {
174 1 uchar ct;
175 1 init(); //初始化
176 1 ReadyDis();
177 1 while(1)
178 1 {
179 2 if(Start==0)
C51 COMPILER V7.50 CHAOSHENGBO 09/11/2008 20:26:15 PAGE 4
180 2 {
181 3 delay2(50);
182 3 if(Start==0) FLAG=1;
183 3 }
184 2
185 2 if(FLAG==1) //启动测量一次
186 2 {
187 3 TH0=0x00;
188 3 TL0=0x00;
189 3 TIME=0x00;
190 3 ET0=1;
191 3 CCOut();
192 3 ct=100;
193 3 while(--ct);
194 3 EX0=1;
195 3 while(TOut==0)
196 3 {
197 4 if(ReceiveOK==1) //接收成功
198 4 {
199 5 DataProcess(); //数据处理
200 5 LCDDisplay(); //LCD显示
201 5 ReceiveOK=0; //清除接收成功标志
202 5 goto aa;
203 5 }
204 4 }
205 3 if(TOut==1)
206 3 {
207 4 TOut=0;
208 4 ErrorDisplay(); //超时,错误提示
209 4 }
210 3 aa: FLAG=0; //清除定时标志,等待下一次测量
211 3 }
212 2 }
213 1 }
214
215 /*------------------------------end of the program----------------------------------*/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1214 ----
CONSTANT SIZE = 146 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 25 10
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -