找回密码
 立即注册

QQ登录

只需一步,快速开始

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

C语言程序51单片机利用红外检测的寻迹小车

[复制链接]
跳转到指定楼层
楼主
ID:479806 发表于 2019-3-2 22:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*******dianji.c部分*************************/
  1. #include < reg52.h >
  2. #include " dianji.h"
  3. #define  uchar unsigned char

  4. char num=0,shi,fen,i;               
  5. int  ds,zuo,you,jd=1,kk,ting=0,d;
  6. uchar code minute[]={"分"};
  7. uchar code second[]={"秒"};

  8. void delay(unsigned int xms)                 
  9. {
  10.     unsigned int i,j;
  11.         for(j=0;j<xms;j++)
  12.                   for(i=0;i<80;i++);
  13. }
  14. /*******12232液晶*****************/
  15. void send_command(uchar command_data)        //发命令
  16. {
  17.         uchar i;
  18.         uchar i_data;
  19.         i_data=0xf8;
  20.         CS=1;
  21.         SCLK=0;
  22.         for(i=0;i<8;i++)
  23.                 {
  24.                         SID=(bit)(i_data&0x80);
  25.                         SCLK=0;
  26.                         SCLK=1;
  27.                         i_data=i_data<<1;
  28.                 }

  29.         i_data=command_data;
  30.         i_data&=0xf0;
  31.         for(i=0;i<8;i++)
  32.                 {
  33.                         SID=(bit)(i_data&0x80);
  34.                         SCLK=0;
  35.                         SCLK=1;
  36.                         i_data=i_data<<1;
  37.                 }
  38.         i_data=command_data;
  39.         i_data<<=4;
  40.         for(i=0;i<8;i++)
  41.                 {
  42.                         SID=(bit)(i_data&0x80);
  43.                         SCLK=0;
  44.                         SCLK=1;
  45.                         i_data=i_data<<1;
  46.                 }
  47.                 CS=0;               
  48.                 delay(10);
  49. }

  50. void send_data(uchar command_data)                //发送数据
  51. {
  52.         uchar i;
  53.         uchar i_data;
  54.         i_data=0xfa;
  55.         CS=1;
  56.         SCLK=0;
  57.         for(i=0;i<8;i++)
  58.                 {
  59.                         SID=(bit)(i_data&0x80);
  60.                         SCLK=0;
  61.                         SCLK=1;
  62.                         i_data=i_data<<1;
  63.                 }

  64.            i_data=command_data;
  65.         i_data&=0xf0;
  66.         for(i=0;i<8;i++)
  67.                 {
  68.                         SID=(bit)(i_data&0x80);
  69.                         SCLK=0;
  70.                         SCLK=1;
  71.                         i_data=i_data<<1;
  72.                 }
  73.         i_data=command_data;
  74.         i_data<<=4;
  75.         for(i=0;i<8;i++)
  76.                 {
  77.                         SID=(bit)(i_data&0x80);
  78.                         SCLK=0;
  79.                         SCLK=1;
  80.                         i_data=i_data<<1;
  81.                 }
  82.                 CS=0;               
  83.                 delay(10);
  84. }
  85. void LCD_init()           //液晶初始化
  86. {
  87.         PSB=0;
  88.         delay(50);
  89.         send_command(0x30);           //设置8位数据接口,基本指令模式
  90.         send_command(0x02);          //清DDRAM
  91.         send_command(0x06);          //游标及显示右移一位
  92.         send_command(0x0c);          //整体显示开,游标关,反白光
  93.         send_command(0x01);           //写入空格清屏幕

  94.         send_command(0x89);
  95.         while(minute[i]!='\0')
  96.         {
  97.           send_data(minute[i]);
  98.           i=i+1;
  99.         }
  100.         i=0;
  101.         send_command(0x9A);
  102.         while(second[i]!='\0')
  103.         {
  104.           send_data(second[i]);i=i+1;
  105.         }
  106.         i=0;
  107. }


  108. /**********定时器********************/
  109. void Time0_Initk()  //定时器初始化
  110. {
  111.     TMOD=0x01;
  112.         IE=0x82;
  113.         TH0=0xfe;
  114.         TL0=0x33;
  115.         TR0=1;
  116. }


  117. void Time0_Init() interrupt 1
  118. {
  119.         TH0=0xfe;
  120.         TL0=0x33;        
  121.         ds=ds+1;kk++;
  122.     if(ds==2000)           //一秒时间到
  123.         {
  124.             ds=0;
  125.                 xianshi();
  126.         }
  127.          
  128.         jd=jd+1;
  129.         if(jd<zuo)
  130.         {
  131.            ENA=1;
  132.          }
  133.         else
  134.         {
  135.            ENA=0;
  136.         }

  137.         if(jd<you)
  138.         {
  139.            ENB=1;
  140.          }
  141.     else
  142.         {
  143.            ENB=0;
  144.         }
  145.         jd=jd%100;                   //jd自加次数始终保持为100
  146.         
  147. }
  148. /***********计时:——分——秒**************/
  149. void xianshi()
  150. {
  151.     num=num+1;
  152.         if(num==10)
  153.         {
  154.           num=0;
  155.           shi=shi+1;
  156.         }
  157.         if(shi==6)
  158.         {
  159.           shi=0;
  160.           fen=fen+1;
  161.         }

  162.         send_command(0x99);
  163.         send_data(num+48);

  164.         send_command(0x98);
  165.         send_data(shi+48);

  166.         send_command(0x88);
  167.         send_data(fen+48);
  168. }

  169. /*************红外遮挡情况*****************/
  170. void hw()
  171. {  
  172.         if(hwl==0&&hwr==0)         //直走
  173.         {
  174.                 in1= 1;in2= 0;         
  175.                 in3= 0;in4= 1;
  176.                 zuo =16;you =10;               
  177.                
  178.          }
  179.          if(hwl==0&&hwr==1)    //右拐               
  180.          {
  181.             in1=0;in2=1;
  182.             in3=1;in4=0;
  183.                 zuo =3;you =16;
  184.          }
  185.          if(hwl==1&&hwr==0)    //左拐
  186.          {
  187.                 in1=0;in2=1;
  188.                 in3=0;in4=1;
  189. //                zuo =16;
  190. //                you =3;
  191.           }

  192. }

  193. /*********小车停下*************/
  194. void  stop()
  195. {
  196.           if(hwl==1&&hwr==1)
  197.         {           
  198.             in1=0;in2=0;
  199.             in3=0;in4=0;

  200.                 while(ting<5)                //停下
  201.             {
  202.                 if(d==0)
  203.                     {
  204.                                 kk=0;
  205.                                 d=2;
  206.                         }
  207.                     if(kk==2000)   //一秒
  208.                     {
  209.                             ting=ting+1;
  210.                             send_command(0x80);
  211.                 send_data(ting+48);
  212.                             kk=0;
  213.                         }         
  214.                         if(ting==5)
  215.                         {        
  216.                             kk=3000;
  217.                             in1=1;in2=0;
  218.                             in3=0;in4=1;
  219.                                 zuo=20;
  220.                                 you=19;
  221.                             delay(200);
  222.                          }
  223.             }
  224.             ting=0;d=0;
  225.     }
  226. }
复制代码


/**********dianji.h部分*******************/
  1. #include < reg52.h >
  2. #define  uchar unsigned char
  3. #define  uint unsigned int


  4. sbit in1=P0^0;          //左
  5. sbit in2=P0^1;
  6. sbit ENA=P0^2;

  7. sbit in3=P0^5;          //右
  8. sbit in4=P0^6;
  9. sbit ENB=P0^7;

  10. sbit CS=P1^0;                        
  11. sbit SID=P1^1;                           
  12. sbit SCLK=P1^2;                  
  13. sbit PSB=P1^3;

  14. sbit hwr=P3^7;                //红外
  15. sbit hwl=P3^0;

  16. extern void hw();
  17. extern void LCD_init();
  18. extern void Time0_Initk() ;
  19. extern void xianshi();
  20. extern void stop();

  21. /********main.c主函数部分******************/
  22. #include <reg52.h>
  23. #include " dianji.h"
  24. void main()
  25. {
  26.   ENA=0;ENB=0;
  27.   Time0_Initk();
  28.   LCD_init();
  29.   while(1)
  30.    {
  31.           stop();
  32.       hw();
  33.    }
  34. }
复制代码


评分

参与人数 1黑币 +6 收起 理由
菜用鸡 + 6 淡定

查看全部评分

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

使用道具 举报

沙发
ID:1 发表于 2019-3-3 03:30 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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