MSP430单片机AD转换实验Word格式文档下载.docx

上传人:b****1 文档编号:4471236 上传时间:2023-05-03 格式:DOCX 页数:24 大小:40.71KB
下载 相关 举报
MSP430单片机AD转换实验Word格式文档下载.docx_第1页
第1页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第2页
第2页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第3页
第3页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第4页
第4页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第5页
第5页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第6页
第6页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第7页
第7页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第8页
第8页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第9页
第9页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第10页
第10页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第11页
第11页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第12页
第12页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第13页
第13页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第14页
第14页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第15页
第15页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第16页
第16页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第17页
第17页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第18页
第18页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第19页
第19页 / 共24页
MSP430单片机AD转换实验Word格式文档下载.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

MSP430单片机AD转换实验Word格式文档下载.docx

《MSP430单片机AD转换实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《MSP430单片机AD转换实验Word格式文档下载.docx(24页珍藏版)》请在冰点文库上搜索。

MSP430单片机AD转换实验Word格式文档下载.docx

“main.c”主程序与中断程序:

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

程序功能:

将ADC对P6.0端口电压的转换结果按转换数据和对应的

模拟电压的形式通过串口发送到PC机屏幕上显示

-----------------------------------------------------------

通信格式:

N.8.1,9600

测试说明:

打开串口调试精灵,正确设置通信格式,观察接收数据

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

#include<

msp430.h>

#include"

allfunc.h"

UART0_Func.c"

ADC_Func.c"

#defineNum_of_Results32

uintresults[Num_of_Results];

//保存ADC转换结果的数组

uintaverage;

uchartcnt=0;

/***********************主函数***********************/

voidmain(void)

{

uchari;

ucharbuffer[5];

WDTCTL=WDTPW+WDTHOLD;

//关狗

/*下面六行程序关闭所有的IO口*/

P1DIR=0XFF;

P1OUT=0XFF;

P2DIR=0XFF;

P2OUT=0XFF;

P3DIR=0XFF;

P3OUT=0XFF;

P4DIR=0XFF;

P4OUT=0XFF;

P5DIR=0XFF;

P5OUT=0XFF;

P6DIR=0XFF;

P6OUT=0XFF;

P6DIR|=BIT2;

P6OUT|=BIT2;

//关闭电平转换

P6DIR|=BIT6;

P6OUT&

=~BIT6;

//关闭数码管显示

InitUART();

Init_ADC();

_EINT();

buffer[4]='

\0'

;

while

(1)

{

LPM1;

Hex2Dec(average,buffer);

for(i=0;

i<

4;

i++)

buffer[i]+=0x30;

PutString0("

Thedigitalvalueis:

"

);

PutString(buffer);

Trans_val(average,buffer);

buffer[3]=buffer[2];

buffer[2]=buffer[1];

buffer[1]=0x2e-0x30;

Theanalogvalueis:

}

}

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

函数名称:

ADC12ISR

功能:

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

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

参数:

返回值:

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

#pragmavector=ADC_VECTOR

__interruptvoidADC12ISR(void)

staticucharindex=0;

results[index++]=ADC12MEM0;

//Moveresults

if(index==Num_of_Results)

average=0;

Num_of_Results;

average+=results[i];

average>

>

=5;

//除以32

index=0;

tcnt++;

if(tcnt==250)//主要是降低串口发送速度

LPM1_EXIT;

tcnt=0;

“ADC_Func.c”A/D转换相关程序:

typedefunsignedintuint;

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

Init_ADC

初始化ADC

voidInit_ADC(void)

P6SEL|=0x01;

//使能ADC通道

ADC12CTL0=ADC12ON+SHT0_15+MSC;

//打开ADC,设置采样时间

ADC12CTL1=SHP+CONSEQ_2;

//使用采样定时器

ADC12IE=0x01;

//使能ADC中断

ADC12CTL0|=ENC;

//使能转换

ADC12CTL0|=ADC12SC;

//开始转换

Hex2Dec

将16进制ADC转换数据变换成十进制

表示形式

Hex_Val--16进制数据

ptr--指向存放转换结果的指针

voidHex2Dec(uintHex_val,uchar*ptr)

ptr[0]=Hex_val/1000;

ptr[1]=(Hex_val-ptr[0]*1000)/100;

ptr[2]=(Hex_val-ptr[0]*1000-ptr[1]*100)/10;

ptr[3]=(Hex_val-ptr[0]*1000-ptr[1]*100-ptr[2]*10);

}

Trans_val

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

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

voidTrans_val(uintHex_Val,uchar*ptr)

unsignedlongcaltmp;

uintCurr_Volt;

uchart1;

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

ptr[0]=Curr_Volt/100;

//Hex->

Dec变换

t1=Curr_Volt-(ptr[0]*100);

ptr[1]=t1/10;

ptr[2]=t1-(ptr[1]*10);

“UART0_Func.c”串口程序:

typedefunsignedcharuchar;

InitUART

初始化UART端口

voidInitUART(void)

P3SEL|=0x30;

//P3.4,5=USART0TXD/RXD

ME1|=URXE0+UTXE0;

//EnableUSART0T/RXD

UCTL0|=CHAR;

//8-bitcharacter

UTCTL0|=SSEL0;

//UCLK=ACLK

UBR00=0x03;

//32k/9600-3.41

UBR10=0x00;

//

UMCTL0=0x4A;

//Modulation

UCTL0&

=~SWRST;

//InitializeUSARTstatemachine

Send1Char

向PC机发送一个字符

sendchar--要发送的字符

voidSend1Char(ucharsendchar)

while(!

(IFG1&

UTXIFG0));

//等待发送寄存器为空

TXBUF0=sendchar;

PutSting

向PC机发送字符串并换行指令

ptr--指向发送字符串的指针

voidPutString(uchar*ptr)

while(*ptr!

='

Send1Char(*ptr++);

//发送数据

TXBUF0='

\n'

//发送换行指令

PutSting0

向PC机发送字符串,无换行

voidPutString0(uchar*ptr)

2、程序2:

转换结果显示在1602显示模块上

“main.c”程序

msp430x14x.h>

cry1602.h"

/**************宏定义***************/

#defineDataDirP2DIR

#defineDataPortP2OUT

#defineBusy0x80

#defineCtrlDirP6DIR

#defineCLR_RSP6OUT&

=~BIT3;

//RS=P6.3

#defineSET_RSP6OUT|=BIT3;

#defineCLR_RWP6OUT&

=~BIT4;

//RW=P6.4

#defineSET_RWP6OUT|=BIT4;

#defineCLR_ENP6OUT&

=~BIT5;

//EN=P6.5

#defineSET_ENP6OUT|=BIT5;

DispNchar

让液晶从某个位置起连续显示N个字符

x--位置的列坐标

y--位置的行坐标

n--字符个数

ptr--指向字符存放位置的指针

voidDispNChar(ucharx,uchary,ucharn,uchar*ptr)

for(i=0;

i<

n;

i++)

Disp1Char(x++,y,ptr[i]);

if(x==0x0f)

{

x=0;

y^=1;

}

LocateXY

向液晶输入显示字符位置的坐标信息

voidLocateXY(ucharx,uchary)

uchartemp;

temp=x&

0x0f;

y&

=0x01;

if(y)temp|=0x40;

//如果在第2行

temp|=0x80;

LcdWriteCommand(temp,1);

Disp1Char

在某个位置显示一个字符

data--显示的字符数据

voidDisp1Char(ucharx,uchary,uchardata)

LocateXY(x,y);

LcdWriteData(data);

LcdReset

对1602液晶模块进行复位操作

voidLcdReset(void)

CtrlDir|=0x07;

//控制线端口设为输出状态

DataDir=0xFF;

//数据端口设为输出状态

LcdWriteCommand(0x38,0);

//规定的复位操作

Delay5ms();

LcdWriteCommand(0x38,0);

LcdWriteCommand(0x38,1);

//显示模式设置

LcdWriteCommand(0x08,1);

//显示关闭

LcdWriteCommand(0x01,1);

//显示清屏

LcdWriteCommand(0x06,1);

//写字符时整体不移动

LcdWriteCommand(0x0c,1);

//显示开,不开游标,不闪烁

LcdWriteCommand

向液晶模块写入命令

cmd--命令,

chk--是否判忙的标志,1:

判忙,0:

不判

voidLcdWriteCommand(ucharcmd,ucharchk)

if(chk)WaitForEnable();

//检测忙信号?

CLR_RS;

CLR_RW;

_NOP();

DataPort=cmd;

//将命令字写入数据端口

SET_EN;

//产生使能脉冲信号

CLR_EN;

LcdWriteData

向液晶显示的当前地址写入显示数据

data--显示字符数据

voidLcdWriteData(uchardata)

WaitForEnable();

//等待液晶不忙

SET_RS;

DataPort=data;

//将显示数据写入数据端口

WaitForEnable

等待1602液晶完成内部操作

voidWaitForEnable(void)

P2DIR&

=0x00;

//将P4口切换为输入状态

SET_RW;

while((P2IN&

Busy)!

=0);

//检测忙标志

P2DIR|=0xFF;

//将P4口切换为输出状态

Delay5ms

延时约5ms

voidDelay5ms(void)

{

uinti=40000;

while(i!

=0)

i--;

Delay400ms

延时约400ms

voidDelay400ms(void)

uchari=50;

uintj;

while(i--)

j=7269;

while(j--);

“cry1602.c”程序

temp|=0x8

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2