智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 13638|回复: 6
打印 上一主题 下一主题

基于07组委会的(简化)四驱源程序代码(未完)(武汉工程大学kcmxi)

[复制链接]

4

主题

5

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
威望
183
贡献
1000
兑换币
0
注册时间
2011-1-31
在线时间
0 小时
跳转到指定楼层
1#
发表于 2011-1-31 09:59:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /****************************************************************************/
  2. /*                        "kit07_4wd.c"       (武汉工程大学-copyright )                 */
  3. /*                                                                                      2009.07                      */
  4. /****************************************************************************/

  5. /*======================================*/
  6. /*                         Include                                                 */
  7. /*======================================*/
  8. #include    <machine.h>
  9. #include    "h8_3048.h"


  10. #define         PWM_CYCLE       49151   /* PWM 16ms       */
  11.                                                                      /* PWM_CYCLE =              */
  12.                                                                      /*      16[ms] / 325.5[ns]  */
  13.                                                                      /*               = 49152    */
  14. #define         F_PWM_CYCLE       3071                                         
  15. #define         SERVO_CENTER    5000   
  16. #define         HANDLE_STEP         26     



  17. #define         MASK2_2         0x66   
  18. #define         MASK2_0         0x60   
  19. #define         MASK0_2         0x06   
  20. #define         MASK3_3         0xe7   
  21. #define         MASK0_3         0x07   
  22. #define         MASK3_0         0xe0   
  23. #define         MASK4_0         0xf0   
  24. #define         MASK0_4         0x0f   
  25. #define         MASK4_4         0xff   

  26. #define         speed_r(x,y)    speed(x,y)  /* speed  = speed_r     */
  27. #define         speed2_r(x,y)   speed2(x,y) /* speed2 = speed2_r    */

  28. void init( void );
  29. void timer( unsigned long timer_set );
  30. int check_crossline( void );
  31. int check_rightline( void );
  32. int check_leftline( void );
  33. unsigned char sensor_inp( unsigned char mask );
  34. unsigned char dipsw_get( void );
  35. unsigned char pushsw_get( void );
  36. unsigned char startbar_get( void );
  37. void led_out( unsigned char led );
  38. void speed( int accele_l, int accele_r );
  39. void speed2( int accele_l, int accele_r );
  40. void speed_f( int accele_l, int accele_r );
  41. void speed2_f( int accele_l, int accele_r );
  42. void handle( int angle );

  43. unsigned long   cnt0;                  
  44. unsigned long   cnt1;                 
  45. int             pattern;               

  46. void main( void )
  47. {
  48.     int     i;
  49.     int     m1, m2, m3, m4;
  50.     unsigned char c;

  51.     init();                           
  52.     set_ccr( 0x00 );                 

  53.     handle( 0 );
  54.     speed( 0, 0 );

  55.     while( 1 ) {
  56.         if( cnt1 < 1000 ) {
  57.             led_out( 0x1 );
  58.             i = 50;
  59.         } else if( cnt1 < 2000 ) {
  60.             led_out( 0x0 );
  61.             i = 0;
  62.         } else if( cnt1 < 3000 ) {
  63.             led_out( 0x2 );
  64.             i = -50;
  65.         } else if( cnt1 < 4000 ) {
  66.             led_out( 0x0 );
  67.             i = 0;
  68.         } else {
  69.             cnt1 = 0;
  70.         }
  71.         c = dipsw_get();
  72.         if( c & 0x8) m1 = i; else m1 = 0;
  73.         if( c & 0x4) m2 = i; else m2 = 0;
  74.         if( c & 0x2) m3 = i; else m3 = 0;
  75.         if( c & 0x1) m4 = i; else m4 = 0;
  76.         speed2_f( m1, m2 );         
  77.         speed2_r( m3, m4 );         
  78.     }

  79.     while( 1 ) {
  80.     switch( pattern ) {

  81.        case 0:
  82.         if( pushsw_get() ) {
  83.             pattern = 1;
  84.             cnt1 = 0;
  85.             break;
  86.         }
  87.         if( cnt1 < 100 ) {           
  88.             led_out( 0x1 );
  89.         } else if( cnt1 < 200 ) {
  90.             led_out( 0x2 );
  91.         } else {
  92.             cnt1 = 0;
  93.         }
  94.         break;
  95.     case 1:
  96.      
  97.         if( !startbar_get() ) {
  98.             
  99.             led_out( 0x0 );
  100.             pattern = 11;
  101.             cnt1 = 0;
  102.             break;
  103.         }
  104.         if( cnt1 < 50 ) {      
  105.             led_out( 0x1 );
  106.         } else if( cnt1 < 100 ) {
  107.             led_out( 0x2 );
  108.         } else {
  109.             cnt1 = 0;
  110.         }
  111.         break;
  112.     case 11:
  113.    
  114.         if( check_crossline() ) {      
  115.             pattern = 21;
  116.             break;
  117.         }
  118.         if( check_rightline() ) {     
  119.             pattern = 51;
  120.             break;
  121.         }
  122.         if( check_leftline() ) {      
  123.             pattern = 61;
  124.             break;
  125.         }
  126.         switch( sensor_inp(MASK3_3) ) {
  127.             case 0x00:
  128.                
  129.                 handle( 0 );
  130.                 speed( 100 ,100 );
  131.                 break;
  132.             case 0x04:
  133.               
  134.                 handle( 5 );
  135.                 speed( 100 ,100 );
  136.                 break;
  137.             case 0x06:
  138.          
  139.                 handle( 10 );
  140.                 speed( 80 ,67 );
  141.                 break;
  142.             case 0x07:
  143.             
  144.                 handle( 15 );
  145.                 speed( 50 ,38 );
  146.                 break;
  147.             case 0x03:
  148.                 handle( 25 );
  149.                 speed( 30 ,19 );
  150.                 pattern = 12;
  151.                 break;
  152.             case 0x20:
  153.                 handle( -5 );
  154.                 speed( 100 ,100 );
  155.                 break;
  156.             case 0x60:
  157.                
  158.                 handle( -10 );
  159.                 speed( 67 ,80 );
  160.                 break;
  161.             case 0xe0:
  162.                handle( -15 );
  163.                 speed( 38 ,50 );
  164.                 break;
  165.             case 0xc0:
  166.                
  167.                 handle( -25 );
  168.                 speed( 19 ,30 );
  169.                 pattern = 13;
  170.                 break;
  171.             default:
  172.                 break;
  173.         }
  174.         break;
  175.     case 12:
  176.                if( check_crossline() ) {      
  177.             pattern = 21;
  178.             break;
  179.         }
  180.         if( check_rightline() ) {      
  181.             pattern = 51;
  182.             break;
  183.         }
  184.         if( check_leftline() ) {      
  185.             pattern = 61;
  186.             break;
  187.         }
  188.         if( sensor_inp(MASK3_3) == 0x06 ) {
  189.             pattern = 11;
  190.         }
  191.         break;
  192.     case 13:
  193.                 if( check_crossline() ) {                pattern = 21;
  194.             break;
  195.         }
  196.         if( check_rightline() ) {      
  197.             pattern = 51;
  198.             break;
  199.         }
  200.         if( check_leftline() ) {        
  201.             pattern = 61;
  202.             break;
  203.         }
  204.         if( sensor_inp(MASK3_3) == 0x60 ) {
  205.             pattern = 11;
  206.         }
  207.         break;
复制代码

4

主题

5

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
威望
183
贡献
1000
兑换币
0
注册时间
2011-1-31
在线时间
0 小时
2#
 楼主| 发表于 2011-1-31 10:00:11 | 只看该作者
  1.     case 21:
  2.         
  3.         led_out( 0x3 );
  4.         handle( 0 );
  5.         speed( 0 ,0 );
  6.         pattern = 22;
  7.         cnt1 = 0;
  8.         break;
  9.     case 22:
  10.         
  11.         if( cnt1 > 100 ) {
  12.             pattern = 23;
  13.             cnt1 = 0;
  14.         }
  15.         break;
  16.     case 23:
  17.         
  18.         if( sensor_inp(MASK4_4)==0xf8 ) {
  19.             
  20.             led_out( 0x1 );
  21.             handle( -38 );
  22.             speed( 10 ,50 );
  23.             pattern = 31;
  24.             cnt1 = 0;
  25.             break;
  26.         }
  27.         if( sensor_inp(MASK4_4)==0x1f ) {
  28.                         led_out( 0x2 );
  29.             handle( 38 );
  30.             speed( 50 ,10 );
  31.             pattern = 41;
  32.             cnt1 = 0;
  33.             break;
  34.         }
  35.         switch( sensor_inp(MASK3_3) ) {
  36.             case 0x00:
  37.          
  38.                 handle( 0 );
  39.                 speed( 40 ,40 );
  40.                 break;
  41.             case 0x04:
  42.             case 0x06:
  43.             case 0x07:
  44.             case 0x03:
  45.               
  46.                 handle( 8 );
  47.                 speed( 40 ,35 );
  48.                 break;
  49.             case 0x20:
  50.             case 0x60:
  51.             case 0xe0:
  52.             case 0xc0:
  53.          
  54.                 handle( -8 );
  55.                 speed( 35 ,40 );
  56.                 break;
  57.         }
  58.         break;
  59.     case 31:
  60.       
  61.         if( cnt1 > 200 ) {
  62.             pattern = 32;
  63.             cnt1 = 0;
  64.         }
  65.         break;
  66.     case 32:
  67.         
  68.         if( sensor_inp(MASK3_3) == 0x60 ) {
  69.             led_out( 0x0 );
  70.             pattern = 11;
  71.             cnt1 = 0;
  72.         }
  73.         break;
  74.     case 41:
  75.              if( cnt1 > 200 ) {
  76.             pattern = 42;
  77.             cnt1 = 0;
  78.         }
  79.         break;
  80.     case 42:
  81.      
  82.         if( sensor_inp(MASK3_3) == 0x06 ) {
  83.             led_out( 0x0 );
  84.             pattern = 11;
  85.             cnt1 = 0;
  86.         }
  87.         break;
  88.     case 51:
  89.   
  90.         led_out( 0x2 );
  91.         handle( 0 );
  92.         speed( 0 ,0 );
  93.         pattern = 52;
  94.         cnt1 = 0;
  95.         break;
  96.     case 52:
  97.    
  98.         if( cnt1 > 100 ) {
  99.             pattern = 53;
  100.             cnt1 = 0;
  101.         }
  102.         break;
  103.     case 53:
  104.      
  105.         if( sensor_inp(MASK4_4) == 0x00 ) {
  106.             handle( 15 );
  107.             speed( 40 ,31 );
  108.             pattern = 54;
  109.             cnt1 = 0;
  110.             break;
  111.         }
  112.         switch( sensor_inp(MASK3_3) ) {
  113.             case 0x00:
  114.            
  115.                 handle( 0 );
  116.                 speed( 40 ,40 );
  117.                 break;
  118.             case 0x04:
  119.             case 0x06:
  120.             case 0x07:
  121.             case 0x03:
  122.            
  123.                 handle( 8 );
  124.                 speed( 40 ,35 );
  125.                 break;
  126.             case 0x20:
  127.             case 0x60:
  128.             case 0xe0:
  129.             case 0xc0:
  130.          
  131.                 handle( -8 );
  132.                 speed( 35 ,40 );
  133.                 break;
  134.             default:
  135.                 break;
  136.         }
  137.         break;
  138.     case 54:
  139.       
  140.         if( sensor_inp( MASK4_4 ) == 0x3c ) {
  141.             led_out( 0x0 );
  142.             pattern = 11;
  143.             cnt1 = 0;
  144.         }
  145.         break;
  146.     case 61:
  147.       
  148.         led_out( 0x1 );
  149.         handle( 0 );
  150.         speed( 0 ,0 );
  151.         pattern = 62;
  152.         cnt1 = 0;
  153.         break;
  154.     case 62:
  155.       
  156.         if( cnt1 > 100 ) {
  157.             pattern = 63;
  158.             cnt1 = 0;
  159.         }
  160.         break;
  161.     case 63:
  162.       
  163.         if( sensor_inp(MASK4_4) == 0x00 ) {
  164.             handle( -15 );
  165.             speed( 31 ,40 );
  166.             pattern = 64;
  167.             cnt1 = 0;
  168.             break;
  169.         }
  170.         switch( sensor_inp(MASK3_3) ) {
  171.             case 0x00:
  172.             
  173.                 handle( 0 );
  174.                 speed( 40 ,40 );
  175.                 break;
  176.             case 0x04:
  177.             case 0x06:
  178.             case 0x07:
  179.             case 0x03:
  180.             
  181.                 handle( 8 );
  182.                 speed( 40 ,35 );
  183.                 break;
  184.             case 0x20:
  185.             case 0x60:
  186.             case 0xe0:
  187.             case 0xc0:
  188.               
  189.                 handle( -8 );
  190.                 speed( 35 ,40 );
  191.                 break;
  192.             default:
  193.                 break;
  194.         }
  195.         break;
  196.     case 64:
  197.         
  198.         if( sensor_inp( MASK4_4 ) == 0x3c ) {
  199.             led_out( 0x0 );
  200.             pattern = 11;
  201.             cnt1 = 0;
  202.         }
  203.         break;
  204.     default:
  205.       
  206.         pattern = 0;
  207.         break;
  208.     }
  209.     }
  210. }

  211. void init( void )
  212. {
  213.    
  214.     P1DDR = 0xff;
  215.     P2DDR = 0xff;
  216.     P3DDR = 0xff;
  217.     P4DDR = 0xff;
  218.     P5DDR = 0xff;
  219.     P6DDR = 0xf0;                       
  220.     P8DDR = 0xff;
  221.     P9DDR = 0xf7;                       
  222.     PADDR = 0xff;
  223.     PBDR  = 0xc0;
  224.     PBDDR = 0xfe;                     

  225.     ITU0_TCR = 0x23;                  
  226.     ITU0_GRA = F_PWM_CYCLE;           
  227.     ITU0_GRB = 0;                     
  228.     ITU0_IER = 0x01;                  
  229.     ITU1_TCR = 0x23;               
  230.     ITU1_GRA = F_PWM_CYCLE;            
  231.     ITU1_GRB = 0;                     
  232.    
  233.     ITU3_TCR = 0x23;
  234.     ITU_FCR  = 0x3e;
  235.     ITU3_GRA = PWM_CYCLE;           
  236.     ITU3_GRB = ITU3_BRB = 0;         
  237.     ITU4_GRA = ITU4_BRA = 0;           
  238.     ITU4_GRB = ITU4_BRB = SERVO_CENTER;
  239.     ITU_TOER = 0x38;

  240.     ITU_MDR = 0x03;                  
  241.     ITU_STR = 0x1f;                  
  242. }

  243. #pragma interrupt( interrupt_timer0 )
  244. void interrupt_timer0( void )
  245. {
  246.     ITU0_TSR &= 0xfe;                 
  247.     cnt0++;
  248.     cnt1++;
  249. }

  250. void timer( unsigned long timer_set )
  251. {
  252.     cnt0 = 0;
  253.     while( cnt0 < timer_set );
  254. }

  255. unsigned char sensor_inp( unsigned char mask )
  256. {
  257.     unsigned char sensor;
  258.     sensor  = ~P7DR;
  259.     sensor  &= 0xef;
  260.     if( sensor & 0x08 ) sensor |= 0x10;
  261.     sensor &= mask;
  262.     return sensor;
  263. }

  264. int check_crossline( void )
  265. {
  266.     unsigned char b;
  267.     int ret;
  268.     ret = 0;
  269.     b = sensor_inp(MASK3_3);
  270.     if( b==0xe7 ) {
  271.         ret = 1;
  272.     }
  273.     return ret;
  274. }

  275. int check_rightline( void )
  276. {
  277.     unsigned char b;
  278.     int ret;
  279.     ret = 0;
  280.     b = sensor_inp(MASK4_4);
  281.     if( b==0x1f ) {
  282.         ret = 1;
  283.     }
  284.     return ret;
  285. }

  286. int check_leftline( void )
  287. {
  288.     unsigned char b;
  289.     int ret;
  290.     ret = 0;
  291.     b = sensor_inp(MASK4_4);
  292.     if( b==0xf8 ) {
  293.         ret = 1;
  294.     }
  295.     return ret;
  296. }

  297. unsigned char dipsw_get( void )
  298. {
  299.     unsigned char sw;
  300.     sw  = ~P6DR;                     
  301.     return  sw;
  302. }

  303. unsigned char pushsw_get( void )
  304. {
  305.     unsigned char sw;
  306.     sw  = ~PBDR;                     
  307.     sw &= 0x01;
  308.     return  sw;
  309. }
复制代码
回复 支持 反对

使用道具 举报

0

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
240
威望
186
贡献
26
兑换币
2
注册时间
2012-5-2
在线时间
14 小时
3#
发表于 2012-8-2 14:17:35 | 只看该作者
感谢,收下!!
回复 支持 反对

使用道具 举报

2

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
821
威望
406
贡献
279
兑换币
270
注册时间
2012-12-8
在线时间
68 小时
4#
发表于 2012-12-12 21:49:37 | 只看该作者
顶一个
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 23:09 , Processed in 0.069212 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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