历史上的今天
今天是: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; }
下一篇:MSP430之点灯入门
史海拾趣
|
2007年国内通信行业整体并未处于高速上升的周期中,但板块内龙头企业的业绩稳固提升,依靠着海外收入规模的不断扩大,享受到了全球通信行业的景气上升。 2008年将是TD商用元年,规模建设也将拉 开序幕,行业中诸多不确定因素也将找到答案 ...… 查看全部问答> |
|
wince5.0 bootloader中 LEAF_ENTRY 的问题 9263 wince5.0中官方给的bootloader(大部分都是)中有个宏如下: EXPORT __ENTRY;这个不是宏 ,是的前面代码 LEAF_ENTRY __ENTRY 宏定义为: GBLS VBar VBar & ...… 查看全部问答> |
|
请教怎样用usb packet sensing 来判断USB 是不是USB CABLE插入的。 usb 传输是开始传的数据包是怎样的,在USB driver 在哪里去找啊,谢谢~~!!! usb 2.0… 查看全部问答> |
|
本文讨论SD卡作为存储器,I2S播放音频的解决方案SD卡数据的读取虽然很快,即使在最理想的状态下,播放一秒钟的数据,需要大约%4的时间消耗8(bit)x2(ch)x2(byte)x48000(hz)/36(MHz)=0.042s使用单流程模式,这部分损耗是无法忽略的,只能考 ...… 查看全部问答> |




