找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机光电智能车程序

[复制链接]
跳转到指定楼层
楼主
ID:467142 发表于 2019-1-12 21:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
此程序为光电智能车程序
  1. #include<stc12c5a.h>
  2. #include <intrins.h>
  3. #include <math.h>
  4. #include <stdio.h>                                     
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. sbit S1=P2^4;
  8. sbit S2=P2^5;       
  9. sbit S3=P2^6;
  10. sbit S4=P2^7;

  11.                        //电机pwm输入接口为P1^3和P1^4  可通过控制2和5控制电机停转

  12. //sbit P13=P1^3;
  13. //sbit P14=P1^4;
  14. //sbit IN1=P1^2;
  15. //sbit IN2=P1^5;
  16. sbit pwm=P3^5;

  17. #define        k10 0xe5
  18. #define        k20 0xcc
  19. #define        k30 0xb3
  20. #define        k35 0xa6
  21. #define        k40 0x99
  22. #define        k45 0x8c
  23. #define        k50 0x80
  24. #define        k55 0x73
  25. #define        k60 0x66
  26. #define        k65 0x59
  27. #define        k70 0x4d
  28. #define        k75 0x40
  29. #define        k80 0x33
  30. #define        k85 0x26
  31. #define        k90 0x1a
  32. #define        k95 0x0d
  33. #define        k00 0x00  //控制电机转速的几个中断pwm波的占空比
  34.                                    //控制电机转速的几个中断pwm波的占空比
  35.                                                                                                                                   
  36. #define        mh00 0xf8                                  //中间角度初值        //打直第一次出现吧
  37. #define        ml00 0xee                                  //  1810*1.09=1.9729                 10       
  38.                                                           


  39. #define        zh01 0xf8        //高位

  40. #define        zl20 0x26        //低位               //2010*1.09=2.1708                 9
  41. #define        zl19 0x30   //低位                     //2000*1.09=2.18                9       
  42. #define        zl18 0x3a        //低位                                //1990*1.09=2.1691             9               
  43. #define        zl17 0x44        //低位                                //1980*1.09=2.1582             9                       
  44. #define        zl16 0x4e        //低位                                //1970*1.09=2.1473                 9                       
  45. #define        zl15 0x58        //低位                                //1960*1.09=2.1364       9               
  46. #define        zl14 0x62        //低位                                //1950*1.09=2.1255             9         
  47. #define        zl13 0x6c        //低位                                //1940*1.09=2.1146                 9                         
  48. #define        zl12 0x76        //低位                           // 1930*1.09=2.1037                 9
  49. #define        zl11 0x80        //低位                              // 1920*1.09=2.0928                 10
  50. #define        zl10 0x8a        //低位                          // 1910*1.09=2.0819                  10
  51. #define        zl09 0x94        //低位                                        // 1900*1.09=2.071         10
  52. #define        zl08 0x9e        //低位                          //  1890*1.09=2.0601                 10               
  53. #define        zl07 0xa8        //低位                          //  1880*1.09=2.0492                 10                         
  54. #define        zl06 0xb2        //低位                          //  1870*1.09=2.0383                 10       
  55. #define        zl05 0xbc        //低位                          //  1860*1.09=2.0274                 10                       
  56. #define        zl04 0xc6        //低位                          //  1850*1.09=2.0165                 10                       
  57. #define        zl03 0xd0        //低位                          //1840*1.09=2.0056                  10                         
  58. #define        zl02 0xda   //低位            //  1820*1.09=1.9838                 10         //左转角度


  59. #define        yh00 0xf8           //高位
  60.                            
  61. #define        yl01 0xf8         //低位                            // 1800*1.09=1.962                 10
  62.        
  63. #define        yh01 0xf9           //高位          

  64. #define        yl02 0x02        //低位                            // 1790*1.09=1.9511         10
  65. #define        yl03 0x0c        //低位                                           // 1780*1.09=1.9402                 10
  66. #define        yl04 0x16        //低位                                          // 1770*1.09=1.9293                        10
  67. #define        yl05 0x20        //低位                                         // 1760*1.09=1.9184                         10
  68. #define        yl06 0x2a        //低位                                    // 1750*1.09=1.9075                         10
  69. #define        yl07 0x34        //低位                                   // 1740*1.09= 1.8966                         10
  70. #define        yl08 0x3e        //低位                                  // 1730*1.09=1.8857                           10
  71. #define        yl09 0x48        //低位                                  // 1720*1.09=        1.8748              10
  72. #define        yl10 0x52        //低位                                  // 1710*1.09=1.8639               10
  73. #define        yl11 0x5c        //低位                             // 1700*1.09=1.853                                 10
  74. #define        yl12 0x66        //低位                              // 1690*1.09=1.8421                                 10
  75. #define        yl13 0x70        //低位                                  //1680*1.09=1.8321                                 10
  76. #define        yl14 0x7a        //低位                                  // 1670*1.09=1.8203                                 11
  77. #define        yl15 0x84        //低位                                  // 1660*1.09=1.8094                                 11
  78. #define        yl16 0x8e        //低位                                  // 1650*1.09=1.7985                                 11
  79. #define        yl17 0x98        //低位                                  // 1640*1.09=1.7876                                 11
  80. #define        yl18 0xa2        //低位                                  // 1630*1.09=1.7767                                 11
  81. #define        yl19 0xac        //低位                                  // 1620*1.09=1.7658                                 11
  82. #define        yl20 0xb6        //低位                                  // 1610*1.09=1.7549                                 11
  83. #define        yl21 0xc0        //低位                         // 1600*1.09= 1.7440                11          //右转角度
  84.      


  85. uchar h, l;
  86. uchar count2=14, count=0;
  87. uchar loadz,loady, dz,dy,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9;

  88. void pwm_init();

  89. void Time_Init();
  90. void motor();
  91. void delay(uint z);


  92. //*********主函数*****************/
  93. void main ()               
  94. {       
  95.          
  96.             d2=k45;d3=k50;d5=k60;d7=k70;
  97.        
  98.          P14=0;
  99.          delay(10000);
  100.      delay(10000);
  101.          delay(10000);       
  102.         Time_Init();
  103.         pwm_init()        ;
  104.                                     //延时发车
  105.          P0=0xff;
  106.          P2=0xfa;
  107.          h=0xfa;                         
  108.      l=0xe7;


  109.         dz=dy=d7;                //        dz<dy  左转                                                                                                                         
  110. while(1)                                                                                                                                                                                          //dy大表示右边轮子转的快
  111.           {                                                                                                                                                                                                                                         //左边轮子接P0^3                                                                                                                                                                                                                 //右边轮子接P0^4
  112.                         if(P0==0x80) {h=0xfa;l=0x1F; count2=13;dz=d2;dy=d5; }
  113.                                   //if(P0==0xc0) {h=0xfa;l=0x4d;count2=13;dy=d5;dz=d8;}
  114.                                if(P0==0x40) {h=0xfa;l=0x7D;count2=13;dy=d3;dz=d5;}
  115.                                         //if(P0==0x60) {h=0xfa;l=0x7f;count2=13;dy=d5;dz=d7;}
  116.                                          if(P0==0x20) {h=0xfa;l=0xBD;count2=14;dy=d3;dz=d5;}
  117.                                           //if(P0==0x30) {h=0xfa;l=0xb1a;count2=14;dy=d6;dz=d7;}
  118.                                            if(P0==0x10) {h=0xfa;l=0xD2;count2=14;dy=d7;dz=d7;}
  119.                        // if(P0==0x00||0xff) {h=0xfa;l=0xfc;count2=14;dz=d8;dy=d8;}                    //4度 l改变19
  120.                                        if(P0==0x08) {h=0xfA;l=0xFC;count2=15;dy=d7;dz=d7;}
  121.                                              //if(P0==0x0c) {h=0xfb;l=0x47;count2=15;dy=d7;dz=d6;}                //15
  122.                                      if(P0==0x04) {h=0xfb;l=0x11;count2=15;dy=d5;dz=d3;}
  123.                                     //if(P0==0x06) {h=0xfb;l=0x79;count2=15;dy=d7;dz=d5;} //50                                左转
  124.                                if(P0==0x02) {h=0xfb;l=0x51;count2=16;dy=d5;dz=d3;}
  125.                           //if(P0==0x03) {h=0xfb;l=0xab;count2=16;dy=d8;dz=d5;}                 /39
  126.                              if(P0==0x01) {h=0xfb;l=0xAF;count2=16;dy=d5;dz=d2;}
  127.                                 motor();
  128.           }                                    
  129. }                       
  130. /**************定时器初始化数据**********************/       

  131. void Time_Init()
  132. {
  133.         TMOD = 0x01 ;        //定时器0工作方式1,16位定时器
  134.         TH0 = h;
  135.         TL0 = l;
  136.         EA=1;
  137.         ET0=1;
  138.         TR0 = 1;
  139. }
  140.                                                                                             
  141. /***************pwm初始化***********************************
  142.                
  143.        

  144. /************************************************************/
  145. void pwm_init()                               
  146. {
  147.         CCON=0;                                                    // CR=0;开始不计时,可以省略
  148.         CMOD=0X00;                                                //频率选择,选系统时钟/12为PWM输出频率
  149.     CH=0;                                                                        //
  150.         CL=0;                                                    //PCA计数器的计数值
  151.         CCAP0H=k00;                                    //初始PWM占空比100%
  152.         CCAP0L=k00;                                    //初始PWM占空比100%
  153.         CCAP1H=k00;                                    //初始PWM占空比100%
  154.         CCAP1L=k00;                                    //初始PWM占空比100%

  155.     PCA_PWM0=0X00;                                                        //控制占空比的第九位为0
  156.         PCA_PWM1=0X00;                                                                                                                                                                                                                                                                                                                                                                                        
  157.         CCAPM0=0X42;                                        //工作方式选择,选择为PWM输出工作方式
  158.         CCAPM1=0X42;                                        //工作方式选择,选择为PWM输出工作方式
  159.         CR=1;                                                                        //启动PCA定时器
  160. }



  161. void motor()
  162. {
  163.         CCAP0H=dz;                                        //CCAP0L CCAP0H是捕捉/ 比较寄存器, 代表的是调节占空比,CCAP0L= CCAP0H=0x80,占空比输出为50% 。
  164.         CCAP0L=dz;                                        //PWM设置占空比
  165.         CCAP1H=dy;
  166.         CCAP1L=dy;                                        //PWM设置占空比
  167. }
  168.        
  169. void delay(uint z)                                //延时 Z 毫秒
  170. {
  171.         uint x,y;
  172.         for(x=z;x>0;x--)
  173.                 for(y=110;y>0;y--);
  174. }




  175. /*************************定时中断1输出pwm波****************************/
  176. void Time0_Int() interrupt 1
  177. {       

  178.         TH0=h;
  179.         TL0=l;

  180.         if(count < 1)
  181.                 pwm = 1;
  182.         else
  183.                 pwm = 0;

  184.         count++;

  185.         if(count >= count2)
  186.                 count = 0;

  187. }
复制代码

全部资料51hei下载地址:
智能车·程序 - 副本.zip (195.6 KB, 下载次数: 7)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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