我们课程设计要求制作一个基于电磁寻迹的智能小车系统,我们使用的是STC12C5A60S2单片机。我们用下面的代码,然后不知道为什么转弯时候识别能力特别差,很容易就直接冲出去了。还有就是总是有一个轮子要延迟一会儿才转,甚至直接不转了。传到电脑的时候有一些乱码,希望不会影响阅读。
- /*Define ADC operation const for ADC_CONTR*/
- #include <C:\KEIL\C51\INC\STC\STC12C5A60S2.H>
- #include <math.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- typedef unsigned char BYTE;
- sbit en1=P0^0; /* ???????P00 */
- sbit en2=P0^3; /* ???????P03 */
- sbit s1=P0^1; /* ??input1?P01 */
- sbit s2=P0^2; /* L298Input 2 */
- sbit s3=P0^4; /* L298Input 3 */
- sbit s4=P0^5; /* L298Input 4 */
- sbit s10=P2^0;/[表情]?LED
- sbit s11=P2^1;/[表情]?LED
- unsigned int a=0,b=0;//result1???????AD????,2????,resutl??1?2???
- BYTE result3=0;
- void delay10()
- {
- unsigned char a;
- for(a=30;a>0;a--);
- }
- #define ADC_POWER 0x80 //ADC ?????
- #define ADC_FLAG 0x10 //ADC ???????
- #define ADC_START 0x08 //ADC ???????
- #define ADC_SPEEDLL 0x00 //420 ?????????
- #define ADC_SPEEDL 0x20 //280 ?????????
- #define ADC_SPEEDH 0x40 //140 ?????????
- #define ADC_SPEEDHH 0x60 //70 ?????????
- void delay1ms() /[表情]?1ms
- {
- unsigned char i, j;
- _nop_();
- i = 4;
- j = 146;
- do
- {
- while (--j);
- } while (--i);
- }
- void InitADC()
- {
- P1ASF = 0xff; /[表情]?P1??????,??AD??
- ADC_RES = 0; //AD???????
- ADC_CONTR = ADC_POWER | ADC_SPEEDHH; /[表情]?AD??,????420
- _nop_(); /[表情]???????
- _nop_(); /[表情]???????
- _nop_(); /[表情]???????
- _nop_(); /[表情]???????
- }
- BYTE GetADCResult(BYTE ch)
- {
- InitADC(); //AD?????
- ADC_CONTR = ADC_POWER | ADC_SPEEDHH | ch | ADC_START;/[表情]???
- _nop_(); /[表情]???????
- _nop_(); /[表情]???????
- _nop_(); /[表情]???????
- _nop_(); /[表情]???????
- while (!(ADC_CONTR & ADC_FLAG));/[表情]?????
- ADC_CONTR &= ~ADC_FLAG; /[表情]?AD??
- return ADC_RES; /[表情]???
- }
- bit fangx=0;//0??,1??
- uchar idata t=1; /* ???? */
- uchar idata mk1=0; /* ?????????? */
- uchar idata mk2=0;/* ??????*/
- uchar idata tmp1,tmp2;/[表情]??????
- void zhixian(char speed) /[表情]????
- {
- fangx=0;
- s1=1; s2=0;mk1=speed;
- s3=1; s4=0;mk2=speed;
- }
- void left(char speed1,char speed2)/[表情]???
- {
- fangx=0;
- s1=1; s2=0;mk1=speed1;
- s3=1; s4=0;mk2=speed2;
- }
- void right(char speed1,char speed2)/[表情]???
- {
- fangx=0;
- s1=1; s2=0;mk1=speed1;
- s3=1; s4=0;mk2=speed2;
- }
- void Timer0Init(void) //100US,22.1184MHz
- {
- AUXR |= 0x80; //1T
- TMOD &= 0xF0;
- TMOD |= 0x01; //16?????1
- TL0 = 0x5C;
- TH0 = 0xF7;
- TF0 = 0;
- TR0 = 1;
- EA=1;
- ET0=1;
- }
- void pwm( ) //PWM???
- {
- {
- if(t==1) {tmp1=mk1;tmp2=mk2;}
- if(t<tmp1)
- en1=1;
- else en1=0;
- if(t<tmp2)
- en2=1;
- else en2=0;
- Timer0Init();
- t++;
- }while(t>=10)
- t=1;
- TF0=0;
- }
- void main( )
- {
- Timer0Init();
- delay1ms();
- while(1)
- {
- a=GetADCResult(0);
- b=GetADCResult(1);
- if(a>=b)
- {
- result3=a-b;
- if(result3<10)
- zhixian(7);
- else left(3,10);
- }
- else
- {
- result3=b-a;
- if(result3<10)
- zhixian(7);
- else right(10,3);
- }
- pwm( );
- }
- }
复制代码
|