📄 section2.lst
字号:
C51 COMPILER V8.02 SECTION2 09/05/2007 17:54:13 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE SECTION2
OBJECT MODULE PLACED IN section2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE section2.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
28 //定义全局变量
29 ulong xdata data0[15];
30 ulong avge=0,avge0=0;
31 uchar time1=0,time2=0,counter1=0,counter2=0;
32 uchar a,bb,c,d,e,f,g,right,left;
33 uchar forward=0,black=0,keykey=0,backward=0,xianshi=1;
34 uchar T0_OF=0,min=0,sec=0; //T0_OF时T0溢出次数 ,t_n=0
35 uchar stage_sec=0,stage_clk_flag=0; //stage_clk_flag为1是阶段计时标志位.不用stage_min
36 uchar transform=1;
37 // Peripheral specific initialization functions,
38 // Called from the Init_Device() function
39
40
41 void Port_IO_Init()
42 {
43 1 // P0.0 - CEX0 (PCA), Open-Drain, Digital
44 1 // P0.1 - CEX1 (PCA), Open-Drain, Digital
45 1 XBR0 = 0x10; /*CEX0-->P0.0,CEX1-->P0.1*/
46 1 XBR2 = 0x40;
47 1 }
48
49 void Interrupts_Init()
50 {
51 1
52 1 IE = 0x0A; //使能定时器1中断//使能定时器0中断
53 1 IP = 0x02; //使定时器1,0优先级高
54 1 EIE1 = 0x08; //使能PCA0中断
55 1 EIE2 = 0x20; //使能外部键盘中断
C51 COMPILER V8.02 SECTION2 09/05/2007 17:54:13 PAGE 2
56 1 EIP2 = 0x20; //使外部键盘优先级高
57 1
58 1 }
59
60 // Initialization function for device,
61 // Call Init_Device() from your main program
62 void Init_Device(void)
63 {
64 1 Reset_Sources_Init();
65 1 ADC_Init();
66 1 PCA_Init();
67 1 Timer_Init();
68 1 Oscillator_Init();
69 1 Voltage_Reference_Init();
70 1 Port_IO_Init();
71 1 Interrupts_Init();
72 1 }
73 void speedchange(uchar duty,uchar i)
74 {
75 1 if(i==0) PCA0CPH0 =(uchar)((100-duty)*2.56); //把duty值转换,赋值给控制占空比的寄存器
76 1 if(i==1) PCA0CPH1=(uchar)((100-duty)*2.56);
77 1 }
78 ulong pingjun (void)
79 { uchar i;
80 1 ulong avgad1=0,avgad=0,state=0;
81 1 state=AD_IN();
82 1 for(i=0;i<15;i++)
83 1 {
84 2 data0[i]=state;
85 2 avgad+=data0[i];
86 2 }
87 1 avgad=avgad/15;
88 1 for(i=0;i<15;i++)
89 1 {
90 2 data0[i]=state;
91 2 avgad1+=data0[i];
92 2 }
93 1 avgad1=avgad1/15;
94 1 avge=(avgad+avgad1)/4;
95 1 return(avge);
96 1 }
97 void stage_clk_start()
98 {
99 1 CH452_Write(CH452_TWINKLE);
100 1 DELAY_1US;DELAY_1US;DELAY_1US;DELAY_1US;DELAY_1US;
101 1 stage_clk_flag=1;
102 1 stage_sec=0;
103 1 CH452_Write(CH452_DIG4);
104 1 CH452_Write(CH452_DIG5 | 16);
105 1 }
106 /****精确秒延时****/
107 void delay_s(uchar n)
108 { unsigned char i,j;
109 1 for(i=0;i<200;i++)
110 1 for(j=0;j<25*n;j++)
111 1 {
112 2 DELAY_10US;
113 2 DELAY_10US;
114 2 DELAY_10US;
115 2 DELAY_10US;
116 2 DELAY_10US;
117 2 DELAY_10US;
C51 COMPILER V8.02 SECTION2 09/05/2007 17:54:13 PAGE 3
118 2 DELAY_10US;
119 2 DELAY_10US;
120 2 DELAY_10US;
121 2 DELAY_10US; //100us
122 2 }
123 1
124 1
125 1 }
126 void judgement (uchar modi,uchar modi1,uchar dem)
127 {
128 1 uchar i;
129 1 if((a&&bb==0&&c==0)||(a&&bb&&c==0))
130 1 { left=1;
131 2 right=0;
132 2 speedchange(modi1,1);
133 2 speedchange(modi,0);
134 2 delayms(dem);
135 2 }
136 1 else if((a==0&&bb==0&&c)||(a==0&&bb&&c))
137 1 {
138 2 left=0;
139 2 right=1;
140 2 speedchange(modi1,0);
141 2 speedchange(modi,1);
142 2 delayms(dem);
143 2 }
144 1 else if(a==0&&bb&&c==0)
145 1 {
146 2 left=0;
147 2 right=0;
148 2 speedchange(modi,0);
149 2 speedchange(modi,1);
150 2 delayms(dem);
151 2 }
152 1 else if(a&&bb&&c) //停止&&(d||e)
153 1 {
154 2
155 2 START=0;
156 2 LASTS=1;
157 2 forward=0;
158 2 stage_clk_flag=0;//stage_clk_stop();显示平衡后前进的时间
159 2 CH452_Write(CH452_TWINKLE | 0x30);
160 2 CH452_Write(CH452_DIG0|11);
161 2 CH452_Write(CH452_TWINKLE | 0x01);
162 2 for(i=5;i>0;i--)
163 2 {
164 3 CH452_Write(CH452_DIG7 | i);
165 3 SPOKER=1;
166 3 delay_s(1);
167 3 SPOKER=0;
168 3 delay_s(1);
169 3 }
170 2 CH452_Write(CH452_DIG7);
171 2 stage_clk_start();
172 2 CH452_Write((CH452_DIG0)|16);
173 2 if(transform==1) backward=1;
174 2 }
175 1 else //if (a==0&&bb==0&&c==0)
176 1 {
177 2 if(left==1)
178 2 {
179 3 speedchange(modi1,0);
C51 COMPILER V8.02 SECTION2 09/05/2007 17:54:13 PAGE 4
180 3 speedchange(modi,1); }
181 2 else if(right==1)
182 2 {
183 3 speedchange(modi,0);
184 3 speedchange(modi1,1);}
185 2 else
186 2 {
187 3 speedchange(modi,0);
188 3 speedchange(modi,1);}
189 2 delayms(dem);
190 2 }
191 1 }
192 void judgementback (uchar modi,uchar modi1,uchar dem)
193 {
194 1 if(stage_sec>29)
195 1 {
196 2 START=0;
197 2 LASTS=1;
198 2 stage_clk_flag=0;//stage_clk_stop();
199 2 CH452_Write(CH452_TWINKLE | 0x30);
200 2 CH452_Write(CH452_DIG0|10);
201 2 CH452_Write(CH452_TWINKLE | 0x01);
202 2 TR0=0;
203 2
204 2 }
205 1 if(f==1&&g==0)
206 1 {
207 2 speedchange(modi1,1);
208 2 speedchange(modi,0);
209 2
210 2 }
211 1 else if(f==0&&g==1)
212 1 {
213 2 speedchange(modi,1);
214 2 speedchange(modi1,0);
215 2
216 2 }
217 1 else //if(f==0&&g==0)
218 1 {
219 2 speedchange(modi,1);
220 2 speedchange(modi,0);
221 2 }
222 1
223 1 delayms(dem);
224 1 }
225
226
227 void main(void)
228 {
229 1 uchar chazhi=4;
230 1 uchar chazhi1;
231 1 Init_Device();
232 1 CH452_Init(); /* CH452初始化 */
233 1 LEDG=0;
234 1 SPOKER=0;
235 1 IN0=1;
236 1 IN1=1;
237 1 IN2=1;
238 1 //IN3=1;
239 1 //IN4=1;
240 1 IN5=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -