#include "12864.h"
float temp
float voltage
void main(void)
{
unsigned char s1[] ={"宝鸡文理学院"}
unsigned char s2[] ={"MSP430GLAUNCHPAD"}
unsigned char s3[] ={"测得当前峰峰值:"}
unsigned char s4[] ={"V"}
WDTCTL = WDTPW+WDTHOLD// 停止看门狗定时器
P2SEL=0x00//p2.6和p2.7管教默认的第一功能是外部晶体振荡器的接口,设置第二功能-通用IO口
P2DIR |= BIT6+BIT7//设置P2.6,P2.7位输出
P1SEL = 0x01//将IO选择为AD输入
P1DIR = 0
/*将内部DCO校准至1MHz*/
BCSCTL1 |= CALBC1_1MHZ
DCOCTL |= CALDCO_1MHZ
BCSCTL2 |= SELM_0//MCLK采用1M的内部DCO
BCSCTL2 |= DIVS_2//SMCLK采用250K的时钟
init_lcd()
delay_ms(10)
wr_string(1,0,s1)//写参数格式:wr_string(uchar x,uchar y,uchar *p)
wr_string(0,1,s2)
wr_string(0,2,s3)
ADC10CTL0 |= SREF_1+REF2_5V+REFON+ADC10IE//将AD10基准设置为2.5V 开启AD允许中断
ADC10CTL0 |= ADC10SHT_0+MSC//打开AD转换,过采样率设置为4个采样周期
ADC10CTL1 |= ADC10SSEL_3+SHS_0//选择250K的采样时钟,用ADC10SC触发采集
ADC10CTL1 |= CONSEQ_2+INCH_0//采样模式,通道0
ADC10CTL0 |= ADC10ON
ADC10AE0 |= 0xFF
ADC10CTL0 |= ADC10SC+ENC
_EINT()//允许中断
while(1)
{
float max[10]
float ma=0.
float dave=0
uint i,j
delay_ms(50)
ADC10CTL0 |= ENC+ADC10SC
for(j=0j<10j++)
{
for(i=0i<500i++)
{
temp = ADC10MEM
voltage = temp*25/10230//计算采集到的电压
if(ma<=voltage)
{
ma = voltage//取峰值电压
}
max[j] = ma
}
dave += max[j]/10//求平均值
}
wr_float(1,3,dave)
wr_string(5,3,s4)
}
}
//AD中断服务程序
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
__bic_SR_register_on_exit(LPM0_bits)//将SR里的CPUOFF位置0
}
//定时器输出单元
#pragma vector=TIMER0_A0_VECTOR
__interrupt void ta0_isr(void)
{
TACTL = 0
__bic_SR_register_on_exit(LPM0_bits)//将SR里的CPUOFF位置0
}
用十位的二进制,除以10,余数就是个位;商,继续除以10,余数就是十位;
依次类推,可得出百位、千位。
十位的二进制,除以10,可以使用二字节除以一字节的除法子程序,这个子程序可见我前几天写出的答案:
http://zhidao.baidu.com/question/130203351.html
---------------------
一个高8位和一个低2位(******xx)这两者如何结合?
呵呵,这应该另外提出一个新问题。
// 定义与 ADC 有关的特殊功能寄存器sfr P1_ASF = 0x9d//A/D转换功能允许寄存器
sfr ADC_CONTR = 0xbc//A/D转换控制寄存器
sfr ADC_RES = 0xbd //A/D转换结果寄存器
sfr ADC_RESL = 0xbe //A/D转换结果寄存器
uint8 get_AD(uint8 channel)
{
ADC_RES = 0
P1 |= (0x01 <<channel)//要设置为 A/D 转换的P1.x 口,先设为高
P1_ASF &= (~(0x01 <<channel))//设置 A/D 转换输入脚
ADC_CONTR =0xa8 | channel// 选择 A/D 当前通道
while (!(ADC_CONTR &0x10)) // 等待A/D 转换结束
{
}
ADC_CONTR &= 0xF7//1111,0111 令 ADC_START = 0, 关闭A/D 转换,
return (((unint16)ADC_RES)<<2 | (0xfc &ADC_RESL)// 返回 A/D 转换结果
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)