msp430 ADC多通道采集以及12864液晶显示以及串口发送Word文档下载推荐.docx

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

msp430 ADC多通道采集以及12864液晶显示以及串口发送Word文档下载推荐.docx

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

msp430 ADC多通道采集以及12864液晶显示以及串口发送Word文档下载推荐.docx

//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

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;

results2[index++]=ADC12MEM2;

results3[index++]=ADC12MEM3;

if(index==Num_of_Results)

uchari;

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

index=0;

for(i=0;

i<

Num_of_Results;

i++)

sum0+=results0[i];

sum1+=results1[i];

sum2+=results2[i];

sum3+=results3[i];

sum0>

=5;

//除以32

sum1>

sum2>

sum3>

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

//以下是串口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'

//TX缓存空闲?

TXBUF0=*ptr++;

//发送数据

TXBUF0='

;

Delays

延时一会

voidDelays(void)

uchari=20;

uintj;

while(i--)

j=2000;

while(j--);

//串口中断响应函数

#pragmavector=UART0RX_VECTOR

__interruptvoidusart0_rx(void)

if(49==RXBUF0)

if(50==RXBUF0)

ADC12IE=0x00;

//关闭ADC

//USART.H

#ifndef__USART0_H

#define__USART0_H

externvoidUsart0_Init();

externvoidSentData(ucharnum);

externvoidPutString(uchar*ptr);

externvoidDelays(void);

externvoidSent_Num(uintnum);

//LCD12864.H

#ifndef_LCD12864_H

#define_LCD12864_H

#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))

#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<

P17)//RS置低

#defineRS_SETP6OUT|=(1<

P17)//RS置高

#defineRW_CLRP6OUT&

P15)//RW置低

#defineRW_SETP6OUT|=(1<

P15)//RW置高

#defineEN_CLRP6OUT&

P16)//E置低

#defineEN_SETP6OUT|=(1<

P16)//E置高

#definePSB_CLRP1OUT&

P13)//PSB置低,串口方式

#definePSB_SETP1OUT|=(1<

P13)//PSB置高,并口方式

#defineRST_CLRP1OUT&

P13)//RST置低

#defineRST_SETP1OUT|=(1<

P10)//RST置高

#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);

//LCD12864.C

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

//初始化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;

DataPort=data;

//显示屏清空显示

voidLCD_clear(void)

LCD_write_com(0x01);

//坐标定位

voidLocate_XY(ucharx,uchary)

ucharadress=0;

adress=x;

switch(y)

case1:

adress|=0x80;

break;

case2:

adress|=0x90;

case3:

adress|=0x88;

case4:

adress|=0x98;

default:

adress=0x80;

LCD_write_com(adress);

//函数名称:

DisplayCgrom(ucharhz)显示CGROM里的汉字

voidDisplayCgrom(ucharaddr,uchar*hz)

LCD_write_com(addr);

while(*hz!

LCD_write_data(*hz);

hz++;

}

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

Display()显示测试结果

voidDisplay(void)

DisplayCgrom(0x80,"

通道0:

"

DisplayCgrom(0x90,"

通道1:

DisplayCgrom(0x88,"

通道2:

DisplayCgrom(0x98,"

通道3:

DisplayCgrom(0x80+7,"

V"

DisplayCgrom(0x90+7,"

DisplayCgrom(0x88+7,"

DisplayCgrom(0x98+7,"

Display_Num显示一个uint型数据

voidDisplay_Num(ucharx,uchary,uintnum)

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;

LCD_write_data('

'

.'

//显示屏初始化函数

voidLCD_init(void)

LCD_write_com(FUN_MODE);

//显示模式设置

LCD_write_com(DISPLAY_ON);

//显示开

LCD_write_com(CLEAR_SCREEN);

//清屏

//MAIN.C

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

当前位置:首页 > 职业教育 > 职业技术培训

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

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