找回密码
 立即注册

QQ登录

只需一步,快速开始

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

小车循迹的单片机程序 希望对大家有用

[复制链接]
跳转到指定楼层
楼主
ID:288417 发表于 2018-3-6 21:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
希望对大家有用

单片机源程序如下:
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #define da P0  
  5. sbit P10=P1^0;         //控制左电机前进
  6. sbit P11=P1^1;         //控制左电机后退
  7. sbit P12=P1^2;         //控制右电机前进
  8. sbit P13=P1^3;         //控制右电机后退
  9. sbit zuobian=P1^4;     //左边传感器
  10. sbit youbian=P1^5;     //右边传感器   
  11. sbit zhongjian=P1^6;   //中间传感器
  12. sbit RING=P2^7;                                          
  13. //sbit cesuzuo=P3^2;
  14. //sbit cesuyou=P3^3;
  15. sbit rs=P2^0;
  16. sbit rw=P2^1;
  17. sbit en=P2^2;
  18. sbit buzz=P2^4;
  19. sbit shire=P3^2;//人体释热传感器
  20. void delay(unsigned int z);
  21. void LCDinit();
  22. void lcdwritecom(uchar com);
  23. void lcdwritedat(uchar dat);
  24. void display(uint rate);
  25. void display1(uint rate1);
  26. uint count=0,count1=0;
  27. uint t=0;
  28. uint P110=0,P111=0,P112=0,P113=0;
  29. uchar aa=0;
  30. uchar bb=0;
  31. uchar time=0;
  32. uchar bai0=0,shi0=0,ge0=0;
  33. uint sudu=0,temp=0,temp1=0;
  34. void qianjin()//小车前进
  35. {  
  36.     P10=0;
  37.     P11=1;         
  38.     P12=0;
  39.     P13=1;
  40.     delay(25);
  41.     P10=0;
  42.     P11=0;
  43.     P12=0;
  44.     P13=0;
  45.     delay(25);
  46. }
  47. void youguai() //小车右拐            
  48. {  
  49.     uchar i;
  50.         for(i=0;i<20;i++)
  51.     {
  52.         P10=0;
  53.     P11=1;
  54.     P12=0;
  55.     P13=0;
  56.     delay(17);
  57.     P10=0;
  58.     P11=0;
  59.     P12=0;
  60.     P13=0;
  61.     delay(33);
  62. }
  63. }  

  64. void zuoguai()  //小车左拐   
  65. {
  66.     uchar i;
  67.         for(i=0;i<21;i++)
  68.     {
  69.            P10=0;
  70.     P11=0;
  71.     P12=0;
  72.     P13=1;
  73.     delay(17);   
  74.     P10=0;
  75.     P11=0;         
  76.     P12=0;
  77.     P13=0;
  78.     delay(33);
  79.         }
  80. }

  81. void move()
  82. {
  83.   if(zuobian==0&&zhongjian==0&&youbian==1) //右边检测到黑线      
  84.   youguai();     
  85.         if(zuobian==1&&zhongjian==0&&youbian==0) // 左边检测到黑线
  86.         zuoguai();     
  87.         if(zuobian==0&&zhongjian==1&&youbian==0)
  88.         qianjin();
  89.                 if(zuobian==0&&zhongjian==1&&youbian==1)
  90.                 youguai();
  91.                 if(zuobian==1&&zhongjian==1&&youbian==0)
  92.                 zuoguai();
  93.                 if(zuobian==0&&zhongjian==0&&youbian==0)
  94.                 qianjin();
  95.                 if(zuobian==1&&zhongjian==1&&youbian==1)
  96.                 qianjin();
  97.                 if(zuobian==1&&zhongjian==0&&youbian==1)
  98.                 qianjin();
  99. }
  100. void init_time0()
  101. {
  102.    
  103.         EA=1;
  104.         EX0=1;
  105.         IT0=1;

  106.        
  107.         TMOD=0x01;
  108.         TH0=(65536-50000)/256;
  109.         TL0=(65536-50000)%256;
  110.         EA=1;
  111.         EX1=1;
  112.         ET0=1;
  113.         IT1=1;
  114.         TR0=1;

  115.        
  116. }      

  117. void main(void)

  118. {  
  119.         LCDinit();
  120.         init_time0();
  121.     while(1)
  122.     {     
  123.         move();
  124.                
  125.                 if(time == 1)
  126.                 {
  127.                   time =0;
  128.                   t++;
  129.                   display(t);
  130.                   move();
  131.                   temp=bb*1.4;       
  132.               temp1=temp+temp1;
  133.                   move();
  134.               display1(temp1);
  135.                   bb=0;
  136.         }
  137.    }
  138. }
  139. void lcdwritecom(uchar com)
  140. {
  141.     rs=0;
  142.     rw=0;
  143.     da=com;
  144.     delay(10);
  145.     en=1;
  146.     delay(10);
  147.     en=0;
  148. }
  149. void lcdwritedat(uchar dat)
  150. {
  151.     rs=1;
  152.     rw=0;
  153.     da=dat;
  154.     delay(10);
  155.     en=1;
  156.     delay(10);
  157.     en=0;
  158. }
  159. void LCDinit()
  160. {
  161.     lcdwritecom(0x38);
  162.     lcdwritecom(0x0c);
  163.     lcdwritecom(0x06);
  164.         lcdwritecom(0x01);
  165.     lcdwritecom(0x80);
  166.     lcdwritedat('T');
  167.     lcdwritedat(':');
  168.     lcdwritedat('0');
  169.     lcdwritedat('0');
  170.         lcdwritedat('0');
  171.     lcdwritedat('s');
  172.         lcdwritecom(0x80+0x40);
  173.     lcdwritedat('S');
  174.     lcdwritedat(':');
  175.     lcdwritedat('0');
  176.     lcdwritedat('0');
  177.         lcdwritedat('0');
  178.     lcdwritedat('0');
  179.     lcdwritedat('c');
  180.     lcdwritedat('m');
  181.    
  182.    
  183. }
  184. void display(uint rate)
  185. {
  186.    uchar bai,shi,ge;
  187.    EA=0;
  188.    ge=rate%10;
  189.    if(ge != 0)
  190.    {
  191.              lcdwritecom(0x80+4);
  192.           lcdwritedat('0'+ge);
  193.    }
  194.    if(ge == 0 && rate%100/10 != 0)
  195.    {
  196.       shi=rate%100/10;
  197.           lcdwritecom(0x80+3);
  198.           lcdwritedat('0'+shi);
  199.           lcdwritedat('0');
  200.    }
  201.    if(ge == 0 && rate/100 != 0)
  202.    {
  203.       bai=rate/100;
  204.           lcdwritecom(0x80+2);
  205.           lcdwritedat('0'+bai);
  206.           lcdwritedat('0');
  207.           lcdwritedat('0');
  208.    }
  209.    EA=1;
  210. }

  211. void alarm()//蜂鸣器报警
  212. {
  213.   uchar i;
  214.   buzz=0;
  215.   for(i=0;i<30;i++)
  216.   {
  217.     if(zuobian==0&&zhongjian==0&&youbian==1) //右边检测到黑线      
  218.         youguai();     
  219.         if(zuobian==1&&zhongjian==0&&youbian==0) // 左边检测到黑线
  220.         zuoguai();     
  221.         if(zuobian==0&&zhongjian==1&&youbian==0)
  222.         qianjin();
  223.                 if(zuobian==0&&zhongjian==1&&youbian==1)
  224.                 youguai();
  225.                 if(zuobian==1&&zhongjian==1&&youbian==0)
  226.                 zuoguai();
  227.                 if(zuobian==0&&zhongjian==0&&youbian==0)
  228.                 qianjin();
  229.                 if(zuobian==1&&zhongjian==1&&youbian==1)
  230.                 qianjin();
  231.                 if(zuobian==1&&zhongjian==0&&youbian==1)
  232.                 qianjin();
  233.   }
  234.   buzz=1;
  235.          
  236. }  
  237. void display1(uint rate1)
  238. {
  239.    uchar qian, bai,shi,ge;
  240.    EA=0;
  241.    qian=rate1/1000;
  242.    bai=rate1/100%10;
  243.    shi=rate1/10%10;
  244.    ge=rate1%10;
  245.    lcdwritecom(0x80+0x40+2);
  246.    lcdwritedat('0'+qian);
  247.    lcdwritedat('0'+bai);
  248.    lcdwritedat('0'+shi);
  249.    lcdwritedat('0'+ge);       
  250.    EA=1;
  251. }

  252. void delay(unsigned int z)
  253. {
  254.     unsigned char a,b;
  255.     for(a=z;a>0;a--)
  256.         for(b=200;b>0;b--);
  257. }
  258. /*void  alarm1()   interrupt   4
  259. {
  260.     TH0=(65535-50000)/256;
  261.     TL0=(65535-50000)%256;
  262.      alarm();

  263. }*/
  264. void  time0()   interrupt   1
  265. {
  266.         TH0=(65535-50000)/256;
  267.     TL0=(65535-50000)%256;
  268.     aa++;
  269.     if(aa==20)
  270.     {
  271.                 aa=0;
  272.                 time=1;
  273.        
  274.     }
  275. }
  276. void  service_int0()    interrupt      0
  277. {
  278.     alarm();
  279. }
  280. void  service_int1()    interrupt       2
  281. {
  282.         bb++;
  283. }
复制代码

所有资料51hei提供下载:
xiaoche.rar (36.81 KB, 下载次数: 5)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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