找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

基于8051单片机的循迹小车 带测速程序

查看数: 4578 | 评论数: 1 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-7-2 22:50

正文摘要:

基于8051单片机的循迹小车

回复

ID:1 发表于 2017-7-3 02:57
测速程序:

  1. #include<reg52.h>

  2. //液晶及测速
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define zhouchang 20       //20cm               
  6. unsigned int i=0;                                                               
  7. sbit P36=P3^6;  
  8. sbit beep=P2^0;                                                                  
  9. unsigned char j;                                                                  
  10. unsigned int kop;                                                                 
  11. uchar code table[]="2013 (^_^) 4-17 ";
  12. uchar table1[]="   -I-          ";
  13. uchar table2[3];

  14. uchar code haode[16]=" WE  ^_^  THE   ";
  15. uchar code haode1[16]=" CHAM  ARE  PION";


  16. uchar code hao[16]= "  p_q    ^_^    ";
  17. uchar code hao1[16]="  -I- -- -I-    ";
  18. uchar flag=1;
  19. uchar time1=0;
  20. //液晶端口
  21. sbit rs = P3^1;//Pin4
  22. //sbit rw= P3^5; //Pin5
  23. sbit lcden  = P3^0;//Pin6
  24. uchar time=1;
  25. sbit dula=P2^6; //锁存器控制端定义
  26. sbit wela=P2^7;
  27. uchar num;

  28. void delay(uint z)
  29. {
  30.         uint x,y;
  31.         for(x=z;x>0;x--)
  32.                 for(y=110;y>0;y--);
  33. }

  34. void write_com(uchar com)
  35. {
  36. //        rw=0;
  37.         rs=0;
  38.         P1=com;
  39.         delay(5);
  40.         lcden=1;
  41.         delay(5);
  42.         lcden=0;
  43. }

  44. void write_data(uchar date)
  45. {
  46. //        rw=0;
  47.         rs=1;
  48.         P1=date;
  49.         delay(5);
  50.         lcden=1;
  51.         delay(5);
  52.         lcden=0;
  53. }


  54. void write_sfm(uchar add,uchar date)
  55. {
  56.         write_com(0x80+0x40+add);
  57.         write_data(0x30+date);
  58. }

  59. void init()
  60. {
  61.         dula=0;
  62.         wela=0;
  63.         lcden=0;
  64.         /*write_com(0x38);
  65.         write_com(0x0e);
  66.         write_com(0x06);
  67.         write_com(0x01);
  68.         write_com(0x80+0x10);
  69.         */
  70.         write_com(0x38);
  71.         write_com(0x0c);
  72.         write_com(0x06);
  73.         write_com(0x01);
  74.         write_com(0x80);
  75. }


  76. void zhongduan_init()                                             
  77. {
  78.         EA = 1;                                 
  79.     TH0=0x00;                                                                                                               
  80.         TL0=0x00;                                                                                                               
  81.         ET0=1;
  82.         ET1=1;               
  83.           TMOD = 0x15;// 打开定时器和计数器T0,因此矩形脉冲输入端接P3.4
  84.         TH1=0x3C; //50ms
  85.         TL1=0xB0;               
  86.     TR0 = 1;
  87.         TR1 = 1;
  88. }


  89. void main()
  90. {
  91.         P2=0xff;
  92.         init();
  93. //        flag=0;
  94.         zhongduan_init();                                      
  95.         while(1)
  96.         {
  97.         if(flag==0)
  98.         {
  99.                 EA=0;               //关闭中断
  100.                 write_com(0x80);
  101.                 for(num=0;num<15;num++)
  102.                 {
  103.                 write_data(table[num]);
  104.                 delay(20);
  105.                 }                       
  106. //速度       
  107.                 write_sfm(1,table1[0]);
  108.             write_sfm(2,table1[1]);
  109.             write_sfm(3,table1[2]);
  110. //时间               
  111.             write_sfm(10,table2[0]);
  112.                 write_sfm(11,table2[1]);
  113.                 write_sfm(12,table2[2]);
  114.                
  115. //            write_sfm(8,0x73);
  116.                 flag=1;
  117.                 EA=1;     
  118. //                while(1);          //开启中断
  119.         }
  120.         }
  121. }
  122.                                                                                                                                                                                
  123.                                                                      
  124. timer3() interrupt 3  //定时器中断时间到,就读取计数器值                        //3 为定时器1的中断号  1 定时器0的中断号 0 外部中断1 2 外部中断2  4 串口中断                                           
  125. {
  126. TH1=0X3C;                                                                                                                                       
  127. TL1=0XB0;                                                                                                                                                            
  128. i++;                                                                                                                                                                                                                    
  129. if(i==20) //1s才进行技术脉冲值显示,即每秒更新一次速度    这里一会儿要给!!!!!!!!!1                       
  130. {
  131.    time++;                     //记时间
  132.    time1++;
  133.    kop=TH0;//计数器计入脉冲,每来一个矩形脉冲计数值加1
  134.    kop=kop<<8;
  135.    kop=kop+TL0;                                                //kp单位是cm,周长20cm,20个空隙,一个空隙1cm                                       
  136.    beep=1;
  137.    if(kop>45)
  138.    {
  139.         beep=0;
  140.    }
  141.    table1[0]=kop/100;       //显示计数器的值即实际测得速度
  142.    table1[1]=kop%100/10;
  143.    table1[2]=kop%100%10;
  144.    table2[0]=time/100;       //显示计数器的值即实际测得速度
  145.    table2[1]=time%100/10;
  146.    table2[2]=time%100%10;
  147.    i=0;
  148.    TH0=0;//计数器速度获取后清零,进行下次获取
  149.    TL0=0;
  150.    flag=0;
  151.    if(time1==20)
  152.    {
  153.           
  154.         write_com(01);
  155.                    write_com(0x80);
  156.                    for(num=0;num<15;num++)
  157.                 {
  158.                 write_data(haode[num]);
  159.                 delay(20);
  160.                 }        
  161.                
  162.                 write_com(0x80+0x53);
  163.                 for(num=0;num<15;num++)
  164.                 {
  165.                 write_data(haode1[num]);
  166.                 delay(20);
  167.                 }
  168.     delay(300);
  169.    }
  170.    if(time1==10)
  171.            {
  172.           
  173.         write_com(01);
  174.                    write_com(0x80);
  175.                    for(num=0;num<15;num++)
  176.                 {
  177.                 write_data(hao[num]);
  178.                 delay(20);
  179.                 }        
  180.                
  181.                 write_com(0x80+0x53);
  182.                 for(num=0;num<15;num++)
  183.                 {
  184.                 write_data(hao1[num]);
  185.                 delay(20);
  186.                 }
  187.     delay(400);
  188.    }
  189. }
  190. }
  191.           
复制代码

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

Powered by 单片机教程网

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