?? 222.lst
字號:
C51 COMPILER V8.02 222 09/06/2007 04:24:22 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 222
OBJECT MODULE PLACED IN 222.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 222.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /////////////////////////////////////
2 // COPYRIGHT RERVERED BY BUANDXIAHU //
3 /////////////////////////////////////
4
5 #include "c8051F020.h"
6 #include "intrins.h"
7 #include "CH452CMD.H" // 定義常用命令碼及外部子程序
8 #include "pin.h"
9 #include "math.h"
10 #include "key_display.h"
11
12
13 //定義端口
14 sbit LEDG = P3^4;
15 sbit BACK = P0^4;
16 sbit START = P0^5;
17 sbit SPOKER = P0^6;
18 sbit IN0 = P1^1;//左
19 sbit IN1 = P1^3;//中
20 sbit IN2 = P1^0;//右
21 //sbit IN3 = P1^5;//斜右
22 //sbit IN4 = P1^2;//斜左
23 sbit IN5 = P1^2;//正面左
24 sbit IN6 = P1^6;//正面右
25 sbit LASTS = P1^4;
26 sbit LASTB = P1^5;
27 sbit LASTF = P3^0;
28
29 //定義全局變量
30 ulong xdata data0[15]; //存儲AD進來的數再進行運算
31 ulong avge=0,avge0=0; //avge為每30次的AD平均值 avge0為一開始的標準值
32 uchar time1=0,time2=0,counter1=0,counter2=0,counter3; //定時器0,1的標志位
33 uchar a,bb,c,d,e,f,g,right,left; //各紅外傳感器的輸入值
34 uchar forward=0,black=0,keykey=0,backward=0,xianshi=1; //各段程序的標志位
35 uchar T0_OF=0,min=0,sec=0; //T0_OF時T0溢出次數 ,t_n=0
36 uchar stage_sec=0,stage_sec1=0,stage_clk_flag=0; //stage_clk_flag為1是階段計時標志位.不用stage_min
37 uchar transform=1; //1,2兩程序互換
38 uchar chazhi=5;
39
40 uchar wending=1,look=1;
41 ulong huang0,huang1;
42 uint wucha; //鍵盤控制差值
43 // Peripheral specific initialization functions,
44 // Called from the Init_Device() function
45
46
47 void Port_IO_Init()
48 {
49 1 // P0.0 - CEX0 (PCA), Open-Drain, Digital
50 1 // P0.1 - CEX1 (PCA), Open-Drain, Digital
51 1 XBR0 = 0x10; /*CEX0-->P0.0,CEX1-->P0.1*/
52 1 XBR2 = 0x40;
53 1 }
54
55 void Interrupts_Init()
C51 COMPILER V8.02 222 09/06/2007 04:24:22 PAGE 2
56 {
57 1
58 1 IE = 0x0A; //使能定時器1中斷//使能定時器0中斷
59 1 IP = 0x02; //使定時器1,0優先級高
60 1 EIE1 = 0x08; //使能PCA0中斷
61 1 EIE2 = 0x20; //使能外部鍵盤中斷
62 1 EIP2 = 0x20; //使外部鍵盤優先級高
63 1
64 1 }
65
66 // Initialization function for device,
67 // Call Init_Device() from your main program
68 void Init_Device(void)
69 {
70 1 Reset_Sources_Init();
71 1 ADC_Init();
72 1 PCA_Init();
73 1 Timer_Init();
74 1 Oscillator_Init();
75 1 Voltage_Reference_Init();
76 1 Port_IO_Init();
77 1 Interrupts_Init();
78 1 }
79 void speedchange(uchar duty,uchar i)
80 {
81 1 if(i==0) PCA0CPH0 =(uchar)((100-duty)*2.56); //把duty值轉換,賦值給控制占空比的寄存器
82 1 if(i==1) PCA0CPH1=(uchar)((100-duty)*2.56);
83 1 }
84 ulong pingjun (void)
85 { uchar i;
86 1 ulong avgad1=0,avgad=0,state=0;
87 1 state=AD_IN();
88 1 for(i=0;i<15;i++)
89 1 {
90 2 data0[i]=state;
91 2 avgad+=data0[i];
92 2 }
93 1 avgad=avgad/15;
94 1 for(i=0;i<15;i++)
95 1 {
96 2 data0[i]=state;
97 2 avgad1+=data0[i];
98 2 }
99 1 avgad1=avgad1/15;
100 1 avge=(avgad+avgad1)/4;
101 1 if(look==1) /*確定是否晃動太厲害*/
102 1 {
103 2 look=0;
104 2
105 2 huang1=huang0;
106 2 huang0=avge;
107 2 wucha=abs(huang1-huang0);
108 2
109 2 if(wucha>=7)
110 2 {
111 3 wending=0;
112 3 START=0;
113 3 LASTS=1;
114 3
115 3
116 3
117 3 }
C51 COMPILER V8.02 222 09/06/2007 04:24:22 PAGE 3
118 2 else wending=1;
119 2
120 2 }
121 1 return(avge);
122 1 }
123 void stage_clk_start()
124 {
125 1 CH452_Write(CH452_TWINKLE);
126 1 DELAY_1US;DELAY_1US;DELAY_1US;DELAY_1US;DELAY_1US;
127 1 stage_clk_flag=1;
128 1 stage_sec=0;
129 1 CH452_Write(CH452_DIG4);
130 1 CH452_Write(CH452_DIG5 | 16);
131 1 }
132 /****精確秒延時****/
133 void delay_s(uchar n)
134 { unsigned char i,j;
135 1 for(i=0;i<200;i++)
136 1 for(j=0;j<25*n;j++)
137 1 {
138 2 DELAY_10US;
139 2 DELAY_10US;
140 2 DELAY_10US;
141 2 DELAY_10US;
142 2 DELAY_10US;
143 2 DELAY_10US;
144 2 DELAY_10US;
145 2 DELAY_10US;
146 2 DELAY_10US;
147 2 DELAY_10US; //100us
148 2 }
149 1
150 1
151 1 }
152 void judgement (uchar modi,uchar modi1,uchar dem)
153 {
154 1 uchar i;
155 1 if((a&&bb==0&&c==0)||(a&&bb&&c==0))
156 1 { left=1;
157 2 right=0;
158 2 speedchange(modi1,1);
159 2 speedchange(modi,0);
160 2 delayms(dem);
161 2 }
162 1 else if((a==0&&bb==0&&c)||(a==0&&bb&&c))
163 1 {
164 2 left=0;
165 2 right=1;
166 2 speedchange(modi1,0);
167 2 speedchange(modi,1);
168 2 delayms(dem);
169 2 }
170 1 else if(a==0&&bb&&c==0)
171 1 {
172 2 left=0;
173 2 right=0;
174 2 speedchange(modi,0);
175 2 speedchange(modi,1);
176 2 delayms(dem);
177 2 }
178 1 else if(a&&bb&&c) //停止&&(d||e)
179 1 {
C51 COMPILER V8.02 222 09/06/2007 04:24:22 PAGE 4
180 2
181 2 START=0;
182 2 LASTS=1;
183 2 forward=0;
184 2 stage_clk_flag=0;//stage_clk_stop();顯示平衡后前進的時間
185 2 CH452_Write(CH452_DIG0|11);
186 2 CH452_Write(CH452_TWINKLE | 0x31);
187 2 for(i=5;i>0;i--)
188 2 {
189 3 CH452_Write(CH452_DIG7 | i);
190 3 SPOKER=1;
191 3 delay_s(1);
192 3 SPOKER=0;
193 3 delay_s(1);
194 3 }
195 2 CH452_Write(CH452_DIG7);
196 2 stage_clk_start();
197 2 CH452_Write((CH452_DIG0)|16);
198 2 if(transform==1)
199 2 {
200 3 forward=0;
201 3 black=0;
202 3 keykey=0;
203 3 xianshi=0;
204 3 backward=1;
205 3 }
206 2 }
207 1 else //if (a==0&&bb==0&&c==0)
208 1 {
209 2 if(left==1)
210 2 {
211 3 speedchange(modi1,0);
212 3 speedchange(modi,1); }
213 2 else if(right==1)
214 2 {
215 3 speedchange(modi,0);
216 3 speedchange(modi1,1);}
217 2 else
218 2 {
219 3 speedchange(modi,0);
220 3 speedchange(modi,1);}
221 2 delayms(dem);
222 2 }
223 1 }
224 void judgementback (uchar modi,uchar modi1,uchar dem,uchar i)
225 { if(i==1)
226 1 {if(stage_sec>30)
227 2 {
228 3 START=0;
229 3 LASTS=1;
230 3 stage_clk_flag=0;//stage_clk_stop();
231 3 CH452_Write(CH452_DIG0|10);
232 3 CH452_Write(CH452_TWINKLE | 0x31);
233 3 TR0=0;
234 3 forward=0;
235 3 black=0;
236 3 keykey=0;
237 3 backward=0;
238 3 xianshi=0;
239 3 }}
240 1 if(f==1&&g==0)
241 1 {
C51 COMPILER V8.02 222 09/06/2007 04:24:22 PAGE 5
242 2 speedchange(modi1,1);
243 2 speedchange(modi,0);
244 2
245 2 }
246 1 else if(f==0&&g==1)
247 1 {
248 2 speedchange(modi,1);
249 2 speedchange(modi1,0);
250 2
251 2 }
252 1 else //if(f==0&&g==0)
253 1 {
254 2 speedchange(modi,1);
255 2 speedchange(modi,0);
256 2 }
257 1
258 1 delayms(dem);
259 1 }
260
261
262 void main(void)
263 {
264 1 uchar chazhi1;
265 1 Init_Device();
266 1 CH452_Init(); /* CH452初始化 */
267 1 LEDG=0;
268 1 SPOKER=0;
269 1 forward=0,
270 1 black=0,
271 1 keykey=0,
272 1 backward=0,
273 1 xianshi=1;
274 1 IN0=1;
275 1 IN1=1;
276 1 IN2=1;
277 1 //IN3=1;
278 1 //IN4=1;
279 1 IN5=1;
280 1 IN6=1;
281 1 START=0;
282 1 LASTS=1;
283 1 LASTB=0;
284 1 LASTF=0;
285 1 time1=1;
286 1 time2=1;
287 1 counter1=170;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -