📄 reda.lst
字号:
C51 COMPILER V6.02 REDA 06/10/2006 16:33:08 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE REDA
OBJECT MODULE PLACED IN E:\STUDY\WORKS\CAR\REDA.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE E:\STUDY\WORKS\CAR\REDA.C DB SB OE
stmt level source
1 #include <intrins.h>//这个头文件中有_nop_();
2 #include <reg52.h>
3 #include<stdio.h>
4 unsigned char speedleft,speedright;//右左转速度
5 unsigned char h,l,flag,time; //高速 低速 小车运行标志 延时时间
6 int tim=0;//------调脉宽
7 int j=0x08;//避障延时
8 sbit kk=P1^6;//键盘口
9 sbit tr1=P3^4;//避障一号管发射
10 sbit tr2=P3^6;//避障二号管发射
11 sbit aa=P3^4;
12 sbit bb=P3^5;
13 sbit cc=P3^6;
14 sbit dd=P3^7;
15 int key;//存放键值
16 void Start(void);//键盘
17 void Run(void);//探测
18 void Forward(char speed);//前进
19 void Reverse(char speed,int dely,bit r);//speed--速度,dely--时间,r--左(右)
20 void Turnright(void);//右拐
21 void Turnleft(void);//左拐
22 void delay(unsigned int time);//--延时
23 void stop(void);//---停止
24 void bi_zhang(void);
25 void main(void)
26 {
27 1 P1=0x40;//------------
28 1 P3=0xff;
29 1 h=20;
30 1 l=40;
31 1 flag=0;
32 1 time=50;
33 1 EA=1; ET0=1;//-----开中断-----------
34 1 TMOD=0x02;
35 1 TH0=0x30;
36 1 TL0=0x30;
37 1 TR0=0;
38 1 while(1)
39 1 {
40 2 Start();
41 2 key=1;
42 2 while(key)
43 2 {
44 3 TR0=1;
45 3 Run(); //探测&&处理
46 3 // Start();
47 3 }
48 2 }
49 1 }
50 //-----------------------------判断键盘程序----------------------------------------
51 void Start(void)
52 {
53 1 if(kk==0)
54 1 {
55 2 delay(200);
C51 COMPILER V6.02 REDA 06/10/2006 16:33:08 PAGE 2
56 2 if(kk==0)
57 2 {
58 3 while(kk==0);
59 3 key++;
60 3 }
61 2 if(key==3)
62 2 {key=0;}
63 2 }
64 1 }
65 //---------------------------探测&&处理程序--------------------------------------
66 void Run(void)
67 {
68 1 char sensors;
69 1 while(key==1)
70 1 {
71 2 sensors = (P3&=0x3f); //P3^3~P3^0接四个对管
72 2 if((sensors&0x01)==0) { //P3^0为右边对管(当收不到返回光时,P3.0收到L)
73 3 Turnright();
74 3 flag = 1; }
75 2 else if((sensors & 0x08)==0) { //P3^3为左边对管(当收不到返回光时,P3.3收到L)
76 3 Turnleft();
77 3 flag = 2; }
78 2 else if(sensors&0x09) { // P3^1 P3^2为黑线上方对管(当两个管都收到 L 并
79 3 Forward(h); // 且左右两边对管收到 H 时高速行驶)
80 3 flag = 0; }
81 2
82 2 else if(((sensors==0x0b==0)||(sensors==0x0d))&&(flag==0))
83 2 Forward(l);// 如果前面的对管下没有黑线 ( P3^2 )
84 2 // 或后面的对管下没有黑线 ( P3^1 )
85 2 // 并且在高速时-------减速!!
86 2 else if((sensors==0x0f|sensors==0x00))
87 2 Forward(l);
88 2 //Start();
89 2 }
90 1 while(key==2) //进入避障模式
91 1 {
92 2 bi_zhang();
93 2 Start();
94 2 }
95 1 }
96 //--------------------------------前进程序---------------------------------
97 void Forward(char speed)
98 {
99 1 P1=0x64;
100 1 speedright = speed+5;
101 1 speedleft = speed;
102 1 delay(50);
103 1 }
104 //--------------------------------右转程序---------------------------------
105 void Turnleft(void)
106 {
107 1 P1=0x68;
108 1 speedright = l+5;
109 1 speedleft = l+10;
110 1 delay(50);
111 1 }
112 //--------------------------------左转程序----------------------------------
113 void Turnright(void)
114 {
115 1 P1=0x54;
116 1 speedright = l+10;
117 1 speedleft = l-30;
C51 COMPILER V6.02 REDA 06/10/2006 16:33:08 PAGE 3
118 1 delay(50);
119 1 }
120 //--------------------------------后退程序---------------(未用)------------
121 void Reverse(char speed,int dely,bit r)
122 {
123 1 int x,y;
124 1 if(r)
125 1 {
126 2 P1=0x17;
127 2 speedright = speed+5;
128 2 speedleft = speed;//-15;
129 2 }
130 1 else
131 1 {
132 2 P1=0x2b;
133 2 speedright= speed-25;
134 2 speedleft= speed+5;
135 2 }
136 1 delay(dely);
137 1 x=y=j;
138 1 while(j--);
139 1 while(y--);P3|=0x30;
140 1 }
141 //---------------------------------停止---------------------------------------
142 void stop(void)
143 {
144 1 P1&=0xfc;
145 1 P1&=0xfc;
146 1 }
147 void bi_zhang(void)
148 {
149 1 int o=10;
150 1 aa=0;
151 1 bb=1;
152 1 P1=0x00;
153 1 while(o--)
154 1 {
155 2 bb=1;dd=1;
156 2 aa=!aa;cc=!cc;
157 2 _nop_();_nop_();
158 2 _nop_();_nop_();
159 2 _nop_();_nop_();
160 2 _nop_();_nop_();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -