找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2009|回复: 1
打印 上一主题 下一主题
收起左侧

基于51单片机的智能小车源代码

[复制链接]
跳转到指定楼层
楼主
ID:717630 发表于 2020-3-28 16:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要求已全做完
1设计并焊接实现小车的各种运行状态。
①设计并焊接实现按键控制小车的各种运行状态,包括启动停止、前进倒退、加速减速等;
②设计并焊接实现使用数码管、LCD等显示器件监测小车的运行状态,请自行定义要显示的内容,如运行状态、运行速度挡位等。
2)
设计并焊接实现无线数据传输遥控小车的运行状态。
①使用具有蓝牙功能的PC或手机,设计通过蓝牙实现无线数据传输,进而遥控小车的各种运行状态;
③使用多种编码格式的红外遥控器设计解码算法,实现红外遥控小车的各种运行状态。
3)创新层(选做):使用多种传感器设计实现小车的智能控制。
①基于超声波传感器实现小车自动避障;
②基于红外线传感器实现小车自动循迹‘。

单片机源程序如下:
  1. #include    "intrins.h"
  2. #include "STC15F2K60S2.H"
  3. #include "MOTOR.H"
  4. #include "DELAY.H"
  5. unsigned char curr_speed=0;               
  6. unsigned char run_flag=1;      //1???????????У?0??????
  7. unsigned char run_direct=1;      //1?????????0??????
  8. unsigned char sys_state;
  9. bit rx_flag=0;       //??????λ
  10. unsigned char rxbuf;     //?????????
  11. #define  MAIN_Fosc   11059200L   //?????????
  12. sfr TH2  = 0xD6;
  13. sfr TL2  = 0xD7;

  14. /*************  IO?????    **************/
  15. sbit    P_HC595_SER   = P4^0;   //pin 14    SER     data input
  16. sbit    P_HC595_RCLK  = P5^4;   //pin 12    RCLk    store (latch) clock
  17. sbit    P_HC595_SRCLK = P4^3;   //pin 11    SRCLK   Shift data clock
  18. sbit SR_Trig = P1^4;  //  ??????I/O??
  19. sbit SR_Echo = P1^3;
  20. sbit model_flag= P1^2;
  21. sbit infrared_l = P2^5;  //????I/O??
  22. sbit infrared_m = P2^6;
  23. sbit infrared_r = P2^7;
  24. sbit infrared_stop = P4^5;   //???????????
  25. /*************  ???????????    **************/
  26. void motor_turnleft(unsigned char wide);
  27. void motor_turnright(unsigned char wide);
  28. void motor_turnl(void);
  29. void motor_turnr(void);
  30. void    DisplayRTC(void);
  31. void    RTC(void);
  32. void    delay_ms(u8 ms);
  33. void    DisableHC595(void);
  34. void    Initialize_LCD(void);
  35. void    Write_AC(u8 hang,u8 lie);
  36. void    Write_DIS_Data(u8 DIS_Data);
  37. void    ClearLine(u8 row);
  38. u8      BIN_ASCII(u8 tmp);
  39. void    PutString(u8 row, u8 column, u8 *puts);
  40. void    WriteChar(u8 row, u8 column, u8 dat);
  41. float  measure(void);
  42. void  delay_us(unsigned int us);
  43. void  Car_Track(void);
  44. /*************************??????****************************/
  45. void Car_Track(void)
  46. {
  47. if(infrared_l==0&&infrared_m==1&&infrared_r==0 )
  48.    motor_start();
  49.   else if( (infrared_l==0&&infrared_m==0&&infrared_r==1)||(infrared_l==0&&infrared_m==1&&infrared_r==1))
  50.     motor_turnr();
  51.    /*else if (infrared_l==0&&infrared_m==1&&infrared_r==0)
  52.      motor_start();
  53.    */
  54.     else if( (infrared_l==1&&infrared_m==0&&infrared_r==0)||(infrared_l==1&&infrared_m==1&&infrared_r==0))
  55.      motor_turnl();
  56.      
  57. }

  58. /***********???????***************/
  59. void Delay_200ms(void)
  60. {
  61.     unsigned char i,j,k;
  62.     _nop_();
  63.     _nop_();
  64.     i=10;
  65.     j=31;
  66.     k=147;
  67.     do
  68.     {
  69.         do
  70.         {
  71.             while(--k);
  72.         }while(--j);
  73.     }while(--i);
  74. }
  75. void Delay_Num(unsigned int n_ms)        //@12.000MHz
  76. {
  77.     unsigned char i,j;
  78.     while(n_ms--)
  79.     {
  80.         i=12;
  81.         j=169;
  82.         do
  83.         {
  84.             while(--j);
  85.         }while(--i);
  86.     }
  87. }

  88. /**********???????*************/
  89. void Delay500us()               //@12.000MHz
  90. {
  91.     unsigned char i,j;
  92.     i=6;
  93.     j=211;
  94.     do
  95.     {
  96.         while(--j);
  97.     }while(--i);
  98. }
  99. void Delay50us()               //@12.000MHz
  100. {
  101.     unsigned char i,j;
  102.     i=6;
  103.     j=146;
  104.     do
  105.     {
  106.         while(--j);
  107.     }while(--i);
  108. }
  109. void Delay3us()                 //@12.000MHz
  110. {
  111.     unsigned char i;
  112.     _nop_();
  113.     _nop_();
  114.     i=6;
  115.     while(--i);
  116. }
  117. void Delay30us()                 //@12.000MHz
  118. {
  119.     unsigned char i;
  120.     _nop_();
  121.     _nop_();
  122.     i=87;
  123.     while(--i);
  124. }
  125. void Delay10us()                 //@12.000MHz
  126. {
  127.     unsigned char i;
  128.     _nop_();
  129.     _nop_();
  130.     i=27;
  131.     while(--i);
  132. }
  133. void Delay900us()               //@12.000MHz
  134. {
  135.     unsigned char i,j;
  136.     i=11;
  137.     j=126;
  138.     do
  139.     {
  140.         while(--j);
  141.     }while(--i);
  142. }
  143. void Delay1ms()               //@12.000MHz
  144. {
  145.     unsigned char i,j;
  146.     i=12;
  147.     j=169;
  148.     do
  149.     {
  150.         while(--j);
  151.     }while(--i);
  152. }
  153. void Delay4500us()               //@12.000MHz
  154. {
  155.     unsigned char i,j;
  156.     i=53;
  157.     j=132;
  158.     do
  159.     {
  160.         while(--j);
  161.     }while(--i);
  162. }
  163. void Delay600us()               //@12.000MHz
  164. {
  165.     unsigned char i,j;
  166.     i=7;
  167.     j=254;
  168.     do
  169.     {
  170.         while(--j);
  171.     }while(--i);
  172. }
  173. void motor_init(void)
  174. {
  175. P_SW2|=BIT7;
  176. PWMCKS=0;
  177. PWMCFG=0;
  178. PWMC=CYCLE;        //????????
  179. PWM5CR=0;              //?????????????????
  180. PWM5T1=0;


  181. /*********************************/
  182. PWM5T2=CYCLE*60/100;
  183. PWM4CR=0;
  184. PWM4T1=0;
  185. PWM4T2=CYCLE*60/100;
  186. /**********************************/
  187. PWMCR=BIT3+BIT2;     //PWMCR=0X60 ,pwm??????     00001100
  188. PWMCR|=BIT7;
  189. P_SW2&=~BIT7;
  190. PWMCR|=BIT3+BIT2;
  191. run_flag=1;
  192. }
  193. ///////////////???????//////////////////////////////////
  194. void motor_setspeed(unsigned char wide)
  195. {
  196. if(run_flag)
  197. {  
  198.   wide=curr_speed;
  199.   if(!run_direct)
  200.    wide=100-wide;     //???????????????
  201.   if(wide)
  202.   {
  203.    P_SW2|=BIT7;
  204.    PWM5T2=(u16)(CYCLE/(100/wide*0.5)); //????????
  205.    PWM4T2=(u16)(CYCLE/(100/wide*0.5));          //?????????????????
  206.    P_SW2&=~BIT7;
  207.    PWMCR|=BIT3+BIT2;
  208.   }
  209. }
  210. else
  211. {
  212.   PWMCR&=~(BIT3+BIT2);
  213.   IN1=0;IN2=0;IN3=0;IN4=0;
  214. }
  215. }
  216. ///////////////???////////////////////////////////////////
  217. void motor_turnleft(unsigned char wide)
  218. {
  219. if(run_flag)
  220. {  
  221.   curr_speed=wide;
  222.   if(!run_direct)
  223.    wide=100-wide;     //???????????????
  224.   if(wide)
  225.   {
  226.    P_SW2|=BIT7;
  227.    PWM5T2=(u16)(CYCLE/(100/(wide*0.01))); //????????
  228.    PWM4T2=(u16)(CYCLE/(100/wide));          //?????????????????
  229.    P_SW2&=~BIT7;
  230.    PWMCR|=BIT3+BIT2;
  231.   }
  232. }
  233. else
  234. {
  235.   PWMCR&=~(BIT3+BIT2);
  236.   IN1=0;IN2=0;IN3=0;IN4=0;
  237. }
  238. }
  239. ///////////////////???//////////////////////////////////////////
  240. void motor_turnright(unsigned char wide)
  241. {
  242. if(run_flag)
  243. {  
  244.   curr_speed=wide;
  245.   if(!run_direct)
  246.    wide=100-wide;     //???????????????
  247.   if(wide)
  248.   {
  249.    P_SW2|=BIT7;
  250.    PWM5T2=(u16)(CYCLE/(100/wide)); //????????
  251.    PWM4T2=(u16)(CYCLE/(100/(wide*0.01)));          //?????????????????
  252.    P_SW2&=~BIT7;
  253.    PWMCR|=BIT3+BIT2;
  254.   }
  255. }
  256. else
  257. {
  258.   PWMCR&=~(BIT3+BIT2);
  259.   IN1=0;IN2=0;IN3=0;IN4=0;
  260. }
  261. }
  262. ///////////////??????///////////////////////////////////////
  263. void motor_forward(void)
  264. {
  265. IN2=0;IN4=0;
  266. run_direct=1;
  267. motor_setspeed(curr_speed);
  268. }
  269. ///////////////???_1///////////////////////////////////////
  270. void motor_turnl(void)
  271. {
  272. IN2=0;IN4=0;
  273. run_direct=1;
  274. motor_turnleft(curr_speed);
  275. }
  276. ///////////////???_1///////////////////////////////////////
  277. void motor_turnr(void)
  278. {
  279. IN2=0;IN4=0;
  280. run_direct=1;
  281. motor_turnright(curr_speed);
  282. }
  283. ////////////////??????///////////////////////////////////////////
  284. void motor_backward(void)
  285. {
  286. IN1=0;
  287. IN2=1;
  288. IN3=0;
  289. IN4=1;
  290. run_direct=0;
  291. motor_setspeed(curr_speed);
  292. }

  293. ////////////////?????//////////////////////////////////////
  294. void motor_stop(void)
  295. {
  296. PWMCR&=~(BIT3+BIT2);
  297. IN1=0;IN2=0;
  298. IN3=0;IN4=0;
  299. run_flag=0;
  300. }
  301. /////////////////??????///////////////////////////////////////
  302. void motor_start(void)
  303. {  
  304. run_flag=1;
  305. curr_speed=70;
  306. motor_forward();
  307. }

  308. /**************** ?????????? ****************/
  309. void UART_Init(void)    //9600bps@12.000MHz
  310. {
  311. SCON =0x50;      //8λ????????????
  312. AUXR &=0xBF;     //?????1????Fosc/12????12T
  313. AUXR &=0xFE;     //???????????1????????????
  314. TMOD &=0x0F;     //?????1?????16λ?????????
  315. TL1=0xe7;
  316. TH1=0xFF;      //????????
  317. ET1=0;       //????????1?ж?
  318. TR1=1;       //????????1
  319. REN=1;       //???????
  320. ES=1;       //?????ж?
  321. }
复制代码

余下代码在压缩包
全部资料51hei下载地址:
xiaoche.rar (251.19 KB, 下载次数: 15)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:699194 发表于 2020-4-3 14:22 | 只看该作者
假的程序,我下载过了,试了试。。。不行,坑人的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表