熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2018-8-25 10:48
正文摘要:小車由小白 做到現(xiàn)在 從L298N 到 單片機(jī)程序的考入 經(jīng)歷了很多 也學(xué)習(xí)了很多 最好的就是小車開關(guān)打開后 能自己走了 可是紅外的程序 又不好用 是不是我應(yīng)該一步步來&nb ... |
第一:單片機(jī)應(yīng)用中,什么是合適的程序?能發(fā)揮硬件性能的程序,就是適合的。你不說你的配件,只要合適的程序是不可能有的。 第二:我有一個(gè),你可以參考。/* 簡易小車。51單片機(jī)最小系統(tǒng)板,L298N帶動兩個(gè)電機(jī),12V電機(jī)電源,L298N自帶5V邏輯電源, 供板子使用。 超聲波測距HC-SR04,用舵機(jī)SG90使它轉(zhuǎn)動探測。 目標(biāo):壁障; */ #include <reg51.h> #include <intrins.h> sbit ZLDJ10=P2^3;//直流電機(jī)的控制口 sbit ZLDJ11=P2^2; sbit ZLDJ20=P2^1; sbit ZLDJ21=P2^0; sbit RX=P2^6;//超聲波測距HC-SR04數(shù)據(jù)口Echo sbit TX=P2^5;//超聲波測距HC-SR04數(shù)據(jù)口Trig sbit DJ=P2^7;//SG90舵機(jī)的數(shù)據(jù)口 bit flag=0; unsigned int time=0; unsigned int timer=0; unsigned long S=0; unsigned long SPD[5]={5000,5000,5000,5000,5000}; unsigned char GT,DT; void Delay10ms(unsigned int c); void Delay50us(unsigned int c); void DJZD (void); void SG90 (void); void Conut(void); void CSBCJ(void); void main(void) { TMOD=0x11;//設(shè)T0、T1為方式1,GATE=0; TH0=0; TL0=0; TH1=0xf8; TL1=0x30; ET0=1; ET1=1; EA=1; TR1=1; GT=30;DT=350;DJ=0; DJZD(); TC(); RX=1; TX=0; Delay10ms(500); RX=0; while(1) { CSBCJ(); SPD[2]=S; if((S>=2500)||flag==1) { KZXCYD(); } if (S<=2500) { ZL(); } } } void Conut(void) { time=TH0*256+TL0; TH0=0; TL0=0; S= (long)(time*0.17); } void zd1() interrupt 1 { flag=1; } void zd3() interrupt 3 { TH1=0xf8; TL1=0x30; timer++; if(timer>=100) { timer=0; TX=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; } } void CSBCJ(void) { while(!RX); TR0=1; while(RX); TR0=0; Conut(); } void SG90(void) { flag=0; GT=10;DT=390;DJZD (); CSBCJ(); if ((flag==0)&&(S<=2500)) { SPD[0]=S; } else { SPD[0]=5000; } flag=0; GT=20;DT=380;DJZD (); CSBCJ(); if ((flag==0)&&(S<=2500)) { SPD[1]=S; } else { SPD[1]=5000; } flag=0; GT=30;DT=370;DJZD (); CSBCJ(); if ((flag==0)&&(S<=2500)) { SPD[2]=S; } else { SPD[2]=5000; } flag=0; GT=40;DT=360;DJZD (); CSBCJ(); if ((flag==0)&&(S<=2500)) { SPD[3]=S; } else { SPD[3]=5000; } flag=0; GT=50;DT=350;DJZD (); CSBCJ(); if ((flag==0)&&(S<=2500)) { SPD[4]=S; } else { SPD[4]=5000; } flag=0; GT=10;DT=390;DJZD (); CSBCJ(); if ((flag==0)&&(S<=2500)) { SPD[0]=S; } else { SPD[0]=5000; } flag=0; GT=20;DT=380;DJZD (); CSBCJ(); if ((flag==0)&&(S<=2500)) { SPD[1]=S; } else { SPD[1]=5000; } flag=0; GT=30;DT=370;DJZD (); CSBCJ(); if ((flag==0)&&(S<=2500)) { SPD[2]=S; } else { SPD[2]=5000; } flag=0; GT=30;DT=370;DJZD (); Delay10ms(5); } void DJZD (void) { unsigned char i; for (i=0;i<75;i++) { DJ=1; Delay50us(GT); DJ=0; Delay50us(DT); } DJ=0; } void Delay10ms(unsigned int c) { unsigned char a,b; for(c;c>0;c--) { for(b=44;b>0;b--) { for (a=112;a>0;a--) { } } } } void Delay50us(unsigned int c) { unsigned char a; for(c;c>0;c--) { for (a=19;a>0;a--) { } } } |
既然紅外的不好用,那就試試433的或者315的遙控呢 |
Powered by 單片機(jī)教程網(wǎng)