#include <ioCC2530.h>
#define IN1 P1_0
#define IN2 P1_2
#define IN3 P0_6
#define IN4 P0_7
void up (void) {IN1=IN3=0;IN2=IN4=1;} //小车向前
void down (void) {IN1=IN3=1;IN2=IN4=0;} //小车向后
void stop (void) {IN1=IN2=IN3=IN4=0;} //小车停止
void turn_right (void) {IN1=IN4=0;IN2=IN3=1;} //小车原地向右
void turn_left (void) {IN1=IN4=1;IN2=IN3=0;} //小车原地向左
void Timer1_Init()
{
CLKCONCMD &= ~0X40; //设置时钟源伟32MHz晶振
while(!(SLEEPSTA & 0X40)); //等待晶振稳定为32MHz
CLKCONCMD &= ~0X07; //设置系统主频为32MHz
CLKCONCMD |=0X38; // time1的定时时钟为 250KHz
SLEEPCMD |=0X04; //关闭不用的RC振荡器
P1DIR |= 1<<1; //设置P1_1为输出
PERCFG |= 0x40; //设置定时器1的I/O位置, 选择到位置2
P2DIR = (P2DIR & ~0xC0) | 0X80; //定时器1的通道0和通道1获得优先
P1SEL |= 1<<1; //设置P1_1为外部I/O (通道1)
T1CC0L = 0xfa; //PWM 的信号周期
T1CC0H = 0x00;
T1CCTL1 = 0x1c; //通道1的比较模式设置,设置为等于T1CC0时,设置输出(输出1)
//等于T1CC1时,清除输出(输出0)
T1CTL |= 0x02; //定时器开始运行 ,模模式 ,从 0x0000到T1CC0反复计数。
}
void timestop()
{
T1CC1L = 0x00;
T1CC1H = 0x00;
}
void open()
{T1CC1L = 0x19;
T1CC1H = 0x00;
//PWM 的占空比
}
void close()
{
T1CC1L = 0xe1;
T1CC1H = 0x00;
//PWM 的占空比
}
void initUART()
{
//串口—蓝牙
P0SEL|=0x0c; //P0_2_3为外设IO
P0DIR&=~0x0c; //P0_2_3为输入
PERCFG&=~1<<1; //USART 0的备用位置1
U0CSR|=0xc0; //UART模式;允许接收
U0BAUD|=59; //波特率设为9600
U0GCR|=8;
}
void PortInit()
{
P1DIR |=(1<<0); //P1_2为输出
P1DIR |=(1<<2); //P1_3为输出
P0DIR |=(1<<6); //P1_6为输出
P0DIR |=(1<<7); //P1_7为输出
P1SEL &=~(1<<0); //p1_2为普通io
P1SEL &=~(1<<2); //p1_3为普通io
P0SEL &=~(1<<6); //p1_6为普通io
P0SEL &=~(1<<7); //p1_7为普通io
}
char uart0_receive_byte(void) //接受蓝牙指令
{
while(URX0IF == 0);
URX0IF = 0;
return U0DBUF;
}
void main()
{
Timer1_Init();
initUART();
PortInit();
while(1)
{
char buf=uart0_receive_byte();
switch(buf)
{
case 'A':
up();
break;
case 'B':
down();
break;
case 'C':
turn_left();
break;
case 'D':
turn_right();
break;
case 'E':
stop();
break;
case 'F':
open();
break;
case 'G':
close();
break;
case 'H':
timestop();
break;
}
}}