历史上的今天
返回首页

历史上的今天

今天是:2025年02月14日(星期五)

正在发生

2020年02月14日 | 基于MSP430F5529的智能灯设计

2020-02-14 来源:eefocus

#include

 

void IO_Init();

void InitADC();

unsigned int  GetAD(char channel);

void light_Compare(int templight);

int counter=0;                          //中断计数器参数,单位秒

 

/**

 * main.c

 */

 

int main(void)

{

    IO_Init();                          //IO初始化

    InitADC();                          //初始化ADC模块

 

    int voice = 0;                      //缓存声音响度

    int light = 0;                      //缓存环境亮度

 

    WDTCTL = WDT_ADLY_1000;             //设置中断定时1s

    SFRIE1 |= WDTIE;                    //使能WDT中断          WDTIE=(0x0001)/* WDT Interrupt Enable */

    _EINT();                            // 使能全局中断

 

    while(1){

        voice = GetAD(0);               //读取声音缓存

        while(voice>3000){               //声音与阈值比较

            counter=0;                  //定时器置零

            do{

                light = GetAD(1);       //亮度读取

                light_Compare(light);

                voice = GetAD(0);       //读取声音缓存

                if(voice>3000){

                    break;

                }

                if(counter >=10)        //判断计数时间,如果大于20s,关闭LED,并退出

                {

                    P1OUT &= ~BIT5;

                    P8OUT &= ~BIT1;

                    P3OUT &= ~BIT7;

                    P7OUT &= ~BIT4;

                    P6OUT &= ~BIT3;

                    P6OUT &= ~BIT4;

                    P3OUT &= ~BIT5;

                    break;

                }

            }while(counter<10);

        }

    }

}

void light_Compare(int templight){      //LED发亮的个数与光敏电阻测出亮度成反比

    P2OUT |= BIT5;                      //2.5置高

    P2OUT &= ~BIT4;                     //2.4置低

    P1OUT |= BIT5;                      //打开Nsleep,开大LED灯

    if(templight >=700)

        P8OUT |= BIT1;

    else

        P8OUT &= ~BIT1;

    if(templight >= 1200)

        P3OUT |= BIT7;

    else

        P3OUT &= ~BIT7;

    if(templight >= 1500)

        P7OUT |= BIT4;

    else

        P7OUT &= ~BIT4;

    if(templight >= 2000)

        P6OUT |= BIT3;

    else

        P6OUT &= ~BIT3;

    if(templight >= 2500)

        P6OUT |= BIT4;

    else

        P6OUT &= ~BIT4;

    if(templight >= 3000)

        P3OUT |= BIT5;

    else

        P3OUT &= ~BIT5;

}

void IO_Init(){             //六盏灯初始化,并全置零

    P1DIR|= BIT0;           //六盏灯初始化,并全置零

    P8DIR|= BIT1;

    P3DIR|= BIT7;

    P7DIR|= BIT4;

    P6DIR|= BIT3;

    P6DIR|= BIT4;

    P3DIR|= BIT5;

    P8OUT&=~BIT1;

    P3OUT&=~BIT7;

    P7OUT&=~BIT4;

    P6OUT&=~BIT3;

    P6OUT&=~BIT4;

    P3OUT&=~BIT5;

 

    P2DIR|= BIT4;           //2.4,2.5初始化

    P2DIR|= BIT5;

    P2OUT|= BIT5;

    P2OUT&= ~BIT4;

    P1DIR|= BIT5;           //大LED灯的驱动的电路开关方向

}

#pragma vector= WDT_VECTOR

__interrupt void watchdog_timer (void)

{

     counter ++;            //计时器加一

     P1OUT^=BIT0;           //信号灯

}

unsigned int  GetAD(char channel)

{

    unsigned int temp = 0;                              //设置变量

    ADC12CTL0 |= ADC12SC;                               //开始采样转换

    temp= ADC12MEM0;                                    //把结果赋给变量

      switch (channel)

      {

          case 0:temp= ADC12MEM0;       break;          //选择通道0,P6.0

            case 1:temp= ADC12MEM1;     break;          //选择通道1,P6.1

            case 2:temp= ADC12MEM2;     break;          //选择通道2,P6.2

            case 3:temp= ADC12MEM3;     break;          //选择通道3,P6.3

            case 4:temp= ADC12MEM4;     break;          //选择通道4,P6.4

            case 5:temp= ADC12MEM5;     break;          //选择通道5,P6.5  连接拨码电位器

            case 6:temp= ADC12MEM6;     break;          //选择通道6,P6.6

            case 12:temp= ADC12MEM12;    break;         //选择通道12,P7.0

            default: ;break;

        }

    return temp;

}

void InitADC()

{

    ADC12CTL0 |= ADC12MSC;                              //自动循环采样转换

    ADC12CTL0 |= ADC12ON;                               //启动ADC12模块

    ADC12CTL1 |= ADC12CONSEQ_3 ;                        //选择序列通道多次循环采样转换

    ADC12CTL1 |= ADC12SHP;                              //采样保持模式

    ADC12CTL1  |= ADC12CSTARTADD_0;

 

    ADC12MCTL0 |=ADC12INCH_0;                           //通道选择

    ADC12MCTL1 |=ADC12INCH_1;

    ADC12MCTL2 |=ADC12INCH_2;

    ADC12MCTL3 |=ADC12INCH_3;

    ADC12MCTL4 |=ADC12INCH_4;

    ADC12MCTL5 |=ADC12INCH_5+ADC12EOS;

 

    ADC12CTL0 |= ADC12ENC;

}

推荐阅读

史海拾趣

Allied Wire & Cable Inc公司的发展小趣事

Allied公司深知客户是公司发展的核心动力。因此,公司始终将客户服务放在首位,为客户提供全方位、个性化的服务支持。无论是产品咨询、技术支持还是售后服务,Allied公司都力求做到最好,赢得了客户的信任和好评。同时,公司还积极与合作伙伴建立长期稳定的合作关系,共同开拓市场,实现互利共赢。

Belden Wire and Cable公司的发展小趣事

随着全球化的深入发展,Belden公司开始积极拓展国际市场。通过在全球范围内设立分支机构和工厂,百通不仅提升了自身的产能和效率,也更好地满足了全球客户的需求。同时,公司还不断推出新产品和新技术,拓展在工控线缆、音视频线缆和计算机网络等领域的市场份额。如今,Belden已经成为全球最大的综合布线及专业线缆制造商之一,其产品和服务遍布全球各地。

这五个故事只是Belden Wire and Cable公司发展历程中的一部分,但它们都客观地反映了公司在电子行业里不断发展、创新和壮大的事实。通过这些故事,我们可以看到一个企业通过不断创新和拓展市场,逐渐成长为行业领导者的过程。

BEKA Associates Ltd公司的发展小趣事

在快速发展的过程中,BCD Semi(Diodes)积极寻求风险投资和资本运作的支持。公司通过吸引国内外知名的投资机构参与投资,获得了大量的资金支持,为公司的研发、生产和市场拓展提供了有力的保障。同时,BCD Semi还通过并购、合作等方式,与行业内的其他企业实现资源共享和优势互补,进一步提升了公司的综合实力。

Helium_Systems__Inc.公司的发展小趣事

在20世纪90年代初,一家名为“海曼电子”(虚构名称,类似HEIMANN发音)的初创公司在德国慕尼黑成立。创始人海曼博士凭借其在半导体材料领域的深厚研究背景,带领团队成功研发出了一种新型高效能传感器芯片。这种芯片在温度测量领域表现出色,迅速获得了市场的认可。随着技术的不断迭代,海曼电子逐渐在传感器市场占据了一席之地,并通过持续的技术创新,将产品线扩展至光电子、汽车电子等多个领域。

CUI公司的发展小趣事

近年来,智能化和物联网技术的快速发展为电子行业带来了前所未有的机遇。CUI技术作为实现电子设备智能化和互联互通的关键环节之一,得到了广泛的应用。一些企业针对智能化和物联网的需求,开发出具有特殊功能的CUI材料,如柔性CUI、透明CUI等,为电子产品的创新提供了有力支持。

请注意,以上故事仅为概述性质,并非针对特定公司的实际发展历程。每个公司的具体情况可能因市场环境、技术实力、管理策略等因素而有所不同。如果需要了解特定公司的具体发展故事,建议查阅相关公司的官方网站、新闻报道或行业分析报告。

Global Communications公司的发展小趣事
根据应用场景中可能遇到的环境温度范围,选择具有相应温度测量范围的温度传感器。

问答坊 | AI 解惑

08年通信业投资策略:TD待放走向国际

2007年国内通信行业整体并未处于高速上升的周期中,但板块内龙头企业的业绩稳固提升,依靠着海外收入规模的不断扩大,享受到了全球通信行业的景气上升。   2008年将是TD商用元年,规模建设也将拉 开序幕,行业中诸多不确定因素也将找到答案 ...…

查看全部问答>

大家都用什么型号的单片机?

我想用单片机做点东西,不知道用什么型号的单片机?有人说AT89C51淘汰了,真的吗?…

查看全部问答>

历届全国大学生电子竞赛试题汇总

本帖最后由 paulhyde 于 2014-9-15 09:23 编辑 历届全国大学生电子竞赛试题汇总  …

查看全部问答>

食人鱼LED的封装

replyreload += \',\' + 369679;     可以把LED的芯片封装成图 所示的食人鱼形状,这种LED很受用户的欢迎。为什么把这种LED称为食人鱼呢?因为它的形状很像亚马孙河中的食人鱼。用食人鱼来命名LED发光器件的一种产品,也是从 ...…

查看全部问答>

求教ucos的移植问题

要用gcc编译,在x86平台上。。。 本人菜鸟,谁能给一个详细的说明啊。。。。 谢谢。…

查看全部问答>

wince5.0 bootloader中 LEAF_ENTRY 的问题

9263 wince5.0中官方给的bootloader(大部分都是)中有个宏如下: EXPORT        __ENTRY;这个不是宏 ,是的前面代码     LEAF_ENTRY __ENTRY 宏定义为: GBLS    VBar VBar      & ...…

查看全部问答>

wince usb packet

请教怎样用usb packet sensing 来判断USB 是不是USB CABLE插入的。 usb 传输是开始传的数据包是怎样的,在USB driver 在哪里去找啊,谢谢~~!!! usb 2.0…

查看全部问答>

ST的置换活动

http://www.stmicroelectronics.com.cn/activity/stm32_2010/stm32_2010.html   手头有块 STM3210B-LK1  现在联系置换不知道有没有机会 明天28号了 有点晚知道 了…

查看全部问答>

双DMA实现I2S播放SD卡中音乐

 本文讨论SD卡作为存储器,I2S播放音频的解决方案SD卡数据的读取虽然很快,即使在最理想的状态下,播放一秒钟的数据,需要大约%4的时间消耗8(bit)x2(ch)x2(byte)x48000(hz)/36(MHz)=0.042s使用单流程模式,这部分损耗是无法忽略的,只能考 ...…

查看全部问答>

请问avr编程时时钟怎么设置

看过相关文档。说是通过熔丝位、CKSEL熔丝位SUT设置。但是在iom16.h里并没有定义该寄存器。可能我没有理解对,刚接触avr,请高手指点!!…

查看全部问答>