msp430 ADC多通道采集以及12864液晶显示以及串口发送.docx

上传人:b****8 文档编号:9431220 上传时间:2023-02-04 格式:DOCX 页数:17 大小:17.94KB
下载 相关 举报
msp430 ADC多通道采集以及12864液晶显示以及串口发送.docx_第1页
第1页 / 共17页
msp430 ADC多通道采集以及12864液晶显示以及串口发送.docx_第2页
第2页 / 共17页
msp430 ADC多通道采集以及12864液晶显示以及串口发送.docx_第3页
第3页 / 共17页
msp430 ADC多通道采集以及12864液晶显示以及串口发送.docx_第4页
第4页 / 共17页
msp430 ADC多通道采集以及12864液晶显示以及串口发送.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

msp430 ADC多通道采集以及12864液晶显示以及串口发送.docx

《msp430 ADC多通道采集以及12864液晶显示以及串口发送.docx》由会员分享,可在线阅读,更多相关《msp430 ADC多通道采集以及12864液晶显示以及串口发送.docx(17页珍藏版)》请在冰豆网上搜索。

msp430 ADC多通道采集以及12864液晶显示以及串口发送.docx

msp430ADC多通道采集以及12864液晶显示以及串口发送

//ADC.H

#ifndef__ADC_H

#define__ADC_H

#include

#defineucharunsignedchar

#defineuintunsignedint

externvoidTrans_val(ucharx,uchary,uintHex_Val);

externvoidADC_Init();

#endif

//ADC.C

#include

#include"USART0.h"

#include"ADC.h"

#include"lcd12864.h"

#defineNum_of_Results128

staticuintresults0[Num_of_Results];//保存ADC转换结果的数组

staticuintresults1[Num_of_Results];//保存ADC转换结果的数组

staticuintresults2[Num_of_Results];//保存ADC转换结果的数组

staticuintresults3[Num_of_Results];//保存ADC转换结果的数组

//ADC初始化

voidADC_Init()

{

P6SEL=0x0F;//EnableA/Dchannelinputs

ADC12CTL0=ADC12ON+MSC+SHT0_2;//TurnonADC12,setsamplingtime

ADC12CTL1=SHP+CONSEQ_1;//Usesamplingtimer,singlesequence

ADC12MCTL0=INCH_0;//ref+=AVcc,channel=A0

ADC12MCTL1=INCH_1;//ref+=AVcc,channel=A1

ADC12MCTL2=INCH_2;//ref+=AVcc,channel=A2

ADC12MCTL3=INCH_3+EOS;//ref+=AVcc,channel=A3,endseq.

ADC12IE=0x08;//EnableADC12IFG.3

ADC12CTL0|=ENC;//Enableconversions

}

/*******************************************

函数名称:

Trans_val

功能:

将16进制ADC转换数据变换成三位10进制

真实的模拟电压数据,并在液晶上显示

参数:

Hex_Val--16进制数据

n--变换时的分母等于2的n次方

返回值:

********************************************/

voidTrans_val(ucharx,uchary,uintHex_Val)

{

unsignedlongcaltmp;

uintCurr_Volt;

caltmp=Hex_Val;

caltmp=(caltmp<<5)+Hex_Val;//caltmp=Hex_Val*33

caltmp=(caltmp<<3)+(caltmp<<1);//caltmp=caltmp*10

Curr_Volt=caltmp>>12;//Curr_Volt=caltmp/2^n

Display_Value(x,y,Curr_Volt);

}

/*******************************************

函数名称:

ADC12ISR

功能:

ADC中断服务函数,在这里用多次平均的

计算P6.0口的模拟电压数值

参数:

返回值:

********************************************/

#pragmavector=ADC_VECTOR

__interruptvoidADC12ISR(void)

{

staticuintindex=0;

results0[index++]=ADC12MEM0;//Moveresults

results1[index++]=ADC12MEM1;//Moveresults

results2[index++]=ADC12MEM2;//Moveresults

results3[index++]=ADC12MEM3;//Moveresults

if(index==Num_of_Results)

{

uchari;

unsignedlongsum0=0,sum1=0,sum2=0,sum3=0;

index=0;

for(i=0;i

{

sum0+=results0[i];

sum1+=results1[i];

sum2+=results2[i];

sum3+=results3[i];

}

sum0>>=5;//除以32

sum1>>=5;//除以32

sum2>>=5;//除以32

sum3>>=5;//除以32

Display_Num(3,1,sum0);

Display_Num(3,2,sum1);

Display_Num(3,3,sum2);

Display_Num(3,4,sum3);

Trans_val(5,1,sum0);

Trans_val(5,2,sum1);

Trans_val(5,3,sum2);

Trans_val(5,4,sum3);

}

_BIC_SR_IRQ(LPM0_bits);//ClearLPM0,SETBREAKPOINTHERE

}

//USART.C

#include"USART0.h"

//以下是串口0的初始化设置

voidUsart0_Init()

{

P3SEL|=0x30;//P3.4,5选择为UART收发端口

ME1|=UTXE0+URXE0;//使能USART0收发

UCTL0|=CHAR;//8-bitcharacter

UTCTL0|=SSEL0;//UCLK=ACLK

UBR00=0x0D;//32k/2400-13.65

UBR10=0x00;//

UMCTL0=0x6B;//Modulation

UCTL0&=~SWRST;//初始化UART0状态机

IE1|=URXIE0;//使能接收中断

}

//此函数用来发送一个char型

voidSentData(ucharnum)

{

while(!

(IFG1&UTXIFG0));

TXBUF0=num;

}

//此函数用来把1~4位十进制数据转化为ASCII编码的形式发送给上位机

voidSent_Num(uintnum)

{

ucharge,shi,bai,qian;

qian=num/1000;

bai=num/100%10;

shi=num/10%10;

ge=num%10;

SentData(qian+0x30);

SentData(bai+0x30);

SentData(shi+0x30);

SentData(ge+0x30);

//SentData('\n');

}

/*******************************************

函数名称:

PutSting

功能:

向PC机发送字符串

参数:

返回值:

********************************************/

voidPutString(uchar*ptr)

{

while(*ptr!

='\0')

{

while(!

(IFG1&UTXIFG0));//TX缓存空闲?

TXBUF0=*ptr++;//发送数据

}

while(!

(IFG1&UTXIFG0));

TXBUF0='\n';

}

/*******************************************

函数名称:

Delays

功能:

延时一会

参数:

返回值:

********************************************/

voidDelays(void)

{

uchari=20;

uintj;

while(i--)

{

j=2000;

while(j--);

}

}

//串口中断响应函数

#pragmavector=UART0RX_VECTOR

__interruptvoidusart0_rx(void)

{

if(49==RXBUF0)

{

_BIC_SR_IRQ(LPM0_bits);//ClearLPM0,SETBREAKPOINTHERE

}

if(50==RXBUF0)

{

ADC12IE=0x00;//关闭ADC

}

}

//USART.H

#ifndef__USART0_H

#define__USART0_H

#include

#defineucharunsignedchar

#defineuintunsignedint

externvoidUsart0_Init();

externvoidSentData(ucharnum);

externvoidPutString(uchar*ptr);

externvoidDelays(void);

externvoidSent_Num(uintnum);

#endif

//LCD12864.H

#ifndef_LCD12864_H

#define_LCD12864_H

#include

#defineCPU_F((double)8000000)

#definedelay_us(x)__delay_cycles((long)(CPU_F*(double)x/1000000.0))

#definedelay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0))

#defineucharunsignedchar

#defineuintunsignedint

#defineulongunsignedlong

/*12864应用指令*/

#defineCLEAR_SCREEN0x01//清屏指令:

清屏且AC值为00H

#defineAC_INIT0x02//将AC设置为00H。

且游标移到原点位置

#defineCURSE_ADD0x06//设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)

#defineFUN_MODE0x30//工作模式:

8位基本指令集

#defineDISPLAY_ON0x0c//显示开,不显示游标,且游标位置反白

#defineDISPLAY_OFF0x08//显示关

#defineCURSE_DIR0x14//游标向右移动:

AC=AC+1

#defineSET_CG_AC0x40//设置AC,范围为:

00H~3FH

#defineSET_DD_AC0x80

#defineP100

#defineP111

#defineP122

#defineP133

#defineP144

#defineP155

#defineP166

#defineP177

#defineRS_CLRP6OUT&=~(1<

#defineRS_SETP6OUT|=(1<

#defineRW_CLRP6OUT&=~(1<

#defineRW_SETP6OUT|=(1<

#defineEN_CLRP6OUT&=~(1<

#defineEN_SETP6OUT|=(1<

#definePSB_CLRP1OUT&=~(1<

#definePSB_SETP1OUT|=(1<

#defineRST_CLRP1OUT&=~(1<

#defineRST_SETP1OUT|=(1<

#defineDataPortP5OUT//P5口为数据口

externvoidPort_init();

externvoidLCD_write_com(unsignedcharcom);

externvoidLCD_write_data(unsignedchardata);

externvoidLCD_clear(void);

externvoidDisplayCgrom(ucharaddr,uchar*hz);

externvoidDisplay(void);

externvoidLCD_init(void);

externvoidDisplay_Num(ucharx,uchary,uintnum);

externvoidLocate_XY(ucharx,uchary);

externvoidDisplay_Value(ucharx,uchary,uintvalue);

#endif

//LCD12864.C

#include"lcd12864.h"

//*************************************************************************

//初始化IO口子程序

//*************************************************************************

voidPort_init()

{

P5SEL=0x00;

P5DIR=0xFF;

P6SEL=0x00;

P6DIR|=BIT5+BIT6+BIT7;

P1SEL=0x00;

P1DIR|=BIT0+BIT3;

PSB_SET;//液晶并口方式

RST_SET;//复位脚RST置高

}

//***********************************************************************

//显示屏命令写入函数

//***********************************************************************

voidLCD_write_com(unsignedcharcom)

{

RS_CLR;

RW_CLR;

EN_SET;

DataPort=com;

delay_ms(5);

EN_CLR;

}

//***********************************************************************

//显示屏数据写入函数

//***********************************************************************

voidLCD_write_data(unsignedchardata)

{

RS_SET;

RW_CLR;

EN_SET;

DataPort=data;

delay_ms(5);

EN_CLR;

}

//***********************************************************************

//显示屏清空显示

//***********************************************************************

voidLCD_clear(void)

{

LCD_write_com(0x01);

delay_ms(5);

}

//***********************************************************************

//坐标定位

//***********************************************************************

voidLocate_XY(ucharx,uchary)

{

ucharadress=0;

adress=x;

switch(y)

{

case1:

adress|=0x80;break;

case2:

adress|=0x90;break;

case3:

adress|=0x88;break;

case4:

adress|=0x98;break;

default:

adress=0x80;

}

LCD_write_com(adress);

}

//***********************************************************************

//函数名称:

DisplayCgrom(ucharhz)显示CGROM里的汉字

//***********************************************************************

voidDisplayCgrom(ucharaddr,uchar*hz)

{

LCD_write_com(addr);

delay_ms(5);

while(*hz!

='\0')

{

LCD_write_data(*hz);

hz++;

delay_ms(5);

}

}

//****************************************************************

//函数名称:

Display()显示测试结果

//****************************************************************

voidDisplay(void)

{

DisplayCgrom(0x80,"通道0:

");

DisplayCgrom(0x90,"通道1:

");

DisplayCgrom(0x88,"通道2:

");

DisplayCgrom(0x98,"通道3:

");

DisplayCgrom(0x80+7,"V");

DisplayCgrom(0x90+7,"V");

DisplayCgrom(0x88+7,"V");

DisplayCgrom(0x98+7,"V");

}

//****************************************************************

//函数名称:

Display_Num显示一个uint型数据

//****************************************************************

voidDisplay_Num(ucharx,uchary,uintnum)

{

ucharge,shi,bai,qian;

qian=num/1000;

bai=num/100%10;

shi=num/10%10;

ge=num%10;

Locate_XY(x,y);

LCD_write_data(qian+0x30);

LCD_write_data(bai+0x30);

LCD_write_data(shi+0x30);

LCD_write_data(ge+0x30);

}

//****************************************************************

//函数名称:

显示处理后电压值

//****************************************************************

voidDisplay_Value(ucharx,uchary,uintvalue)

{

ucharge,shi,bai;

bai=value/100%10;

shi=value/10%10;

ge=value%10;

Locate_XY(x,y);

LCD_write_data('');

LCD_write_data(bai+0x30);

LCD_write_data('.');

LCD_write_data(shi+0x30);

LCD_write_data(ge+0x30);

}

//***********************************************************************

//显示屏初始化函数

//***********************************************************************

voidLCD_init(void)

{

LCD_write_com(FUN_MODE);//显示模式设置

delay_ms(5);

LCD_write_com(FUN_MODE);//显示模式设置

delay_ms(5);

LCD_write_com(DISPLAY_ON);//显示开

delay_ms(5);

LCD_write_com(CLEAR_SCREEN);//清屏

delay_ms(5);

}

//MAIN.C

#include

#include"ADC.h"

#include"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 企业管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1