»ùÓÚMSP430µ¥Æ¬»úÑ­¼£Ð¡³µ¿Î³ÌÉè¼Æ±¨¸æ

ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2025/10/3 1:14:29ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£

7.¸½Â¼

#include #define uchar unsigned char #define uint unsigned int void Init_PWM(void) {

TACTL = TASSEL1 + MC0 + TACLR;

//TimerAÑ¡ÔñMCLKʱÖÓ,²»·ÖƵ,Ôö¼ÆÊýģʽ,

CCTL1 = OUTMOD2 + OUTMOD1 + OUTMOD0 + CCIE; P1DIR|=0X0C; P1SEL|=0X0C;

//²¶»ñ,±È½ÏÄ£¿é1Ñ¡¶¨ÎªÊä³ö±È½Ïģʽ,Êä³öģʽ7,½ûÖ¹±È½ÏÖÐ¶Ï CCTL2 = OUTMOD2 + OUTMOD1 + OUTMOD0 + CCIE;

//²¶»ñ,±È½ÏÄ£¿é2Ñ¡¶¨ÎªÊä³ö±È½Ïģʽ,Êä³öģʽ7,½ûÖ¹±È½ÏÖÐ¶Ï CCR0 = 8000; }

/*******ÉèÖÃPWM1µÄÕ¼¿Õ±È*******/ void Set_PWM1_Duty(uchar duty) {

if((duty >= 5) && (duty <= 95)) //½«Õ¼¿Õ±ÈÏÞÖÆÔÚ5% ~ 95%Ö®¼ä {

CCR1 = 8000 / 100 * duty; }

else //·ñÔò½«Õ¼¿Õ±ÈÇ¿ÖÆÉèÖÃΪ50% {

CCR1 = 4000; } }

/*******ÉèÖÃPWM2µÄÕ¼¿Õ±È*******/ void Set_PWM2_Duty(uchar duty) {

if((duty >= 5) && (duty <= 95)) //½«Õ¼¿Õ±ÈÏÞÖÆÔÚ5% ~ 95%Ö®¼ä {

CCR2 = 8000 / 100 * duty; }

else //·ñÔò½«Õ¼¿Õ±ÈÇ¿ÖÆÉèÖÃΪ50% {

CCR2 = 4000; } }

void stop() {

P4OUT=0X0f; }

void zhizou(char D) {

if(D==1) {

P4OUT = 0X05;

Set_PWM1_Duty(50); Set_PWM2_Duty(50);

}

if(D==2) {

P4OUT = 0X0a;

Set_PWM1_Duty(50); Set_PWM2_Duty(50); } }

void right(char L) {

P4OUT = 0X05; if(L==1) {

Set_PWM1_Duty(30); Set_PWM2_Duty(70); }

if(L==2) {

Set_PWM1_Duty(30); Set_PWM2_Duty(90); } }

void left(char R) {

P4OUT = 0X05; if(R==1) {

Set_PWM1_Duty(70); Set_PWM2_Duty(30); }

if(R==2) {

Set_PWM1_Duty(90); Set_PWM2_Duty(30); } }

void main(void) {

WDTCTL=WDTPW+WDTHOLD;

P3DIR &= ~(BIT1 + BIT2 + BIT3);//Ñ¡ÖÐP3.0~P3.4Ϊ²É¼¯ÐźÅÊäÈë¶Ë P4DIR |= 0X0F;//¿ØÖÆÂÖ×ÓתÏò Init_PWM(); while(1) {

switch(P3IN & 0X0E) {

case 0x0A:zhizou(1);break; //case 0x1c:left(2);break;

case 0x02:case 0x06:left(1);break; //case 0x07:right(2);break;

case 0x08:case 0x0c:right(1);break; case 0x00:stop();break; default:zhizou(1); break; } } }

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@) ËÕICP±¸20003344ºÅ-4 ceshi