2024-09-01
售卖作品
00

目录

功能
功能
部分代码
全部代码

功能

/*

  • 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测温

cpp
* S1 改变占空比为 0 400 600 800 * S2 改变占空比为根据温度变化 * OLED每0.5S刷新一次温度显示 * DS18B20测温

部分代码

cpp
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; //KEY1 P1OUT |= BIT1; P2REN |= BIT1; //KEY2 P2OUT |= 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; //进入低功耗 } }

全部代码

cpp
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!