?? checkdistance.lst
字號:
C51 COMPILER V8.08 CHECKDISTANCE 11/20/2008 13:40:14 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE CHECKDISTANCE
OBJECT MODULE PLACED IN checkdistance.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE checkdistance.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 ** 設(shè)計者:蒙林通 ***
3 ** 華信通電子公司 **
4 ** 廣東工業(yè)大學(xué) *****
5 ** 設(shè)計時間:2008/08/15 *
6 ** ***歷時:2天半 ****
7 */
8 #include "reg52.h"
9 #include "intrins.h"
10 #include "main.h"
11 #define uchar unsigned char
12 #define uint unsigned int
13 #define sd=0.334
14 unsigned int distance,tem;
15 uchar data tdisdata[4];
16 uchar data disdata[5];
17 uint tvalue,tempkey;//溫度值
18 uchar tflag;//溫度正負(fù)標(biāo)志
19 sbit en=P2^5;
20 sbit rs=P2^7;
21 sbit rw=P2^6;
22 sbit D0=P1^0;
23 sbit D1=P1^1;
24 sbit D2=P1^2;
25 sbit D3=P1^3;
26 sbit D4=P1^4;
27 sbit deep=P3^6;
28 sbit DQ=P3^5;
29 sbit LED1=P1^5;
30 sbit LED2=P1^6;
31 sbit move=P1^7;
32 sbit mode_button=P3^4;
33 sbit operation_button=P3^5;
34 uchar code table[]=">>溫度: 0000 C";
35 uchar code table2[]="=>距離:00000mm";
36 uchar code warn1[7][14]={"->請注意左方!!","->請注意右方!!","->請注意后方!!","->左后輪泥坑!!","->右后輪泥坑
-!!","->左后輪石頭!!","->右后輪石頭!!"};
37 uchar code warn2[]="->車距勻安全!!";
38 uchar code welcome[]=" 提示系統(tǒng) ";
39 uchar code direction[5][4]={"左距","右距","后距","左輪","右輪"} ;
40 uint time,t,kk;
41 uchar bai,shi,ge,flag,i,j,temp;
42 unsigned long int shu=0,v;
43 unsigned int back=0;
44 /******************************
45 *延時子程序
46 ******************************/
47 void delay(uint z)
48 {
49 1 uint x,y;
50 1 for(y=110;y>0;y--)
51 1 for(x=z;x>0;x--);
52 1 }
53
54 /****************************
C51 COMPILER V8.08 CHECKDISTANCE 11/20/2008 13:40:14 PAGE 2
55 *寫指令
56 ****************************/
57 void write_com(uchar com)
58 {
59 1 rs=0;
60 1 rw=0;
61 1 P0=com;
62 1 delay(5);
63 1 en=1;
64 1 delay(5);
65 1 en=0;
66 1
67 1 }
68 /************************
69 *寫數(shù)據(jù)
70 ************************/
71 void write_date(uchar date)
72 {
73 1 rs=1;
74 1 rw=0;
75 1 P0=date;
76 1 delay(5);
77 1 en=1;
78 1 delay(5);
79 1 en=0;
80 1 }
81
82 //******************************18B20溫度傳感程序***************************//
83
84 void delay1ms(unsigned int ms)//延時1毫秒(不夠精確的)
85 {unsigned int i,j;
86 1 for(i=0;i<ms;i++)
87 1 for(j=0;j<100;j++);
88 1 }
89
90
91 /******************************ds1820程序***************************************/
92 void delay_18B20(unsigned int i)//延時1微秒
93 {
94 1 while(i--);
95 1 }
96 void ds1820rst()/*ds1820復(fù)位*/
97 { unsigned char x=0;
98 1 DQ = 1; //DQ復(fù)位
99 1 delay_18B20(4); //延時
100 1 DQ = 0; //DQ拉低
101 1 delay_18B20(100); //精確延時大于480us
102 1 DQ = 1; //拉高
103 1 delay_18B20(40);
104 1 }
105
106 uchar ds1820rd()/*讀數(shù)據(jù)*/
107 { unsigned char i=0;
108 1 unsigned char dat = 0;
109 1 for (i=8;i>0;i--)
110 1 { DQ = 0; //給脈沖信號
111 2 dat>>=1;
112 2 DQ = 1; //給脈沖信號
113 2 if(DQ)
114 2 dat|=0x80;
115 2 delay_18B20(10);
116 2 }
C51 COMPILER V8.08 CHECKDISTANCE 11/20/2008 13:40:14 PAGE 3
117 1 return(dat);
118 1 }
119 void ds1820wr(uchar wdata)/*寫數(shù)據(jù)*/
120 {unsigned char i=0;
121 1 for (i=8; i>0; i--)
122 1 { DQ = 0;
123 2 DQ = wdata&0x01;
124 2 delay_18B20(10);
125 2 DQ = 1;
126 2 wdata>>=1;
127 2 }
128 1 }
129 //******************讀溫度*********************/
130
131 read_temp()/*讀取溫度值并轉(zhuǎn)換*/
132 {
133 1 uchar a,b;
134 1 ds1820rst();
135 1 ds1820wr(0xcc);//*跳過讀序列號*/
136 1 ds1820wr(0x44);//*啟動溫度轉(zhuǎn)換*/
137 1 ds1820rst();
138 1 ds1820wr(0xcc);//*跳過讀序列號*/
139 1 ds1820wr(0xbe);//*讀取溫度*/
140 1 a=ds1820rd();
141 1 b=ds1820rd();
142 1 tvalue=b;
143 1 tvalue<<=8;
144 1 tvalue=tvalue|a;
145 1 if(tvalue<0x0fff)
146 1 tflag=0;
147 1 else
148 1 {tvalue=~tvalue+1;
149 2 tflag=1;
150 2 }
151 1 tvalue=tvalue*(0.625);//溫度值擴(kuò)大10倍,精確到1位小數(shù)
152 1 return(tvalue);
153 1 }
154 /*********************溫度顯示函數(shù)**********************/
155
156 void ds1820disp()//溫度值顯示
157
158 { uchar flagdat;
159 1 disdata[0]=tvalue/1000+0x30;//百位數(shù)
160 1 disdata[1]=tvalue%1000/100+0x30;//十位數(shù)
161 1 disdata[2]=tvalue%100/10+0x30;//個位數(shù)
162 1 disdata[3]=tvalue%10+0x30;//小數(shù)位
163 1
164 1 if(tflag==0)
165 1 flagdat=0x20;//正溫度不顯示符號
166 1 else
167 1 flagdat=0x2d;//負(fù)溫度顯示負(fù)號:-
168 1 if(disdata[0]==0x30)
169 1 {disdata[0]=0x20;//如果百位為0,不顯示
170 2 if(disdata[1]==0x30)
171 2 {disdata[1]=0x20;//如果百位為0,十位為0也不顯示
172 3 }
173 2 }
174 1
175 1 write_com(0x90+4);
176 1 //write_date(flagdat);//顯示符號位
177 1 write_date(disdata[0]);//顯示百位
178 1 write_date(disdata[1]);//顯示十位
C51 COMPILER V8.08 CHECKDISTANCE 11/20/2008 13:40:14 PAGE 4
179 1 write_date(disdata[2]);//顯示個位
180 1 write_date(0x2e);//顯示小數(shù)點
181 1 write_date(disdata[3]);//顯示小數(shù)位
182 1 }
183
184 /////////////////**********************超聲波程序**********/////////////
185 /************************
186 *距離數(shù)值動態(tài)顯示
187 *************************/
188 void dis_distance(uint add,uint date)
189 {
190 1 uchar mi,fen,li,bai,shi,ge;
191 1 mi=date/100000;
192 1 fen=date%100000/10000;
193 1 li=date%10000/1000;
194 1 bai=date%1000/100;
195 1 shi=date%100/10;
196 1 ge=date%10;
197 1 write_com(0x88+add);
198 1 write_date(0x30+mi);
199 1 write_date(0x30+fen);
200 1 write_date(0x30+li);
201 1 write_date(0x30+bai);
202 1 write_date(0x30+shi);
203 1 write_date(0x30+ge);
204 1 date=0;
205 1 }
206
207 //**************提示注意函婁**************//
208 dis_warn(char num[])
209 { int k;
210 1 write_com(0x98);
211 1 for(k=0;k<14;k++)
212 1 {
213 2 write_date(num[k]);
214 2 }
215 1 }
216 ///////////////////////////////////////////
217 dis_direction(char num[])
218 { int k;
219 1 write_com(0x88+1);
220 1 for(k=0;k<4;k++)
221 1 {
222 2 write_date(num[k]);
223 2 }
224 1 }
225 /***************************
226 *初始化程
227 ***************************/
228 void init(void)
229 {
230 1
231 1 write_com(0x01); //清除顯示
232 1 write_com(0x02); //地址歸零
233 1 write_com(0x06); //進(jìn)入設(shè)定點
234 1 write_com(0x0c); //顯示開關(guān)設(shè)置
235 1 write_com(0x30); //功能設(shè)定
236 1 write_com(0x80); //在第一行開始輸入
237 1 for(i=0;i<14;i++) //顯示初始化
238 1 {
239 2 write_date(welcome[i]);
240 2
C51 COMPILER V8.08 CHECKDISTANCE 11/20/2008 13:40:14 PAGE 5
241 2 }
242 1
243 1 write_com(0x90); //在第一行開始輸入
244 1 for(i=0;i<14;i++) //顯示初始化
245 1 {
246 2 write_date(table[i]);
247 2
248 2 }
249 1 write_com(0x88); //在第一行開始輸入
250 1 for(i=0;i<14;i++) //顯示初始化
251 1 {
252 2 write_date(table2[i]);
253 2
254 2 }
255 1 TMOD=0X01; //設(shè)定定時器為工作方式1
256 1 TH0=0X00;
257 1 TL0=0X00; //裝初始值
258 1 EA=1; //開總中斷
259 1 IT1=1; //設(shè)定外部中斷為下降沿觸發(fā)方式
260 1 }
261 /********************************
262 *延時方法發(fā)送方波
263 ********************************/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -