找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机智能小车程序

[复制链接]
跳转到指定楼层
楼主
ID:466780 发表于 2019-1-12 00:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  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. #define yh01 0xf9    //高位   
  63. #define yl02 0x02 //低位              // 1790*1.09=1.9511         10
  64. #define yl03 0x0c //低位        // 1780*1.09=1.9402   10
  65. #define yl04 0x16 //低位       // 1770*1.09=1.9293   10
  66. #define yl05 0x20 //低位      // 1760*1.09=1.9184    10
  67. #define yl06 0x2a //低位        // 1750*1.09=1.9075    10
  68. #define yl07 0x34 //低位       // 1740*1.09= 1.8966    10
  69. #define yl08 0x3e //低位      // 1730*1.09=1.8857      10
  70. #define yl09 0x48 //低位      // 1720*1.09= 1.8748              10
  71. #define yl10 0x52 //低位      // 1710*1.09=1.8639               10
  72. #define yl11 0x5c //低位        // 1700*1.09=1.853     10
  73. #define yl12 0x66 //低位         // 1690*1.09=1.8421     10
  74. #define yl13 0x70 //低位      //1680*1.09=1.8321     10
  75. #define yl14 0x7a //低位      // 1670*1.09=1.8203     11
  76. #define yl15 0x84 //低位      // 1660*1.09=1.8094     11
  77. #define yl16 0x8e //低位      // 1650*1.09=1.7985     11
  78. #define yl17 0x98 //低位      // 1640*1.09=1.7876     11
  79. #define yl18 0xa2 //低位      // 1630*1.09=1.7767     11
  80. #define yl19 0xac //低位      // 1620*1.09=1.7658     11
  81. #define yl20 0xb6 //低位      // 1610*1.09=1.7549     11
  82. #define yl21 0xc0 //低位           // 1600*1.09= 1.7440                11   //右转角度
  83.      

  84. uchar h, l;
  85. uchar count2=14, count=0;
  86. uchar loadz,loady, dz,dy,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9;
  87. void pwm_init();
  88. void Time_Init();
  89. void motor();
  90. void delay(uint z);

  91. //*********主函数*****************/
  92. void main ()  
  93. {
  94.   
  95.      d2=k45;d3=k50;d5=k60;d7=k70;

  96.   P14=0;
  97.   delay(10000);
  98.      delay(10000);
  99.   delay(10000);
  100. Time_Init();
  101. pwm_init() ;
  102.                //延时发车
  103.   P0=0xff;
  104.   P2=0xfa;
  105.   h=0xfa;                  
  106.      l=0xe7;

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

  141. /************************************************************/
  142. void pwm_init()                        
  143. {
  144. CCON=0;                        // CR=0;开始不计时,可以省略
  145. CMOD=0X00;                    //频率选择,选系统时钟/12为PWM输出频率
  146.     CH=0;         //
  147. CL=0;                        //PCA计数器的计数值
  148. CCAP0H=k00;                      //初始PWM占空比100%
  149. CCAP0L=k00;                      //初始PWM占空比100%
  150. CCAP1H=k00;                      //初始PWM占空比100%
  151. CCAP1L=k00;                      //初始PWM占空比100%
  152.     PCA_PWM0=0X00;       //控制占空比的第九位为0
  153. PCA_PWM1=0X00;                                                
  154. CCAPM0=0X42;                   //工作方式选择,选择为PWM输出工作方式
  155. CCAPM1=0X42;                   //工作方式选择,选择为PWM输出工作方式
  156. CR=1;         //启动PCA定时器
  157. }

  158. void motor()
  159. {
  160. CCAP0H=dz;     //CCAP0L CCAP0H是捕捉/ 比较寄存器, 代表的是调节占空比,CCAP0L= CCAP0H=0x80,占空比输出为50% 。
  161. CCAP0L=dz;     //PWM设置占空比
  162. CCAP1H=dy;
  163. CCAP1L=dy;     //PWM设置占空比
  164. }

  165. void delay(uint z)    //延时 Z 毫秒
  166. {
  167. uint x,y;
  168. for(x=z;x>0;x--)
  169.   for(y=110;y>0;y--);
  170. }


  171. /*************************定时中断1输出pwm波****************************/
  172. void Time0_Int() interrupt 1
  173. {
  174. TH0=h;
  175. TL0=l;
  176. if(count < 1)
  177.   pwm = 1;
  178. else
  179.   pwm = 0;
  180. count++;
  181. if(count >= count2)
  182.   count = 0;
  183. }


复制代码


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

使用道具 举报

沙发
ID:1 发表于 2019-1-12 02:24 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

板凳
ID:467951 发表于 2019-1-14 16:58 | 只看该作者
以前做的电磁赛道的

小车控制程序(2018).zip

102.52 KB, 下载次数: 7, 下载积分: 黑币 -5

回复

使用道具 举报

地板
ID:468046 发表于 2019-1-14 17:10 | 只看该作者
看不懂
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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