基于MSP430单片机控制坦克打靶C语言源程序代码
1基于MSP430单片机控制坦克打靶C语言源程序代码.zip
(30.63 KB, 下载次数: 2)
2015-3-9 21:34 上传
点击文件名下载附件
- /************************* Header Files ***********************************/
- #include <msp430x14x.h>
- #include "sysconfiger.h"
- /**************************** Tab Code ***************************************/
- //步进电机驱动编码
- unsigned char bjdj[] = {0x10, 0x20, 0x40, 0x80};//P3口高4位驱动
- /**************************** Variable ***************************************/
- unsigned char miao = 0, m16 = 0;
- //Debug
- unsigned char test = 0, cish = 0;
- /****************************** 服务函数 *************************************/
-
- /**************************** Interrupt Function *****************************/
- #pragma vector = TIMERB0_VECTOR
- __interrupt void Timerb0(void)
- {
- unsigned char tP1IN = P1IN & 0x07;//BIT1
- static unsigned char flag = 1;
-
- m16++;
- if((cish < 5) && flag)//Don't finish
- {
- if(m16 == 16)//1/16s(62.5ms) 中断一次
- {
- m16 = 0;
- miao++;
-
- if(miao == 60)//60s 定时
- {
- P1IE = 0x00;//Disable Port1 Interruption
- flag = 0;
- stop();//car stop
- }
- }
- }
- else//cish == 5;
- {
- P6OUT ^= BIT7;
- P2OUT ^= BIT7;
- if(m16 == 32)
- {
- P6OUT = 0xff;//Close Buzzer
- P1IE = 0x00;//Disable Port1 Interruption
- TBCCTL0 &= ~CCIE;//Disable TimerB
- }
- }
-
- if(tP1IN == 0x02)//转弯成功后P1.1 == 1,直行,每(62.5ms)检测一次
- {
- ahead();//car goon
- test = 0;//
- }
-
- P2OUT ^= BIT0;//LED闪烁灯
- }
- /***************************** Interrupt Function ****************************/
- //寻迹由端口1接入 进入中断后 查询引脚电平 做出相应动作 实现自动寻迹
- //左 中 右
- //P1.2 P1.1 P1.0 P1IN 状态
- // 0 1 0 0x02 直走
- // 1 1 0 0x06 右偏转 左转校正
- // 0 1 1 0x03 左偏转 右转校正
- // 1 1 1 0x07 射击黑线 根据要求执行
- //偏离2cm检测
- // 1 0 0 0x04 右偏转2cm 左转校正
- // 0 0 1 0x01 左偏转2cm 右转校正
- //端口配置
- // P1.0 ~ P1.2
- // P1DIR = 0xf8;//1111 1000
- // P1IE = 0x07;//0000 0111
- // P1IES = 0x02;//0000 0010
- // P2.3 左车轮
- // P2.4 右车轮
- //Debug 状态分配 0 - ahead, 1 - turn right, 2 - turn left, 3 - stop, 4 - others
- #pragma vector = PORT1_VECTOR
- __interrupt void Port1(void)
- {
- unsigned char tPIN = P1IN & 0x07;
-
- switch(tPIN)
- {
- case 0x01:// > 2cm turn right
- turn_right();
- warning();
- test = 1;
- break;
-
- case 0x02://ahead
- ahead();
- test = 0;
- break;
-
- case 0x03://turn right
- turn_right();
- test = 1;
- break;
-
- case 0x04:// > 2cm turn left
- turn_left();
- warning();
- test = 2;
- break;
-
- case 0x06://turn left
- turn_left();
- test = 2;
- break;
-
- case 0x07://black line
- warning();//声光报警
- stop();//停车
- test = 3;
- cish++;
- delay(200);//
- ahead();
- break;
-
- default://others
- warning();
- test = 4;
- break;
- }
-
- P1IFG &= 0x00;//Clear P1IFG
- P2OUT ^= BIT1;//Debug Test
- }
- /******************************* Main ***************************************/
- void main()
- {
- //Stop WDT
- WDTCTL = WDTPW + WDTHOLD;
- //端口配置
- IO_cfg();
- //时钟配置
- Timer_cfg();
-
- //Open EA
- _EINT();
-
- while(1)
- {
- disp_LED();
- }
- }
- /******************************************************************************/
复制代码
一周热门 更多>