本文主要是介绍【TB作品】MSP430F5529单片机,温控小风扇,DS18B20温度读取,PWM风扇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
功能
/*
-
OLED
-
SCL ----------P3.0
-
SDA ----------P3.1
-
VCC ----------3.3V
-
GND ----------GND
-
风扇
-
DATA ----------P2.4
-
VCC ----------3.3V
-
GND ----------GND
-
DS18B20
-
DATA ----------P1.5
-
VCC ----------3.3V
-
GND ----------GND
-
功能:
-
S1 改变占空比为 0 400 600 800
-
S2 改变占空比为根据温度变化
-
OLED每0.5S刷新一次温度显示
-
DS18B20测温
*/
功能
S1 改变占空比为 0 400 600 800 手动档位
S2 自动档位
OLED显示温度
DS18B20测温
* S1 改变占空比为 0 400 600 800* S2 改变占空比为根据温度变化* OLED每0.5S刷新一次温度显示* DS18B20测温
部分代码
void main(void)
{WDTCTL = WDTPW | WDTHOLD; /* Stop watchdog timer */P5SEL |= BIT4 + BIT5; /* XT1引脚复用,用作晶振 */UCSCTL6 &= ~(XT1OFF + XT2OFF); /* 打开XT1、XT2 */P5SEL |= BIT2 + BIT3; /* XT2引脚复用,用作晶振 */while (SFRIFG1 & OFIFG) /* 等待晶振正常起振 */{SFRIFG1 &= ~OFIFG;UCSCTL7 &= ~(DCOFFG + XT1LFOFFG + XT2OFFG);}UCSCTL4 |= SELA__XT1CLK + SELS__XT2CLK + SELM__XT2CLK; /* 时钟源选择 ACLK---XT1CLK SMCLK---XT2CLK MCLK---XT2CLK */UCSCTL5 |= DIVA__1 + DIVS__4 + DIVM__1; /* 时钟源分频 ACLK/1=32768HZ SMCLK/4=1MHZ MCLK/1=4MHZ */OLED_Init(); /* OLED初始化 */P1DIR |= BIT0; /* LED0 */P1OUT |= BIT0;P4DIR |= BIT7; /* LED1 */P4OUT |= BIT7;P1REN |= BIT1; //KEY1P1OUT |= BIT1;P2REN |= BIT1; //KEY2P2OUT |= BIT1;DS18b20_Port_Init();TA1CTL |= MC_1 + TASSEL_1 + TACLR; /* 10MS 定时 */TA1CCR0 = 32768 / 100;TA1CCTL0 = CCIE;P2DIR |= BIT4; /* 方向 */P2SEL &= ~BIT4; /* 第二功能不开 */P2OUT |= BIT4; /* 方向 */OLED_ShowString(0, 1, "TEMP :");OLED_ShowString(0, 3, "POWER:");OLED_ShowChar(50, 3, '0', 16);_EINT(); //打开总中断while (1){//按键S1 改变风扇占空比if ((P2IN & BIT1) == 0){delay_ms(10);if ((P2IN & BIT1) == 0){while ((P2IN & BIT1) == 0);fengshansudu = (fengshansudu + 1) % 4; // 0 1 2 3代表不转和三档速度if (fengshansudu == 0){P2DIR |= BIT4; /* 方向 */P2SEL &= ~BIT4; /* 第二功能不开 */P2OUT |= BIT4; /* 方向 */}else{P2DIR |= BIT4; /* 方向 */P2SEL |= BIT4; /* 第二功能不开 */TA2CCR0 = 1000; /* PWM模式 计数到1000 PWM周期就是1MS */TA2CCTL1 = OUTMOD_3; /* 模式 */TA2CCR1 = 2; /* 占空比 */TA2CTL = TASSEL_2 + MC_1 + TACLR; /* smclk, up-down mode, clear TAR 1MHZ */TA2CCR1 = 200 + fengshansudu * 200; /* 占空比 */}P1OUT ^= BIT0; //为了观察}}//按键S2 改变风扇 为 自动档位if ((P1IN & BIT1) == 0){delay_ms(10);if ((P1IN & BIT1) == 0){while ((P1IN & BIT1) == 0);P2DIR |= BIT4; /* 方向 */P2SEL |= BIT4; /* 第二功能不开 */TA2CCR0 = 1000; /* PWM模式 计数到1000 PWM周期就是1MS */TA2CCTL1 = OUTMOD_3; /* 模式 */TA2CCR1 = 2; /* 占空比 */TA2CTL = TASSEL_2 + MC_1 + TACLR; /* smclk, up-down mode, clear TAR 1MHZ */fengshansudu = 4; //代表自动速度P4OUT ^= BIT7; //为了观察}}//打开定时器TA1CTL |= MC_1 + TASSEL_1 + TACLR; /* 10MS 定时 */LPM0; //进入低功耗}
}
全部代码
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
这篇关于【TB作品】MSP430F5529单片机,温控小风扇,DS18B20温度读取,PWM风扇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!