MSP430流水灯蜂鸣器实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MSP430实验报告
水位报警器
姓名:丁宇昊
学号:021210508
一、实验目的:
掌握msp430单片机的程序编写和运行过程。

掌握IAR Embedded Workbench程序的编译和运行。

二、实验内容:
用继电器代替传感器输入模拟电压,用IED灯显示水位高度,当超过预定值时,蜂鸣器响,实现报警。

三、使用串口:
P1口,P2口
四、电路实现:
把继电器作为的AD的输入,通过AD转换,把电压分成16小分,每一份信号控制1个led,通过改变led两端电平高低,控制led亮灭。

当到达预定值时,把蜂鸣器的接口设置为高电平。

实验代码:
#include <msp430.h>
void delay(int j)
{
do j--;
while (j != 0);
}
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled
ADC10CTL1 = INCH_1+SREF0; // input A1
ADC10AE0 |= BIT7; // PA.1 ADC option select
P1DIR |= BIT0; // Set P1.0 to output direction
P1DIR|=BIT4;
P1DIR|=BIT5;
P2DIR|= 0xff;
P2OUT|=0xff;
P2SEL&=0x00;
for (;;)
{
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
__bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit
if (ADC10MEM > 960)
{
P1OUT |=BIT4;
P1OUT &= ~BIT5;
P2OUT =0xFE;
}
else if(ADC10MEM >900) { P1OUT |=BIT4;
P1OUT &= ~BIT5;
P2OUT = 0xfc;
}
else if(ADC10MEM >840) { P1OUT |=BIT4;
P1OUT &= ~BIT5;
P2OUT=0xf8;
}
else if(ADC10MEM >780) { P1OUT |=BIT4;
P1OUT &= ~BIT5;
P2OUT= 0xf0;
}
else if(ADC10MEM >660) { P1OUT |=BIT4;
P1OUT &= ~BIT5;
P2OUT= 0xe0;
}
else if(ADC10MEM >600) { P1OUT |=BIT4;
P1OUT &= ~BIT5;
P2OUT= 0xc0;
}
else if(ADC10MEM >540) { P1OUT |=BIT4;
P1OUT &= ~BIT5;
P2OUT= 0x80;
}
else if(ADC10MEM >480) { P1OUT |=BIT4;
P1OUT &= ~BIT5;
P2OUT= 0x00;
}
else if(ADC10MEM >420) { P1OUT&=~BIT5;
P2OUT=0x00;
P2OUT=0x00;
delay(20);
P1OUT&=~BIT4;
P2OUT=0xfe;
P1OUT|=BIT5;
P2OUT=0xfe;
}
else if(ADC10MEM >360) { P1OUT&=~BIT5;
P2OUT=0x00;
P1OUT|=BIT4;
P2OUT=0x00;
delay(20);
P1OUT&=~BIT4;
P2OUT=0xfc;
P1OUT|=BIT5;
P2OUT=0xfc;
}
else if(ADC10MEM >300) {P1OUT&=~BIT5;
P2OUT=0x00;
P1OUT|=BIT4;
P2OUT=0x00;
delay(20);
P1OUT&=~BIT4;
P2OUT=0xf8;
P1OUT|=BIT5;
P2OUT=0xf8;
}
else if(ADC10MEM >240) { P1OUT&=~BIT5;
P2OUT=0x00;
P1OUT|=BIT4;
P2OUT=0x00;
delay(20);
P1OUT&=~BIT4;
P2OUT=0xf0;
P1OUT|=BIT5;
P2OUT=0xf0;
}
else if(ADC10MEM >180) { P1OUT&=~BIT5;
P2OUT=0x00;
P2OUT=0x00;
delay(20);
P1OUT&=~BIT4;
P2OUT=0xe0;
P1OUT|=BIT5;
P2OUT=0xe0;
}
else if(ADC10MEM >120) { P1OUT&=~BIT5;
P2OUT=0x00;
P1OUT|=BIT4;
P2OUT=0x00;
delay(20);
P1OUT&=~BIT4;
P2OUT=0xc0;
P1OUT|=BIT5;
P2OUT=0xc0;
P1DIR |=BIT6; P1OUT ^=BIT6;
delay(100);
}
else if(ADC10MEM >60) { P1OUT&=~BIT5;
P2OUT=0x00;
P1OUT|=BIT4;
P2OUT=0x00;
delay(20);
P1OUT&=~BIT4;
P2OUT=0x80;
P1OUT|=BIT5;
P2OUT=0x80;
P1DIR |=BIT6;
P1OUT ^=BIT6;
delay(100);
}
else
{ P1OUT&=~BIT5;
P2OUT=0x00;
P1OUT|=BIT4;
P2OUT=0x00;
delay(20);
P1OUT&=~BIT4;
P2OUT=0x00;
P2OUT=0x00;
P1DIR |=BIT6;
P1OUT ^=BIT6;
delay(100);
}
}
}
// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
__bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR) }
六、总结。

相关文档
最新文档