【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/674513.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何快速理解并掌握Java泛型的概念和使用方法

Java泛型(Generics)是Java SE 5引入的一种语言特性,旨在增强类型安全性和代码的重用性。泛型允许类、接口和方法操作对象的特定类型,同时在编译时进行类型检查。通过使用泛型,我们可以编写更通用、更灵活的代码&#x…

Linux用docker安装ElasticsearchSpringBoot整合ES

一. 部署Elasticsearch 1. docker查询docker容器中的es docker search elasticsearch 2. 安装(PS:查看自己的springBoot的版本号 对应的es版本安装) docker pull elasticsearch:7.6.23. 查看已安装的docker镜像 docker images4. 创建挂…

再论Web应用在医学研究中构建数据收集问卷(stremlit_survey包体验)

再论Web应用在医学研究中构建数据收集问卷(Streamlit_survey包体验) 概述 医学队列研究是临床研究的重要形式,这种研究通过收集临床诊疗过程中产生的数据而阐述疾病相关的因素。在临床数据收集过程中,Web APP体现出了一定的优势…

SpringBoot项目本地运行正常,jar包运行时前端报错403:No mapping for......

SpringBoot项目本地运行正常,jar包运行时前端报错403:No mapping for… 提示:在部署jar包到云服务器上之前,一定要在本地运行jar包,查看前端代码是否运行正常,若报错的话可以节省很多时间 方式:…

Linux命令篇(六):vi/vim专项

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝您生活愉快! 文章目录 一、什么是vim二…

弘君资本:如何看待股价波动?

在股票商场上股价的动摇无疑是投资者最为关怀的话题之一,面临股价的起伏不定投资者往往会感到迷茫和焦虑。对于怎么看待股价动摇,弘君资本下面就为我们具体介绍一下。 股价动摇是股市运转的常态,股市是国民经济的晴雨表,股票价格…

关于大模型是否开源的分析

引言 随着科技的迅速发展,大模型技术成为推动人工智能前沿的引擎,而开源与闭源之争成为这场技术风暴中的一道独特风景。特斯拉CEO马斯克的言论将开源的旗帜高高举起,宣示着技术的共享和合作的时代已经来临。然而,在数字化时代&am…

机器视觉检测--光源

一,环形光源 较为常见的LED光源之一,提供基本的照明作用。 随着光源距离产品的工作距离LWD变化而产生的亮度分布,如下图暖色表示亮;冷色表示暗。 同时该图示是针对特定一款大小的环形光源的数据(下同)。 二…

【二进制部署k8s-1.29.4】八、worker端安装kubelet和cotainerd

文章目录 简介 一.安装containerd1.1.安装containerd1.2.生成containerd配置文件并启动 二.安装kubelet并配置启动文件2.1.准备kubelet配置文件及证书2.2.安装kubelet2.3.配置启动脚步 三.将node节点加入集群注意事项 简介 本章节主要讲解安装containerd和kubelet,containerd主…

【Android】使用EventBus进行线程间通讯

EventBus 简介 EventBus:github EventBus是Android和Java的发布/订阅事件总线。 简化组件之间的通信 解耦事件发送者和接收者 在 Activities, Fragments, background threads中表现良好 避免复杂且容易出错的依赖关系和生命周期问题 Publisher使用post发出…

什么是公有云?与私有云的区别

公有云是指第三方提供商通过公共Internet为用户提供的云服务,用户可以通过Internet访问云并享受各类服务,包括并不限于计算、存储、网络等。公有云服务的模式可以是免费或按量付费。 微 思 | 好 课 推 荐 (全国直播) 【公有云】华…

Nginx企业级负载均衡:技术详解系列(18)—— 作为上传服务器

你好,我是赵兴晨,97年文科程序员。 在上一期的技术分享中,我们探讨了如何高效搭建Nginx下载服务器,并讨论了长连接优化策略。那么今天,咱们进一步了解Nginx的另一面——作为上传服务器的配置技巧。 作为上传服务器&a…

Ollama 如何排除故障

Ollama 日志 Mac 有时,Ollama 可能无法如你所愿运行。解决问题的一个好方法是查看日志。在 Mac 上,你可以通过运行以下命令来查看日志: cat ~/.ollama/logs/server.logLinux 在使用 systemd 的 Linux 系统上,可以用这个命令查…

Elastic Security 在 AV-Comparatives 的恶意软件防护测试中表现出色

作者:Jamie Hynds, Tamarian Del Conte, Roxana Gheorghe 针对真实恶意软件提供 100% 防护,零误报 Elastic Security 在最近的 AV-Comparatives 恶意软件防护测试中取得了显著的成绩,防护率达到 100%,且对真实恶意软件样本无误报…

Proteus 安装报错There is a problem with this Windows lnstaller package

Proteus 安装常见问题 1.安装秘钥(许可证)的时候报错 报错信息如下所示: There is a problem with this Windows lnstaller package. A program required for this instalt to compiete coutd notbe run,contact your support personnet or packagevendor. 这个是…

通用代码生成器应用场景六,为完善的应用系统收集需求

通用代码生成器应用场景六,为完善的应用系统收集需求 使用急就章功能可以开发一个简单的应用先凑和着使用。此应用系统也可以成为完善的应用系统的原型和祖先。如果您新规划一个完善的应用系统,您可以先使用通用代码生成器生成一个临时使用的系统&#x…

【VAE-base】VAE最简单代码实现(纯全连接层实现变分自编码机)

VAE (Variational Autoencoder) 代码:https://github.com/AntixK/PyTorch-VAE/blob/master/models/vanilla_vae.py 论文:Auto-Encoding Variational Bayes 核心参考1 https://github.com/lyeoni/pytorch-mnist-VAE/blob/master/p…

IPD推行成功的核心要素(八)市场管理与产品规划保证做正确的事情

产品开发管理是“正确地执行项目”,而市场管理及产品规划关注“执行正确的项目”,可以说后者对产品的成功更为关键。要实现产品的持续成功,还得从源头的市场管理抓起。成功的产品开发,必须面向市场需求,由需求牵引创新…

FlyMcu串口下载STLINK Utility

FlyMcu是串口下载 STLINK Utility是STLINK下载 生成hex文件 打开hex文件,点击开始编程 在编程之前,需要配置BOOT引脚,让STM32执行BootLoader,否则点击开始编程,程序会一直卡住。第一步STM32板上有跳线帽&#xf…

SuperSocket 服务器与客户端双向通讯

1、使用AppSession 的Send方法就可以向连接到的客户端发送数据。服务器端代码如下。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;//引入命名空间 using SuperSocket.Common; using SuperSocket.So…