📄 main.lst
字号:
C51 COMPILER V6.12 MAIN 09/06/2007 16:30:02 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN E:\比赛\小车程序\MAIN.OBJ
COMPILER INVOKED BY: C:\COMP51\BIN\C51.EXE E:\比赛\小车程序\MAIN.C DB SB OE
stmt level source
1 /***************************************
2 *电动车跷跷板
3 *修改时间:2007-9-6 13:56
4 *
5 ***************************************/
6
7 #include<stdio.h>
8 #include<reg52.h>
9 #include"tdp.h"
10 #include"1602.h"
11 #include "math.h"
12 #include "ADC0832.H"
13 #define DELAY(t) Alarm=t; while(Alarm!=0)
14
15 /***************变量声明**************/
16 char Speed=0; //小车速度,-127<=Speed<=127
17 bit DispFlag=1;
18 bit TimerRun=0;
19 uint Timer=0;
20 uchar Alarm=0;
21 uint ForwardTime=0;
22 uint BackTime=0;
23 //uchar ADC_Value=0;
24 char Err=0;
25 char dErr=0;
26 char BuzzerCnt=0;
27 bit CY_Flag=0;
28 /*************************************************
29 *定时0中断
30 *功能:将Speed转为PWM输出,有自动寻黑带功能
31 **************************************************/
32 void t0_int(void) interrupt 1
33 {
34 1 static bit PWM=0;
35 1 PWM=!PWM;
36 1 TH0= PWM ? ~cabs(Speed) : cabs(Speed);
37 1 TH0|=0x80; //7-bit PWM
38 1 if(Speed==0) PWM=0;
39 1 if(Speed>0)
40 1 {
41 2 L293D_IN1=1;
42 2 L293D_IN2=0;
43 2 L293D_IN3=1;
44 2 L293D_IN4=0;
45 2 L293D_EN1=PWM & !LED_LF;
46 2 L293D_EN2=PWM & !LED_RF;
47 2 }
48 1 else
49 1 {
50 2 L293D_IN1=0;
51 2 L293D_IN2=1;
52 2 L293D_IN3=0;
53 2 L293D_IN4=1;
54 2 L293D_EN1=PWM & !LED_LB;
55 2 L293D_EN2=PWM & !LED_RB;
C51 COMPILER V6.12 MAIN 09/06/2007 16:30:02 PAGE 2
56 2 }
57 1 }
58 /*************************
59 *定时1中断
60 *功能:计时
61 *************************/
62 void t1_int(void) interrupt 3
63 {
64 1 static char t=0,bt=0;
65 1 TL1=(65536-50000)+6;
66 1 TH1=(65536-50000)>>8;
67 1 if(TimerRun)
68 1 {
69 2 if(++t==20)
70 2 {
71 3 t=0;
72 3 Timer++;
73 3 DispFlag=1;
74 3 }
75 2 }
76 1
77 1 if(Alarm!=0) Alarm--;
78 1
79 1 if(BuzzerCnt==0){ bt=0;BuzzerPort=1;}
80 1 else
81 1 {
82 2 if(++bt==20){bt=0;BuzzerCnt--;}
83 2 BuzzerPort = bt<10;
84 2 }
85 1
86 1 CaiYang();
87 1 }
88 /***************************
89 *初始化函数
90 ***************************/
91 void Initial(void)
92 {
93 1 TMOD=0x11;
94 1 TH0=0;
95 1 TR0=1;
96 1 TR1=1;
97 1 ET0=1;
98 1 ET1=1;
99 1 PT0=1;
100 1 EA=1;
101 1 }
102 /****************************
103 *主函数
104 ****************************/
105 main()
106 {
107 1 InitLCD();
108 1 Initial();
109 1 Puts(" Ready");
110 1 if(!KeyBasic)
111 1 {
112 2 while(1)
113 2 {char buf[16];
114 3 sprintf(buf,"ADC=%-8d",(int)Err);
115 3 Gotoxy(0,0);
116 3 Puts(buf);
117 3 }
C51 COMPILER V6.12 MAIN 09/06/2007 16:30:02 PAGE 3
118 2 }
119 1 while(1)
120 1 {
121 2 if(!KeyBasic) BasicFunc();
122 2 if(!KeyExtend) ExtendFunc();
123 2 }
124 1 }
125 /***************************
126 *基本功能执行函数
127 ***************************/
128 void BasicFunc(void)
129 {
130 1 char time[2]={0,0};
131 1 CLRLCD;
132 1 Timer=0;
133 1 DELAY(20); //delay 1s
134 1 TimerRun=1; //启动计时器
135 1 Speed=127; //启动小车
136 1 while(1)
137 1 {
138 2 while(!LED_LF | !LED_RF) //未到达B端
139 2 {
140 3 if(!DispFlag) continue;
141 3 time[0]=Timer;
142 3 Disp(0,time);
143 3 }
144 2 Speed=0;
145 2 Bell(5,1);
146 2 Timer=0;
147 2 Speed=-127; //倒车
148 2 while(!LED_LB | !LED_RB) //未到达A端
149 2 {
150 3 if(!DispFlag) continue;
151 3 time[1]=Timer;
152 3 Disp(0,time);
153 3 }
154 2 Speed=0;
155 2 return ;
156 2 }
157 1 }
158 /***************************
159 *扩展功能执行函数
160 ***************************/
161 void ExtendFunc(void)
162 {
163 1 bit pingheng=0;
164 1 CLRLCD;
165 1 Timer=0;
166 1 Speed=0;
167 1 DELAY(20);
168 1 TimerRun=1;
169 1 while(1)
170 1 {
171 2 if(CY_Flag)
172 2 {
173 3 CY_Flag=0;
174 3 FuzzyCtrl();
175 3 }
176 2 if(DispFlag) Disp(1,(char*)&Timer);
177 2 if( cabs(Err)>25 ) Alarm=60;
178 2 if(!pingheng && Alarm==0)
179 2 {
C51 COMPILER V6.12 MAIN 09/06/2007 16:30:02 PAGE 4
180 3 Speed=0;
181 3 TimerRun=0;
182 3 pingheng=1;
183 3 Bell(5,1);
184 3 break;
185 3 }
186 2 }
187 1 return ;
188 1 }
189 //
190 void Disp(char ID,char *p)
191 {
192 1 char data buf[16];
193 1 DispFlag=0;
194 1 if(ID==0)
195 1 { //p[0]=前进时间,p[1]=后退时间
196 2 sprintf(buf,"Forward:%-8ds",(int)p[0]);
197 2 Gotoxy(0,0);
198 2 Puts(buf);
199 2 sprintf(buf,"Back:%-8ds",(int)p[1]);
200 2 Gotoxy(0,1);
201 2 Puts(buf);
202 2 }
203 1 //
204 1 if(ID==1)
205 1 {
206 2 int time;
207 2 time=*(int*)p;
208 2 sprintf(buf,"Time:%ds ",time);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -