循跡小車代碼
0.png (67.6 KB, 下載次數: 45)
下載附件
2016-6-23 23:55 上傳
- #include "1602.h"
- #include <reg52.h>
- sbit L1=P0^0;
- sbit L2=P0^1;
- sbit L3=P0^2;
- sbit L4=P0^3;
- sbit H1=P0^6;
- sbit H2=P0^7;
- /*sbit L1=P0^0;
- sbit L3=P0^7;
- sbit L2=P2^0;
- sbit L4=P2^1;
- sbit H1=P0^2;
- sbit H2=P0^4;
- */
- uchar s1[2];
- uchar d1[2];
- uchar t1[2];
- uint speed;
- uint maxd;
- uint i;
- uint tt;
- uint f;
- long unsigned int distance1;
- long unsigned int ti;
- void scan();
- void Pwm(uint distance,uint x);
- void init();
- void distancedisplay();
- void speeddisplay();
- void chuli();
- void welcome();
- void PWM(uint pw,uint a);
- void Pathfinding();
- void timedisplay();
- void timedisplay()
- {
- if(f>999)
- f=0;
- t1[0]=f/100+'0';
- t1[1]=(f%100)/10+'0';
- t1[2]=f%10+'0';
- LCD_Write_Char(11,0,t1[0]) ;
- LCD_Write_Char(12,0,t1[1]) ;
- LCD_Write_Char(13,0,t1[2]) ;
- }
- void PWM(uint pw,uint a)
- {
-
- switch(a)
- {
- case 1:
- if(pw>i)
- L1=1;
- else if(pw<=i && i<100)
- L1=0;
- else if(i>100)
- i=0;
- break;//左輪一個脈沖50ms,占空比pw%
- case 2:
- if(pw>i)
- L3=1;
- else if(pw<=i && i<100)
- L3=0;
- else if(i>100)
- i=0;
- break;//右輪一個脈沖50ms,占空比pw%
-
- }
- }
- void Pathfinding()
- {
- if(H1==0 && H2==0 )
- {
- PWM(65,1);
- PWM(65,2);//直行
- }
- else if(H1==0 && H2==1)
- {
- PWM(50,1);
- L3=0;// 右轉
- }
- else if(H1==1 && H2==0)
- {
- PWM(50,2);
- L1=0;// 左轉
- }
- else
- {
- L1=0;
- L3=0;
- speed=0;// 停止
- }
- }
- void welcome()
- {
- uint k,j;
- uchar *pa;
- pa="Welcome to my car!";
- k=0;
- while(*pa)
- {
- LCD_Write_Char(k,0,*pa);
- pa++;
- k++;
- if(*pa==0)
- LCD_Write_Com(0x18);
- DelayMs(250);
- }
- for(j=0;j<8;j++)
- DelayMs(250);
- k=0;
- }
- void chuli()
- {
-
- distance1=distance1+22;
- if(distance1>999)
- {
- distance1=0;
- maxd++;
- if(maxd>9)
- maxd==0;
- LCD_Write_Char(10,1,maxd+'0') ;
- }
- L1=1;
- speeddisplay();
- //L1=0;
- distancedisplay();
- }
- void distancedisplay()
- {
- d1[0]=distance1/100+'0';
- d1[1]=(distance1%100)/10+'0';
- d1[2]=distance1%10+'0';
-
- LCD_Write_Char(3,0,d1[0]) ;
- LCD_Write_Char(4,0,d1[1]) ;
- LCD_Write_Char(5,0,d1[2]) ;
-
- }
- void speeddisplay()
- {
- s1[0]=speed/100+'0';
- s1[1]=(speed%100)/10+'0';
- s1[2]=speed%10+'0';
-
- LCD_Write_Char(3,1,s1[0]) ;
- LCD_Write_Char(4,1,s1[1]) ;
- LCD_Write_Char(5,1,s1[2]) ;
-
- }
- void init()
- {
- TMOD = 0x61; //t1計數模式,方式2自動重裝 t0定時器模式,方式1,500us觸發一次
- TH0 =(65536-500)/256;
- TL0 =(65536-500)%256;
- TH1 =256-1;
- TL1 =256-1;
- EA = 1;
- ET0 = 1;
- ET1 = 1;
- TR0 = 1;
- TR1=1;
- }
- void main()
- {
- i=0;
- L2=0;
- L4=0;
- distance1=0;
- ti=0;
- speed=0;
- LCD_Init();
- DelayMs(10);
- LCD_Clear();//清屏
- init();
- //welcome();
- LCD_Clear();
- LCD_Write_String(1,1,"v:");
- LCD_Write_String(3,1,"000");
- LCD_Write_String(6,1,"cm/s");
- LCD_Write_String(1,0,"d:");
- LCD_Write_String(3,0,"000");
- LCD_Write_String(6,0,"cm");
- //LCD_Write_String(9,0,"t:");
- //LCD_Write_Char(14,0,'s');
- while(1)
- {
- Pathfinding();
-
- }
- }
-
- void Timer() interrupt 1 //定時器中斷
- {
- TH0 =(65536-500)/256;
- TL0 =(65536-500)%256;
- ti++;
- i++;
- tt++;
- if(tt==2000)
- {
- f++;
- tt=0;
- //timedisplay();
- }
- }
- void cesu() interrupt 3 //定時器中斷計數測速 1 P3.5輸入計數脈沖
- {
- speed = 22/(ti*0.0005);
- chuli();
- ti=0;
- }
-
復制代碼
全部資料下載:
循跡小車.7z
(49.23 KB, 下載次數: 8)
2016-6-22 08:55 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|