【TB作品】MSP430 G2553 单片机口袋板,电风扇模拟控制系统设计

功能

电风扇模拟控制系统设计

基本要求:
用LED/LCD 显示电风扇的工作状态 (1,2,3,4 四档风力),
显示风类:“自然风”、“常风”和“睡眠风”。
设计 “自然风”“常风”和“睡眠风” 三个风类键用于设置风类
设计一个“摇头”键用于控制电机摇头。
设计一个“定时”键,用于定时时间长短设置:
发挥部分:
设计过热检测与保护电路
若电风扇电机过热(用内存参数模拟温度,用键),则电机停止转动,
蜂鸣器报警电机冷却后(用键模拟) 电机又恢复转动。
显示格式:
LED 数码管/LCD 屏显示方法自定

效果

在这里插入图片描述

部分代码


void main(void)
{

    char t_j = 0;


    WDTCTL = WDTPW + WDTHOLD; /* 关闭看门狗 */
    P1DIR = 0xFF; /* 设置方向 */
    P1SEL = 0; /* 设置为普通I/O 口 */

    P2DIR = 0xFF; /* 设置方向 */
    P2SEL = 0; /* 设置为普通I/O 口 */

    P2OUT = 0x00;
    P1OUT = 0x00;
    delay_ms(200);
    LCD_init();

    //P4.1 设置为PWM 输出
    P4DIR |= BIT1;
    P4SEL |= BIT1;
    TBCCR0 = 1000;                 //PWM 周期
    TBCCR1 = 0;                  //PWM 占空比
    TBCCTL1 = OUTMOD_7;             //PWM 输出模式
    TBCTL = TBSSEL_2 + MC_1 + ID_3;      //SMCLK, UP 模式

    CCTL0 = CCIE;                         // CCR0 interrupt enabled
    CCR0 = 32768 - 1;
    TACTL = TASSEL_1 + MC_1;              // ACLK, upmode

    P5DIR = 0X00;              //其余的都是按键
    P5REN |= 0XFF;
    P5OUT = 0XFF;

    //P4.4输出给beep
    P4DIR |= BIT4;
    P4OUT &= ~BIT4;

    //P4.3输出给摇头电机
    P4DIR |= BIT3;
    P4OUT &= BIT3;

    //P4.2 继电器
    P4DIR |= 0X04;
    P4OUT |= 0X04;              //高电平是关闭继电器

    //P4.5输出
    P4DIR |= BIT5;
    P4OUT &= ~BIT5;

    __bis_SR_register( GIE);
    while (1)
    {
        delay_us(10);
        t_j++;
        if (t_j > 100)
        {
            if (Countdown_Flag)
            {
                tmp_r = (hour * 3600) + (minute * 60) + second;
                if (tmp_r>0)
                {
                    TBCCR1 = fengli[fengli_Flag_dangwei];        //每一秒钟检测一次风扇的转速
                }
                else
                {
                    fengli_Flag_dangwei = 0;
                    TBCCR1 = fengli[fengli_Flag_dangwei];        //每一秒钟检测一次风扇的转速

                }
            }
            else
            {
                TBCCR1 = fengli[fengli_Flag_dangwei];        //每一秒钟检测一次风扇的转速
            }

            Read_DS18B20(&TAM_KISIM, &ONDALIK_KISIM);
            if ((negative == 0) && (limited == 0))
            {
                cnt = 0;
                disp[cnt++] = 't';
                disp[cnt++] = '=';
                disp[cnt++] = '0' + (TAM_KISIM % 1000 / 100);
                disp[cnt++] = '0' + (TAM_KISIM % 100 / 10);
                disp[cnt++] = '0' + (TAM_KISIM % 10);
                disp[cnt++] = '.';
                disp[cnt++] = '0' + (ONDALIK_KISIM % 10000 / 1000);
                disp[cnt++] = '0' + (ONDALIK_KISIM % 1000 / 100);
                disp[cnt++] = '0' + (ONDALIK_KISIM % 100 / 10);
                disp[cnt++] = '0' + (ONDALIK_KISIM % 10);
                disp[cnt++] = 'C';
                disp[cnt++] = 0;

                LCD_dsp_string(0, 2, disp); /* 在第一行第一列显示"LCD TEST" */
            }

            if (TAM_KISIM > 50)
            {
                //P4.4输出给beep
                P4OUT &= ~BIT4;        //鸣叫
                P4OUT &= 0XFB;        //低电平是打开继电器,是关闭风扇
            }
            else
            {

                P4OUT |= BIT4;        //不鸣叫
                P4OUT |= 0X04;        //高电平是关闭继电器,是正常风扇工作
            }

            update_disp();
        }

        //按键检测
        if ((P5IN & BIT0) == 0)              //0档位风力
        {
//            delay_ms(10);
            if ((P5IN & BIT0) == 0)
            {
                fengli_Flag_dangwei = 0;
                update_disp();
                while ((P5IN & BIT0) == 0)
                    ;
            }
        }
        if ((P5IN & BIT1) == 0)              //1档位风力
        {
//            delay_ms(10);
            if ((P5IN & BIT1) == 0)
            {
                fengli_Flag_dangwei = 1;
                update_disp();
                while ((P5IN & BIT1) == 0)
                    ;
            }
        }
        if ((P5IN & BIT2) == 0)              //2档位风力
        {
//            delay_ms(10);
            if ((P5IN & BIT2) == 0)
            {
                fengli_Flag_dangwei = 2;
                update_disp();
                while ((P5IN & BIT2) == 0)
                    ;
            }
        }
        if ((P5IN & BIT3) == 0)              //3档位风力
        {
//            delay_ms(10);
            if ((P5IN & BIT3) == 0)
            {
                fengli_Flag_dangwei = 3;
                update_disp();
                while ((P5IN & BIT3) == 0)
                    ;
            }
        }
        if ((P5IN & BIT4) == 0)              //摇头电机
        {
//            delay_ms(10);
            if ((P5IN & BIT4) == 0)
            {
                if (shake_Flag == 1)
                    shake_Flag = 0;
                else
                    shake_Flag = 1;

                if (shake_Flag == 1)
                    P4OUT |= BIT3;
                else
                    P4OUT &= ~BIT3;
                update_disp();
                while ((P5IN & BIT4) == 0)
                    ;
            }
        }
        if ((P5IN & BIT5) == 0)              //加倒计时,一次加10分钟,小时不能多于12小时
        {
//            delay_ms(10);
            if ((P5IN & BIT5) == 0)
            {
                tmp_r = hour * 60 + minute;
                tmp_r += 10;
                hour = tmp_r / 60;
                minute = tmp_r % 60;
                update_disp();
                while ((P5IN & BIT5) == 0)
                    ;
            }
        }
        if ((P5IN & BIT6) == 0)              //减倒计时,一次减10分钟,分钟不能小于0
        {
//            delay_ms(10);
            if ((P5IN & BIT6) == 0)
            {
                tmp_r = hour * 60 + minute;
                if (tmp_r >= 10)
                {
                    tmp_r -= 10;
                    hour = tmp_r / 60;
                    minute = tmp_r % 60;
                }
                else
                {
                    fengli_Flag_dangwei = 0;
                    hour = 0;
                    minute = 0;
                    second=0;
                }
                update_disp();
                while ((P5IN & BIT6) == 0)
                    ;
            }
        }
        if ((P5IN & BIT7) == 0)              //定时模式的开关
        {
//            delay_ms(10);
            if ((P5IN & BIT7) == 0)
            {
                if (Countdown_Flag)
                {
                    Countdown_Flag = 0;
                    hour=0;
                    minute=0;
                    second=0;
                    fengli_Flag_dangwei=0;
                }
                else
                {
                    Countdown_Flag = 1;
                }

                update_disp();
                while ((P5IN & BIT7) == 0)
                    ;
            }
        }

    }
}

全部代码

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 13:24:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 13:24:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 13:24:01       87 阅读
  4. Python语言-面向对象

    2024-06-06 13:24:01       96 阅读

热门阅读

  1. MySQL深分页优化

    2024-06-06 13:24:01       36 阅读
  2. php质量工具系列之phploc

    2024-06-06 13:24:01       25 阅读
  3. 怎么解决企业生产计划排程的几大难点?

    2024-06-06 13:24:01       30 阅读
  4. python 做成Excel并设置打印区域

    2024-06-06 13:24:01       30 阅读
  5. Python | MATLAB | R 心理认知数学图形模型推断

    2024-06-06 13:24:01       28 阅读
  6. 力扣1838.最高频的元素的频数

    2024-06-06 13:24:01       31 阅读
  7. C/C++中volatile关键字

    2024-06-06 13:24:01       31 阅读
  8. SpringBoot @ModelAttribute

    2024-06-06 13:24:01       30 阅读
  9. centos7 安装 mysql5.7 LTS

    2024-06-06 13:24:01       28 阅读
  10. Springboot接收参数的21种方式

    2024-06-06 13:24:01       25 阅读
  11. ngrok的使用

    2024-06-06 13:24:01       33 阅读