📄 adzhuanhuan.c
字号:
#include<msp430x44x.h> //头文件
void Init(void); //系统初始化函数声明
void LCD_Init(void); //夜晶显示初始化函数声明
void TimerA_Init(void); //TimerA定时器初始化函数声明
void ADC12_Init(void); //A/D转换初始化函数声名
char digit[16]={0X7B,0X12,0X4F,0X1F,0X36,0X3D,0X7D,0X13,0X7F,0X3F,0X77,0X7C,0X69,0X5E,0X6D,0X65}; //LCD不带小数点显示译码表
char digit1[16]={0XFB,0X92,0XCF,0X9F,0XB6,0XBD,0XFD,0X93,0XFF,0XBF,0XF7,0XFC,0XE9,0XDE,0XED,0XE5}; //LCD带小数点显示译码表
unsigned int i,ADT,ADT1,ADT_Q,ADT_B,ADT_S,ADT_Z; //设置变量
void main(void) //主程序
{
Init(); //调用系统初始化子程序
LCD_Init(); //调用LCD显示初始化子程序
TimerA_Init(); //调用Timer_A初始化子程序
ADC12_Init(); //调用AD转换初始化子程序
_EINT(); //中断使能
while(1); //等待
}
void Init(void) //系统初始化子程序
{
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
FLL_CTL0&=0XBF; //主时钟为8M
P6SEL=0X01; //P6.0为A/D转换通道
P6DIR &=~BIT0;
}
void ADC12_Init(void) //ADC12初始化子程序
{
ADC12CTL0&=~ENC; //ENC为低电平,设置AD控制寄存器
ADC12CTL0=ADC12ON; //打开ADC12
ADC12CTL1=SHP+CONSEQ_0; //采样信号控制位选择,单通道单次转换
ADC12MCTL0=INCH_0+SREF_0; //模拟输入通道为A0,参考电压选择0~3.3V
ADC12IE=0X01; //使能A/D中断
ADC12CTL0|=ENC; //使能ADC转换
}
void TimerA_Init(void) //定时器A初始化子程序
{
TACTL=TASSEL0+TACLR; //辅助时钟,清TAR
TACCTL0=CCIE; //置定时器A中断使能位
TACCR0=32768; //给TACCR0赋初值, 中断时间为1s
TACTL|=MC0; //TimerA为增计数模式
}
void LCD_Init(void) //LCD初始化子程序
{
FLL_CTL0|=XCAP14PF; //操作FLL+
LCDCTL=LCDON+LCD4MUX+LCDP1; //液晶使用4MUX模式,使用S0~S17段
BTCTL=BTFRFQ1; //使用基本定时器提供液晶时钟
P5SEL=0XFC; //Common与Rxx都选择
for(i=0;i<7;i++)
{
LCDMEM[i]=0; //都显示0
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)//定时器A中断子程序
{
ADC12CTL0|=ADC12SC; //每1s,使能一次采样
}
#pragma vector=ADC_VECTOR//ADC中断服务程序
__interrupt void ADC12ISR(void)
{
ADT=ADC12MEM0; //12位A/D转换值
ADT1=((unsigned long)ADT*3300)/4095; //电压转化计算
ADT_Z=ADT1/1000; //取整数位
ADT_S=(ADT1/100)%10; //取十分位
ADT_B=(ADT1%100)/10; //取百分位
ADT_Q=ADT1%10; //取千分位
LCDMEM[0]=digit[ADT_Q]; //分别显示整数位和三位小数位
LCDMEM[1]=digit[ADT_B];
LCDMEM[2]=digit[ADT_S];
LCDMEM[3]=digit1[ADT_Z];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -