📄 finally.lst
字号:
C51 COMPILER V8.02 FINALLY 09/06/2007 19:43:26 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE FINALLY
OBJECT MODULE PLACED IN finally.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE finally.c BROWSE DEBUG OBJECTEXTEND
line level source
1 ///////////////////////////////////////////
2 // COPYRIGHT RESERVED BY DU ///
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 sbit LEDG = P3^4;
14 sbit BACK = P0^4;
15 sbit START = P0^5;
16 sbit SPOKER = P0^6;
17 sbit IN0 = P1^1;//左
18 sbit IN1 = P1^3;//中
19 sbit IN2 = P1^0;//右
20 sbit IN5 = P1^2;//正面左
21 sbit IN6 = P1^6;//正面右
22 sbit LASTS = P1^4;
23 sbit LASTB = P1^5;
24 sbit LASTF = P3^0;
25 //sbit IN3 = P1^5;//斜右
26 //sbit IN4 = P1^2;//斜左
27
28
29 //定义全局变量
30 ulong xdata data0[15]; //存储AD进来的数再进行运算
31 ulong avge=0,avge0=0; //avge为每30次的AD平均值 avge0为一开始的标准值
32 uchar time1=0,time2=0,counter2=0; //定时器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,time=27; //键盘控制差值
39 uint counter1=0;
40 uchar move_or_not=1;
41 /////////////////////////////////////////////////////
42 /////////////调用的函数/////////////////////////////
43 ////////////////////////////////////////////////////
44 void Port_IO_Init()
45 {
46 1 // P0.0 - CEX0 (PCA), Open-Drain, Digital
47 1 // P0.1 - CEX1 (PCA), Open-Drain, Digital
48 1 XBR0 = 0x10; /*CEX0-->P0.0,CEX1-->P0.1*/
49 1 XBR2 = 0x40;
50 1 }
51
52 void Interrupts_Init()
53 {
54 1
55 1 IE = 0x0A; //使能定时器1中断//使能定时器0中断
C51 COMPILER V8.02 FINALLY 09/06/2007 19:43:26 PAGE 2
56 1 IP = 0x02; //使定时器1,0优先级高
57 1 EIE1 = 0x08; //使能PCA0中断
58 1 EIE2 = 0x20; //使能外部键盘中断
59 1 EIP2 = 0x20; //使外部键盘优先级高
60 1
61 1 }
62
63 void Init_Device(void)
64 {
65 1 Reset_Sources_Init();
66 1 ADC_Init();
67 1 PCA_Init();
68 1 Timer_Init();
69 1 Oscillator_Init();
70 1 Voltage_Reference_Init();
71 1 Port_IO_Init();
72 1 Interrupts_Init();
73 1 }
74 void speedchange(uchar duty,uchar i)
75 {
76 1 if(i==0) PCA0CPH0 =(uchar)((100-duty)*2.56); //把duty值转换,赋值给控制占空比的寄存器
77 1 if(i==1) PCA0CPH1=(uchar)((100-duty)*2.56);
78 1 }
79 ulong pingjun (void)
80 {
81 1 uchar i;
82 1 ulong avgad1=0,avgad=0,state=0;
83 1 state=AD_IN();
84 1 for(i=0;i<15;i++)
85 1 {
86 2 data0[i]=state;
87 2 avgad+=data0[i];
88 2 }
89 1 avgad=avgad/15;
90 1 for(i=0;i<15;i++)
91 1 {
92 2 data0[i]=state;
93 2 avgad1+=data0[i];
94 2 }
95 1 avgad1=avgad1/15;
96 1 avge=(avgad+avgad1)/4;
97 1 return(avge);
98 1 }
99 void stage_clk_start()
100 {
101 1 CH452_Write(CH452_TWINKLE);
102 1 DELAY_1US;DELAY_1US;DELAY_1US;DELAY_1US;DELAY_1US;
103 1 stage_clk_flag=1;
104 1 stage_sec=0;
105 1 CH452_Write(CH452_DIG4);
106 1 CH452_Write(CH452_DIG5 | 16);
107 1 }
108 void delay_s(uchar n) //精确秒延时
109 {
110 1 unsigned char i,j;
111 1 for(i=0;i<200;i++)
112 1 for(j=0;j<25*n;j++)
113 1 {
114 2 DELAY_10US;
115 2 DELAY_10US;
116 2 DELAY_10US;
117 2 DELAY_10US;
C51 COMPILER V8.02 FINALLY 09/06/2007 19:43:26 PAGE 3
118 2 DELAY_10US;
119 2 DELAY_10US;
120 2 DELAY_10US;
121 2 DELAY_10US;
122 2 DELAY_10US;
123 2 DELAY_10US; //100us
124 2 }
125 1
126 1 }
127 void judgement (uchar modi,uchar modi1,uchar dem)
128 {
129 1 uchar i;
130 1 if((a&&bb==0&&c==0)||(a&&bb&&c==0))
131 1 {
132 2 left=1;
133 2 right=0;
134 2 speedchange(modi1,1);
135 2 speedchange(modi,0);
136 2 delayms(2*dem);
137 2 }
138 1 else if((a==0&&bb==0&&c)||(a==0&&bb&&c))
139 1 {
140 2 left=0;
141 2 right=1;
142 2 speedchange(modi1,0);
143 2 speedchange(modi,1);
144 2 delayms(2*dem);
145 2 }
146 1 else if(a==0&&bb&&c==0)
147 1 {
148 2 left=0;
149 2 right=0;
150 2 speedchange(modi+3,0);
151 2 speedchange(modi,1);
152 2 delayms(dem);
153 2 }
154 1 else if(a&&bb&&c) //停止&&(d||e)
155 1 {
156 2
157 2 START=0;
158 2 LASTS=1;
159 2 forward=0;
160 2 stage_clk_flag=0;//stage_clk_stop();显示平衡后前进的时间
161 2 CH452_Write(CH452_DIG0|11);
162 2 CH452_Write(CH452_TWINKLE | 0x31);
163 2 for(i=5;i>0;i--)
164 2 {
165 3 CH452_Write(CH452_DIG7 | i);
166 3 SPOKER=1;
167 3 delay_s(1);
168 3 SPOKER=0;
169 3 delay_s(1);
170 3 }
171 2 CH452_Write(CH452_DIG7);
172 2 stage_clk_start();
173 2 CH452_Write((CH452_DIG0)|16);
174 2 if(transform==1)
175 2 {
176 3 forward=0;
177 3 black=0;
178 3 keykey=0;
179 3 xianshi=0;
C51 COMPILER V8.02 FINALLY 09/06/2007 19:43:26 PAGE 4
180 3 backward=1;
181 3 }
182 2 }
183 1 else
184 1 {
185 2 if(left==1)
186 2 {
187 3 speedchange(modi1,0);
188 3 speedchange(modi,1);
189 3 delayms(2*dem);}
190 2 else if(right==1)
191 2 {
192 3 speedchange(modi,0);
193 3 speedchange(modi1,1);
194 3 delayms(2*dem);}
195 2 else
196 2 {
197 3 speedchange(modi+3,0);
198 3 speedchange(modi,1);
199 3 delayms(dem); }
200 2 }
201 1
202 1 }
203 void judgementback (uchar modi,uchar modi1,uchar dem,uchar i)
204 {
205 1 if(i==1)
206 1 {
207 2 if(stage_sec>time)
208 2 {
209 3 START=0;
210 3 LASTS=1;
211 3 stage_clk_flag=0;//stage_clk_stop();
212 3 CH452_Write(CH452_DIG0|10);
213 3 CH452_Write(CH452_TWINKLE | 0x31);
214 3 TR0=0;
215 3 forward=0;
216 3 black=0;
217 3 keykey=0;
218 3 backward=0;
219 3 xianshi=0;
220 3 }
221 2 }
222 1 if(f==1&&g==0)
223 1 {
224 2 speedchange(modi1,1);
225 2 speedchange(modi,0);
226 2
227 2 }
228 1 else if(f==0&&g==1)
229 1 {
230 2 speedchange(modi,1);
231 2 speedchange(modi1,0);
232 2
233 2 }
234 1 else //if(f==0&&g==0)
235 1 {
236 2 speedchange(modi,1);
237 2 speedchange(modi+3,0);
238 2 }
239 1 delayms(dem);
240 1
241 1 }
C51 COMPILER V8.02 FINALLY 09/06/2007 19:43:26 PAGE 5
242
243
244 /////////////////////////////////////////////////
245 /////////////主函数/////////////////////////////
246 ///////////////////////////////////////////////
247 void main(void)
248 {
249 1 uchar chazhi1;
250 1 Init_Device();
251 1 CH452_Init(); /* CH452初始化 */
252 1 LEDG=0;
253 1 SPOKER=0;
254 1 forward=0,
255 1 black=0,
256 1 keykey=0,
257 1 backward=0,
258 1 xianshi=1;
259 1 IN0=1;
260 1 IN1=1;
261 1 IN2=1;
262 1 //IN3=1;
263 1 //IN4=1;
264 1 IN5=1;
265 1 IN6=1;
266 1 START=0;
267 1 LASTS=1;
268 1 LASTB=0;
269 1 LASTF=0;
270 1 time1=1;
271 1 time2=1;
272 1 counter1=170;
273 1 counter2=50;
274 1 chazhi=3;
275 1 time=27;
276 1 EA=1;
277 1 while(1)
278 1 {
279 2 LEDG=~LEDG;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -