【TI 技术资料分享】MSP430单片机控制坦克打靶

2019-07-30 17:46发布

基于MSP430单片机控制坦克打靶C语言源程序代码 1基于MSP430单片机控制坦克打靶C语言源程序代码.zip (30.63 KB, 下载次数: 2) 2015-3-9 21:34 上传 点击文件名下载附件
  1. /*************************   Header Files   ***********************************/

  2. #include <msp430x14x.h>
  3. #include "sysconfiger.h"

  4. /****************************  Tab Code ***************************************/

  5. //步进电机驱动编码
  6. unsigned char bjdj[] = {0x10, 0x20, 0x40, 0x80};//P3口高4位驱动

  7. /****************************  Variable ***************************************/

  8. unsigned char miao = 0, m16 = 0;
  9. //Debug
  10. unsigned char test = 0, cish = 0;


  11. /****************************** 服务函数  *************************************/
  12.               
  13. /****************************  Interrupt Function *****************************/

  14. #pragma vector = TIMERB0_VECTOR
  15. __interrupt void Timerb0(void)
  16. {
  17.   unsigned char tP1IN = P1IN & 0x07;//BIT1
  18.   static unsigned char flag = 1;
  19.   
  20.   m16++;
  21.   if((cish < 5) && flag)//Don't finish
  22.   {
  23.     if(m16 == 16)//1/16s(62.5ms) 中断一次
  24.     {
  25.         m16 = 0;
  26.         miao++;
  27.    
  28.         if(miao == 60)//60s 定时
  29.         {
  30.           P1IE = 0x00;//Disable Port1 Interruption
  31.           flag = 0;
  32.           stop();//car stop
  33.         }
  34.      }
  35.   }
  36.   else//cish == 5;
  37.   {
  38.     P6OUT ^= BIT7;
  39.     P2OUT ^= BIT7;
  40.     if(m16 == 32)
  41.     {
  42.       P6OUT = 0xff;//Close Buzzer
  43.       P1IE  = 0x00;//Disable Port1 Interruption
  44.       TBCCTL0 &= ~CCIE;//Disable TimerB
  45.     }
  46.   }
  47.   
  48.   if(tP1IN == 0x02)//转弯成功后P1.1 == 1,直行,每(62.5ms)检测一次
  49.   {
  50.     ahead();//car goon
  51.     test = 0;//
  52.   }
  53.   
  54.   P2OUT ^= BIT0;//LED闪烁灯
  55. }

  56. /*****************************  Interrupt Function ****************************/
  57. //寻迹由端口1接入 进入中断后 查询引脚电平 做出相应动作 实现自动寻迹
  58. //左    中    右
  59. //P1.2  P1.1  P1.0   P1IN    状态
  60. //  0     1    0      0x02   直走
  61. //  1     1    0      0x06   右偏转 左转校正
  62. //  0     1    1      0x03   左偏转 右转校正
  63. //  1     1    1      0x07   射击黑线 根据要求执行
  64. //偏离2cm检测
  65. //  1     0    0      0x04   右偏转2cm 左转校正
  66. //  0     0    1      0x01   左偏转2cm 右转校正
  67. //端口配置
  68. //  P1.0 ~ P1.2
  69. //  P1DIR  = 0xf8;//1111 1000
  70. //  P1IE   = 0x07;//0000 0111
  71. //  P1IES  = 0x02;//0000 0010
  72. //  P2.3  左车轮   
  73. //  P2.4  右车轮
  74. //Debug 状态分配 0 - ahead,  1 - turn right, 2 - turn left, 3 - stop, 4 - others

  75. #pragma vector = PORT1_VECTOR
  76. __interrupt void Port1(void)
  77. {
  78.   unsigned char tPIN = P1IN & 0x07;
  79.   
  80.   switch(tPIN)
  81.   {
  82.       case 0x01:// > 2cm turn right
  83.         turn_right();
  84.         warning();
  85.         test = 1;
  86.         break;
  87.         
  88.       case 0x02://ahead
  89.         ahead();
  90.         test = 0;
  91.         break;
  92.         
  93.       case 0x03://turn right
  94.         turn_right();
  95.         test = 1;
  96.         break;
  97.         
  98.       case 0x04:// > 2cm turn left
  99.         turn_left();
  100.         warning();
  101.         test = 2;
  102.         break;
  103.         
  104.       case 0x06://turn left
  105.         turn_left();
  106.         test = 2;
  107.         break;
  108.         
  109.       case 0x07://black line
  110.         warning();//声光报警
  111.         stop();//停车
  112.         test = 3;
  113.         cish++;
  114.         delay(200);//
  115.         ahead();
  116.         break;
  117.         
  118.       default://others
  119.         warning();
  120.         test = 4;
  121.         break;
  122.   }
  123.   
  124.   P1IFG &= 0x00;//Clear P1IFG
  125.   P2OUT ^= BIT1;//Debug Test
  126. }

  127. /*******************************  Main  ***************************************/
  128. void main()
  129. {
  130.   //Stop WDT
  131.   WDTCTL  = WDTPW + WDTHOLD;

  132.   //端口配置
  133.   IO_cfg();

  134.   //时钟配置
  135.   Timer_cfg();
  136.   
  137.   //Open EA
  138.   _EINT();
  139.   
  140.   while(1)
  141.   {
  142.     disp_LED();
  143.   }
  144. }
  145. /******************************************************************************/
复制代码

0条回答

一周热门 更多>