📄 main.c
字号:
//使用AD单通道多次转换,采集P6.0输入的模拟电压值(0变化范围:0~3.3
//转换为数字量,建立二维数组和通过顺序查表的方法得出下埃及回来的电压值
//,然后通过数码管显示当前电压值,显示跟随输入的模拟电压的变化。由于只有两位数码管,故显示电压值景区到小数点后
//一位,如果是2.37显示2.4.
#include "msp430.h"
void Init(void);
__interrupt void ADC12_interrupt(void);
unsigned int Result;
unsigned int Table[4][10]={{0x040,0x0bc,0x138,0x1b4,0x2ac,0x328,0x3a4,0x420,0x49c},
{0x518,0x594,0x610,0x68c,0x708,0x784,0x800,0x87c,0x8f8,0x974 },
{0x9f0,0xa6c,0xae8,0xb64,0xbe0,0xc5c,0xc08,0xd54,0xdd0,0xe4c},
{0xec8,0xf44,0xfc0,0xfff}};
//该数组元素用于与AD转换的电压相比较 如果某个数组元素稍大于等于AD转换后的电压数值,
//就输出
int main( void )
{
P4DIR=0XFF;//mov #0xfff,p4dir mov #01000101b,r3 add #56,r3
P5DIR=0XFF;
Init();
_EINT();
ADC12CTL0|=ENC+ADC12SC;//设置,转换允许位置1,采样/控制位置1 采样信号SAMPCON由采样定时器产生(SHP=1)
//则 产生一次转换
while(1);
//return 0;
}
void Init(void)
{
WDTCTL=WDTHOLD+WDTPW;
P6SEL|=0X01;
ADC12CTL0&=~ENC; //复位转换允许位
ADC12CTL0=ADC12ON+SHT0_2+REFON+REF2_5V;//ADC12ON打开模块 可以进行转换
//SHT0_2周期是4*t*4
//REFON内部参考电压打开
//REF2_5V 电压 2.5V
ADC12CTL1=SHP+CONSEQ_2;//SHP SAMPON 来自采样定时器,采样信号上升沿触发
// CONSEQ_2单通道 多次转换模式
ADC12MCTL0=SREF_0;
ADC12IE|=BIT0;
}
#pragma vector=ADC_VECTOR
__interrupt void ADC_interrupt(void)
{
unsigned char seg_7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char seg_8[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
unsigned i,j;
ADC12CTL0&=~ENC;
for(i=0;i<4;i++)
{
for(j=0;j<10;j++)
{
if(ADC12MEM0<=Table[i][j])
goto xxx;
}
}
xxx:{P4OUT=seg_7[j];
P5OUT=seg_8[i];}
ADC12CTL0|=ENC+ADC12SC;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -