基于MSP430G2553的模拟风扇控制系统

发布者:快乐旅行最新更新时间:2022-09-26 来源: csdn关键字:MSP430G2553  模拟风扇  控制系统 手机看文章 扫描二维码
随时随地手机看文章

本次设计是通过CCS和AD15设计的一个模拟风扇控制系统,该系统主要包括独立键盘电路模块、直流稳压电路模块、程序下载电路模块、数码管显示模块、三极管LED驱动模块、电机驱动电路模块。本次设计方MSP430G2553为控制核心,合理应用该单片机的资源,以最好的方式实现本设计,并且达到了设计要求中的各项指标。


话不多说,直接上代码:

该代码纯属个人编写,仅供参考,小白一个,哈哈哈哈。当然有好多东西没有封装成函数。


下面展示一些 内联代码片。


// A code block

主函数


// An highlighted block

#include  

#include "stdint.h"

#include "SMG.h"

#include "DS18B20.h"

#include "Inital.h"


#define Point 0x80


const unsigned char tabel[14]={

                       0x7e,    //'0'

                       0x06,    //'1'

                       0x6d,    //'2'

                       0x79,    //'3'

                       0x33,    //'4'

                       0x5b,    //'5'

                       0x5f,    //'6'

                       0x70,    //'7'

                       0x7f,    //'8'

                       0x7b,    //'9'

                       0x01,    //'-'

                       0x4e,    //'C'

                       0x00     //'不显示'

};


uint8_t time = 0;   //时间记录

uint8_t cishu = 0;  //50ms*20=1s

uint8_t flag0 = 0;   //模式标志位

uint8_t flag1 = 0;  //时间标志位

uint8_t flag2 = 0;  //判断显示温度标志位

uint8_t model = 0;  //模式

uint8_t Model = 0;  //模式

uint16_t n=0;       //记录当前TACCR2的值

uint8_t Tempreture;


//时间显示

void Display1(void)

{

    uint8_t baiwei,shiwei,gewei;

    baiwei=time/100;

    shiwei=time%100/10;

    gewei=time%10;


    Write_Max7219(1,tabel[gewei]);

    Write_Max7219(2,tabel[shiwei]);

    Write_Max7219(3,tabel[baiwei]);

    Write_Max7219(4,tabel[0]);

}

//model显示

void Display2(void)

{

    Write_Max7219(5,tabel[12]);

    Write_Max7219(6,tabel[10]);

    Write_Max7219(7,tabel[model]);

    Write_Max7219(8,tabel[10]);

}

//温度显示

void Display3(void)

{

    uint8_t ge,shi;


    shi=Tempreture/10;

    ge=Tempreture%10;


    Write_Max7219(1,tabel[11]);

    Write_Max7219(2,tabel[ge]);

    Write_Max7219(3,tabel[shi]);

    Write_Max7219(4,tabel[12]);

}

//初始化

void Display_all0(void)

{

    Write_Max7219(1,tabel[0]);

    Write_Max7219(2,tabel[0]);

    Write_Max7219(3,tabel[0]);

    Write_Max7219(4,tabel[0]);


    Write_Max7219(5,tabel[12]);

    Write_Max7219(6,tabel[10]);

    Write_Max7219(7,tabel[0]);

    Write_Max7219(8,tabel[10]);

}



/*

 * main.c

 */

void main(void)

{

WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer

InitSystemClock();

InitZHDIO();

InitPWM();

InitTimer0HZD();

Init_Max7219_IO();

Init_Max7219_();

Display_all0();

P1OUT &= ~BIT5;P1OUT &= ~BIT6;P1OUT &= ~BIT7;

    /*开启总中断*/

    __bis_SR_register(GIE);


while(1)

{

   Display1();

   Display2();

   while(flag2==1)

        {

          Tempreture = DS18B20_Conert();

          Display2();

          Display3();

          __delay_cycles(2);

        }

   __delay_cycles(2);

}

}





#pragma vector = PORT1_VECTOR

__interrupt void port1_ISR(void)

{

    __delay_cycles(500000);    //0.1s消抖

    /*P1.1中断,切换模式*/

    if(P1IFG&BIT1)

        {

        P1IFG &= ~BIT1;

        switch(flag0)

        {

        case 0:

            if(time!=0)TA1CCR2 = 400;           //20%

            else TA1CCR2 = 499;

            flag0=1;model=1;Model=1;n=400;P1OUT |= BIT5;P1OUT &= ~BIT6;P1OUT &= ~BIT7;

            break;

        case 1:

            if(time!=0)TA1CCR2 = 350;           //30%

            else TA1CCR2 = 499;

            flag0=2;model=2;Model=2;n=350;P1OUT |= BIT6;P1OUT &= ~BIT5;P1OUT &= ~BIT7;

            break;

        case 2:

            if(time!=0)TA1CCR2 = 150;           //70%

            else TA1CCR2 = 499;

            flag0=0;model=3;Model=3;n=150;P1OUT |= BIT7;P1OUT &= ~BIT5;P1OUT &= ~BIT6;

            break;

        default:

            break;

        }

        Display2();

        }

    /*P1.2中断,选择时间*/

    if(P1IFG&BIT2)

       {

       TA1CCR2 = n;

       P1IFG &= ~BIT2;

       TA0CTL &= ~TAIE;         /*关闭定时器中断*/

       TA0CTL |= TACLR;         /*TAR清零,保证重新从0计数*/


       switch(flag1)

           {

           case 0:

                time=60;flag1=1;cishu=0;    //cishu也清零

                break;

           case 1:

                time=120;flag1=2;cishu=0;

                break;

           case 2:

                time=180;flag1=0;cishu=0;

                break;

           default:

                break;

           }

       TA0CTL |= TAIE;         /*开启定时器中断*/

       }

    /*P1.3中断,停止*/

    if(P1IFG&BIT3)

        {

        P1IFG &= ~BIT3;

        TA1CCR2=499;    //PWM停止产生

        time=0;             //时间归0

        flag1=0;    //保证从60s开始


        P1OUT &= ~BIT5;P1OUT &= ~BIT6;P1OUT &= ~BIT7;  //指示灯全部熄灭

        }


    /*P1.4中断,显示温度*/

    if(P1IFG&BIT4)

        {

        P1IFG &= ~BIT4;


        Tempreture = DS18B20_Conert();

        if(flag2==1) {flag2=0;model=Model;}   //标志位,判断显示温度还是时间

        else         {flag2=1;model=4;}

        }

}



/*定时器中断,倒计时*/

#pragma vector = TIMER0_A1_VECTOR

__interrupt void Timer0ZHD(void)

{

    switch(TA0IV)               //由于寄存器的共用,需要判断到底是哪个中断被执行

        {                       //读取了TA0IV后,中断标志位自动清零

        case 0x02:

            break;

        case 0x04:

            break;

        case 0x0A:

            if(cishu==20)       //50ms*20=1s

            {

                cishu=0;

                if(time>0)time--;

                else

                    {

                    time=0;

                    TA1CCR2=499;    //PWM停止产生

                    }

            }

            else cishu++;

            break;

        default:

            break;

        }

}


头文件:

下面展示一些 内联代码片。


// A code block

var foo = 'bar';


// An highlighted block

/*

 * DS18B20.h

 *

 *  Created on: 2020年12月1日

 *      Author: duwei

 */


#ifndef DS18B20_H_

#define DS18B20_H_

//P2.4

#define DS18B20_DIR     P2DIR

#define DS18B20_OUT     P2OUT

#define DS18B20_IN      P2IN

#define DS18B20_DQ      BIT4


#define DS18B20_H   DS18B20_OUT|=DS18B20_DQ        //DQ置位

#define DS18B20_L   DS18B20_OUT&=~DS18B20_DQ       //DQ复位

[1] [2] [3]
关键字:MSP430G2553  模拟风扇  控制系统 引用地址:基于MSP430G2553的模拟风扇控制系统

上一篇:TI的CCS集成开发环境的 快捷键设置 自定义的快捷键 实现编译下载功能 CCS9.xxx
下一篇:MSP430笔记3——串口发送数据

推荐阅读最新更新时间:2024-11-16 21:55

“反电动势法”永磁直流无刷电机控制系统设计
O 引言 永磁直流无刷电机(BLDCM)是一种典型的机电一体化电机,除了有普通直流电机调试性能好、调速范围宽和调速方式简单的特点外,还有功率因素高、转动惯量小、运行效率高等优点,特别是由于它不存在机械换相器与电刷,大大的减少了换相火花,机械磨损和机械噪声,使得它在中小功率范围内得到了更加广泛的应用,是电机的主要发展方向之一。 对于永磁直流无刷电机的控制方式,可以分为两大类:有位置传感器控制方式和无位置传感器控制方式。典型的有位置传感器控制方式是使用霍尔传感器控制方式。无位置传感器控制方式是目前比较广泛使用且较为新颖的一类控制方式,包含有:反电动势控制方法、磁链计算法、状态观测器法和人工神经网络(ANN)控制法等。反电动势控
[工业控制]
“反电动势法”永磁直流无刷电机<font color='red'>控制系统</font>设计
MATLAB/SIMULINK的永磁同步电机矢量控制系统仿真研究
1.引言 随着高性能永磁材料、大规模集成电路和电力电子技术的发展,永磁同步电机因为其功率密度高,体积小,功率因数和高效率而得到发展,且引起了国内外研究学者的关注。传统的控制方式由于引入了位置传感器而给当前的调速系统带来了一系列的问题:占据了比较大的有效空间,使系统编程复杂。因此无位置传感器控制系统的研究变得越发的重要。 2.PMSM的坐标系和数学模型     永磁同步电机在定子三相(ABC)静止坐标系下的电压方程:     式中,三相绕组的相电压瞬时值分别为A u 、B u 、C u ; A i 、B i 、C i 是相电流的瞬时值; s R 是永磁同步电机定子的每相绕组电阻; A ψ 、B ψ 、C ψ 是永磁体的磁链在各相
[电源管理]
MATLAB/SIMULINK的永磁同步电机矢量<font color='red'>控制系统</font>仿真研究
数字电源控制系统的应用实例
  在数字电源的所有讨论中,必须区分两个关键的概念:功率控制和功率管理。Ericsson公司采用电源控制这个术语来表达电源内部的控制功能,特别是器件内部能量流的逐周期管理。这个定义包括反馈回路和内部管理功能。与电源的开关频率相比,电源控制功能以实时方式运行。控制功能可以采用模拟或数字技术,通过采用通常对终端用户而言是一回事的任意一种技术的电源来实现。也就是说,采用数字电源控制可能不需要终端用户端的任何改变或新设计。   相比之下,电源管理是指一个或多个电源外部的通信和/或控制。这包括电源系统配置、个别电源的控制和监视以及故障检测通信。电源管理功能并不是实时的,这些功能以一个比电源的开关频率慢的时间刻度工作。现在,这些功能开始结
[电源管理]
数字电源<font color='red'>控制系统</font>的应用实例
继电接触式控制系统的工作原理阐述
控制系统应满足生产机械的工艺要求,在设计之前必须对生产机械的:性能、结构特点和实际情况有充分的了解,并在此基础上来考虑控制方式,起动、反门设置各种联锁及保护装置。 生产机械电气控制系统是生产机械不可缺少的组成部分,它对生产机械能否正确与可靠地工作起着决定性的作用。一般,电气控制系统应满足生产机械加工工艺的要求,线路安全可靠操作和维护方便,设备投资少等。为此,必须正确地设计控制电路,合理地选择电器元件。 对于比较简单的控制线路,往往直接采用交流380V~220v电压,不用控制电源变压器口采用这一方案。动力电源电路中的过电压将直接引进控制线路,这对元件的可靠工作不利。另外,由于控制线路电压较高,对维护与安全不利,因此必须引起注
[嵌入式]
机器人控制系统功能及构成详解
机器人控制器作为工业机器人最为核心的零部件之一,对机器人的性能起着决定性的影响,在一定程度上影响着机器人的发展。一般由四个部分组成:输入、输出、控制元件和算法。在一个简易的机器人系统里,分别对应的原件是: 1、输入:传感器,包含声呐、红外、摄像头、陀螺仪、加速度计、罗盘等; 2、输出:控制元件,一般是电机; 3、控制算法:控制板,从小到单片机,大到微机来实现; 4、控制目标:比如机器人的路径跟踪。 图片来源:OFweek维科网 机器人控制系统的定义 机器人控制系统的功能是接收来自传感器的检测信号,根据操作任务的要求,驱动机械臂中的各个电动机,就像人的活动需要依赖自身的关节一样,机器人的运动控制离不开传感器。机器人需要用传感器
[机器人]
#单片机#一个小型的单片机控制系统——智能窗帘控制系统
介绍 涉及模块: 1.LCD1602液晶屏 2.DS18B20温度传感器 3.ADC0832数模转换芯片 4.TORCH_LDR光照度控件 5.步进电机 实现功能: 1.在LCD上显示实时温度与窗帘状态。 2.温度在15~25℃范围内开窗帘,范围外关窗帘。 3.光线强时关窗帘,光线弱时开窗帘。 4.可通过按钮手动开关窗帘。 仿真图 窗帘系统Proteus仿真图: 代码 项目由以下6个文件组成 : main.c define.h delay.h DS18B20.h LCD1602.h ADC0832.h main.c #include reg52.h #include intri
[单片机]
#单片机#一个小型的单片机<font color='red'>控制系统</font>——智能窗帘<font color='red'>控制系统</font>
基于AT89S52单片机实现激光雷达门控控制系统的软硬件设计
介绍了基于 AT89S52的激光雷达门控控制系统的工作原理,并着重讨论系统硬件和软件的实现方法。系统采用 AT89S52单片机为核心,配置以数字电位器、光电耦合器、单稳态触发器等部件,控制光电倍增管门控开关的时间,从而实现对激光雷达测量的起始点和结束点的实时调控。 前言 激光雷达能够对大气中的气溶胶、二氧化碳、臭氧、水气等进行高时空分辨率、实时、大范围地测量,因此越来越受到环保和气象部门的重视。目前,用于气象要素和环境污染检测的激光雷达技术发展很快。激光雷达必定会在大气参数和环境污染检测方面扮演重要的角色。要使激光雷达的测量范围尽可能的大,必须控制好雷达光电倍增管(PMT)门控的开关门时间,以满足各种测量的要求。如果能很好地解
[单片机]
基于AT89S52单片机实现激光雷达门控<font color='red'>控制系统</font>的软硬件设计
无线身份验证门禁控制系统
1 概述   随着人们的移动性与日俱增,对身份验证的安全性及可靠性的新需求应运而生,推动虚拟身份验证取代密钥卡门禁。为了应付无间断连接及完全分布式智能设备的爆炸式增长所带来的挑战,有必要制定一种基础架构方案来支持不断演变的门禁控制系统应用,并推动所有相关的新产品开发工作。近距离无线通信(Near Field Communications,以下简称NFC)是有望实现上述目标的技术,但要确保其安全性,业界就必须建立一种基于综合监管链的身份验证方法——通过这种方法,系统或网络中的所有端点都能够得以验证,从而让各端点之间的身份验证信息在任何时候都能够可靠传输。接下来,本文将以HID Global最近开发的Trusted Identity
[网络通信]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved