智能小車代碼_第1頁
智能小車代碼_第2頁
智能小車代碼_第3頁
已閱讀5頁,還剩5頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、/車輪周長為x,總路程S,總時間t,速度v/ 目前程序都是在理想狀態考慮下編寫的,還需考慮很多問題:/ 問題有:車走偏,該如何通過軟件調整車向,如果車在不該停的時候停車了該怎/ 現在還需解決的是:如何將調速程序與顯示程序結合為一個程序,單片機引腳連 #include<REG52.h>#include<absacc.h> #include<math.h> #define uchar unsigned char#define uint unsigned int / 定義電機控制相關功能引腳sbit ENA=P1A4;sbit ENB=PM5;sbit IN1=P

2、1A0;sbit IN2=P1A1;sbit IN3=P1A2;sbit IN4=P1A3;sbit ena=P1A6;sbit enb=P1A7;sbit in1=P2A4;sbit in2=P2A5;sbit in3=P2A6;sbit in4=P2A7;/0x7c,0x39,0x5e,0x79,0x71,0x76/ 定義數碼管位選相關引腳sbit PIN0=P2A0;sbit PIN1=P2A1;sbit PIN2=P2A2;sbit PIN3=P2A3;uchar blackline_1,blackline_2; /黑線數uchar m,seco nd,sig n; /分別為路程,時間

3、,速度,50mS變量,秒變量uint distance,time,speed,total_time,p;uchar loop=0;uchar dis4=0x5f,0x44,0x9d,0xcd; /數碼管顯示緩沖區uchar dis_code13=0xfa,0x22,0xb9,0xab,0x63,0xcb,0xdb,0xa2,0xfb,0xeb,0xf2,0x00; /數碼管段碼/ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a,滅*中斷服務程序部分*外中斷 0服務程序外中斷 1 服務程序void intt0(void) interrupt 0 /blackline_1+;voi

4、d intt1(void) interrupt 2 /blackline_2+;TR0=0; TR1=0; / 關定時器和計數器m+; p+;if(m=20)10S做時鐘/ 秒計second+;m=0; /50ms 定時, 20 次為 1s,second 為終點線停車 loop=TL1;speed=loop*21; distance+=loop*21; time+;TH1=0;TL1=0; / 每過一秒讀取一次計數值,即為速度值(以轉 TH0=0x3c;TL0=0xb0; / 重裝初值TR0=1; TR1=1; / 開定時器,計數器void delay20ms(void) /50ms 延時,作

5、為電機控制脈寬uchar i,j;for(i=0;i<15;i+)for(j=0;j<120;j+);void delay50ms(void) /50ms 延時,作為電機控制脈寬uchar i,j;for(i=0;i<50;i+)for(j=0;j<120;j+);*顯示程序群*void display_init()P0=dis_code0;PIN0=0;PIN1=0;PIN2=0;PIN3=1;void display_cou ntdow n(uchar e) /終點線 10S倒計時函數P0=dis_codee;PIN0=1;PIN1=0;PIN2=0;PIN3=0;

6、void display(uint e) /顯示總路程 /總時間uchar i;for(i=0;i<4;i+) disi=e%10;e=e/10;P0=dis_codedis0; PIN0=0;PIN1=0;PIN2=0;PIN3=1; delay20ms();P0=dis_codedis1; PIN0=0;PIN1=0;PIN2=1;PIN3=0; delay20ms();P0=dis_codedis2; PIN0=0;PIN1=1;PIN2=0;PIN3=0; delay20ms();P0=dis_codedis3; PIN0=1;PIN1=0;PIN2=0;PIN3=0; dela

7、y20ms();void display_time(void) / 顯示總路程 / 總時間 dis0=total_time%10; dis1=total_time/10; dis2=11; dis3=11;P0=dis_codedis0; PIN0=0;PIN1=0;PIN2=0;PIN3=1; delay20ms();P0=dis_codedis1; PIN0=0;PIN1=0;PIN2=1;PIN3=0; delay20ms();void turn_left(void)ENA=1; ena=1;ENB=1; enb=1;delay50ms();ENA=0; ena=0;ENB=0; enb

8、=0;delay50ms();ENA=1; ena=1;ENB=0; enb=0;delay50ms();ENA=0; ena=0;ENB=0; enb=0;delay50ms();void turn_right(void)ENA=1; ena=1;ENB=1; enb=1;delay50ms();ENA=0; ena=0;ENB=0; enb=0;delay50ms();ENA=0; ena=0;ENB=1; enb=1;delay50ms();ENA=0; ena=0;ENB=0; enb=0;delay50ms();void motor_zhengzhuan(void) / 正轉IN1=

9、1;IN2=0;in1=1;in2=0;IN3=1;IN4=0;in3=1;in4=0;void motor_fanzhuan(void) /IN1=0;IN2=1;in1=0;in2=1;IN3=0;IN4=1;in3=0;in4=1;void motor_stop(void) /IN1=1;IN2=1;IN3=1;IN4=1;in1=1;in2=1;in3=1;in4=1;ENA=0; ENB=0;ena=0;enb=0;void motor_start(void)/ENA=1;ENB=1;ena=1;enb=1;void motor_init(void) /IN1=0;IN2=0;IN3

10、=0;IN4=0;in1=0;in2=0;in3=0;in4=0;ENA=0;ENB=0;ena=0;enb=0;void int0_init(void) /EA=1;EX0=1;PX0=1;IT0=1;void timer_init(void) /EA=1;ET0=1;剎車啟動反轉電機控制引腳初始化外中斷 0設置定時器 0初始化TMOD=0x51;TR0=1; /TMOD=0101 0001BET1=1; TH1=0;TL1=0; TR1=1;void bianliang_init(void) / 全局變量初始化distance=0; speed=0; time=0; p=0; sign=0

11、;m=0; blackline_1=0; blackline_2=0; second=0;void speed_display(uchar dat) /調速函數 &&數碼管顯示函數結合體uchar i,e;e=speed;dis0=e%10;dis1=e/10;dis2=0x00;dis3=0x00;for(i=8;i>0;i-)if(dat&0x80) ENA=1;ENB=1;ena=1;enb=1;else ENA=0;ENB=0;ena=0;enb=0;dat<<=1;if(i%2=0)P0=dis_codedis0; PIN0=0;PIN1=0

12、;PIN2=0;PIN3=1; else P0=dis_codedis1; PIN0=0;PIN1=0;PIN2=1;PIN3=0; delay20ms();if(i-1)%2=0)P0=dis_codedis0; PIN0=0;PIN1=0;PIN2=0;PIN3=1; else P0=dis_codedis1; PIN0=0;PIN1=0;PIN2=1;PIN3=0; delay20ms();void main(void)/ 初始化模塊display_init();bianliang_init();int0_init();timer_init();count_init();motor_in

13、it();motor_zhengzhuan();while(second<=4) uchar i=4-second;倒計時顯示未到起跑線是加速起跑線全速display_countdown(i); / / 循環控制模塊while(1)while(blackline_1=0) / speed_display(0xff);while(blackline_1=1) / speed_display(0xff); while(blackline_1+blackline_2<=2);p=0; while(p<10) if(blackline_1=blackline_2) sign=0;el

14、se if(blackline_1>blackline_2) sign=1; else if(blackline_1<blackline_2) sign=2; if(sign=1) turn_left(); turn_left(); turn_left(); turn_left(); if(sign=2) turn_right(); turn_right(); turn_right(); turn_right();while(blackline_1=2)/到限速線有36M勺距離,故先全速,再中速,然/過渡到低速,從而能在限速線上順利減速 speed_display(0xff); s

15、peed_display(0xff); speed_display(0xff); speed_display(0xcc); while(blackline_1=2&&blackline_2=2);p=0;while(p<10) if(blackline_1=blackline_2) sign=0; else if(blackline_1>blackline_2) sign=1; else if(blackline_1<blackline_2) sign=2; if(sign=1) turn_left();turn_left();turn_left();turn

16、_left();if(sign=2) turn_right(); turn_right(); turn_right(); turn_right();while(blackline_1=3) / 限速線到達,低速 speed_display(0x88); while(blackline_1=3&&blackline_2=3);p=0;while(p<10) if(blackline_1=blackline_2) sign=0; else if(blackline_1>blackline_2)sign=1;else if(blackline_1<blackline

17、_2)sign=2;if(sign=1) turn_left(); turn_left(); turn_left(); turn_left();if(sign=2) turn_right();turn_right();turn_right();turn_right();while(blackline_1=4) / speed_display(0xff);while(blackline_1=5) / speed_display(0xcc);speed_display(0x88);while(blackline_1!=6); /motor_stop();加速離開限速區中低速結合,便于終點線快速剎車

18、到達終點線,先剎車,再關使能 ENA和ENB關使能在定時器0中1s自增while(second<=10) /10秒倒計時且數碼管顯示speed_display(0x00); / second=0; /倒計時顯示 uchar i=10-second; display_countdown(i); / motor_fanzhuan();speed_display(0xff); /全速倒行while(blackline_1!=7);while(blackline_1=7) speed_display(0xff); while(blackline_1=7&&blackline_2=

19、7);p=0;while(p<10) if(blackline_1=blackline_2) sign=0;else if(blackline_1>blackline_2)sign=1;else if(blackline_1<blackline_2)sign=2;if(sign=1) turn_left();turn_left();turn_left();turn_left();if(sign=2) turn_right();turn_right();turn_right();turn_right();while(blackline_1=8) speed_display(0x

20、ff); speed_display(0xff); speed_display(0xcc); while(blackline_1=8&&blackline_2=8);p=0;while(p<10) if(blackline_1=blackline_2) sign=0;else if(blackline_1>blackline_2) sign=1;else if(blackline_1<blackline_2) sign=2;if(sign=1) turn_left();turn_left();turn_left();turn_left();if(sign=2) turn_right();turn_right();turn_right();turn_right(); while(blackline_1=9) s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論