#include<msp430x14x.h>
#define uint unsigned int
#define uchar unsigned char
#define ulint unsigned long int
#define RS BIT0;
#define RW BIT1;
#define EN BIT2;
uint Volt0; //设置电压变量
ulint Volttem0;
unsigned data0=0,data1=0;
uint ADresult0; //设置A/D转换结果
uint a[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管不带小数点译码
uint b[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//数码管带小数点译码
uchar c[]={"voltage:"};
uchar *fu="V",*dian=".";
uchar num[]={"0123456789"}; //电压值寻址
int value[4]={0,0,0,0}; //存放电压 (v/1000)
int counter=0; //计数分时显示
void lcd_init(); //初始化LCD
void lcd_wcmd(uchar cmd); //写LCD指令
void lcd_wdata(uchar data); //写LCD数据
void lcd_pos(uchar pos); //设置LCD显示位置
void LED_SH();
void LCD_SH();
void Adcvolt(void) //进行电压转换时ADC12的初始化
{
ADC12CTL0 &=~ENC; //ENC为低电平,设置AD控制寄存器
ADC12CTL0 |=ADC12ON+MSC; //打开ADC12,可以进行AD转换,参考电压3.3V
ADC12CTL1=CSTARTADD_0+CONSEQ_1+SHP;//单通道单次转换,采样频率源自采样定时器
ADC12MCTL0=EOS+INCH_0; //选择模拟输入通道1
ADC12IE |=BIT0; //AD转换中断允许
ADC12CTL0 |=ENC; //转换允许
ADC12CTL0 |=ADC12SC; //开始AD转换
}
void Delay(uint n) //延时函数
{
uint i,j;
for(i=n;i>0;i--)
for(j=100;j>0;j--) ;
}
void lcd_init() //初始化LCD
{
lcd_wcmd(0x38);//16*2显示、5*7显示、8位数据显示
Delay(1);
lcd_wcmd(0x0c);//显示开,关光标
Delay(1);
lcd_wcmd(0x06);//移动光标
Delay(1);
lcd_wcmd(0x01);//清除LCD现实的内容
Delay(1);
}
void lcd_wcmd(uchar cmd) //LCD写指令
{
P3OUT &=~RS;
P3OUT &=~RW;
P3OUT &=~EN;
P4OUT=cmd;
P3OUT |=EN;
Delay(1);
P3OUT &=~EN;
}
void lcd_pos(uchar pos) //设置显示位置
{
lcd_wcmd(pos | 0x80);
}
void lcd_wdata(uchar data)//写入数据到LCD
{
P3OUT |=RS;
P3OUT &=~RW;
P3OUT &=~EN;
P4OUT = data;
P3OUT |=EN;
P3OUT &=~EN;
}
void LED_SH() //LED_show
{
P2OUT |=BIT1+BIT3+BIT4;
P4OUT=0xff;
P5OUT=0x01; //选择第一位数码管
P4OUT=b[value[0]]; //P4口显示采样值的个位
Delay(3);
P4OUT=0xff;
P5OUT=0x02; //选择第二位数码管
P4OUT=a[value[1]];//P4口显示采样值的第一位小数
Delay(3);
P4OUT=0xff;
P5OUT=0x04; //选择第三位数码管
P4OUT=a[value[2]];//P4显示采样值的第二位小数
Delay(3);
P4OUT=0xff;
P5OUT=0x08; //选择第四位数码管
P4OUT=a[value[3]];//P4显示采样值的第三位小数
Delay(3);
P4OUT=0xff;
}
void LCD_SH() //LCD_show
{
uint i;
P2OUT &=~(BIT1+BIT3+BIT4);//turn off 74HC573