教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 小学教育 >

单片机430 AD转换

来源:网络收集 时间:2026-08-16
导读: #include msp430g2553.h char a[6] = ; int da; int j ; double c,data; void delay(int t) { int s=500; for(;t0;t--) { for(;s0;s--) { ;; } } } void write_com(char com) { P1OUT=~(13);//rS=0 p1.3复位赋值为0--0=输入指令,1=输入数据 P1OUT=~(16);//R

#include "msp430g2553.h"
char a[6] =" ";
int da;
int j ;
double c,data;
void delay(int t)
{
int s=500;
for(;t>0;t--)
{
for(;s>0;s--)
{
;;
}
}
}

void write_com(char com)
{
P1OUT&=~(1<<3);//rS=0 p1.3复位赋值为0--0=输入指令,1=输入数据
P1OUT&=~(1<<6);//RW=0 p1.6控制为0--0=向lcd写入指令或数据,1=从lcd读取数据
P1OUT&=~(1<<4);// p1.4输出赋值为0--
P1OUT&=~(1<<5);//en=0 p1.5时能赋值为0--1=读取信息,1->0下降沿执行指令
P1OUT&=~(1<<1);//
delay(8);
P2OUT=com;
delay(8);
P1OUT|=(1<<5);//en=1;
delay(8);
P1OUT&=~(1<<5);//en=0;
}

void write_data(char dt)
{
P1OUT|=(1<<3);//rs=1;
P1OUT&=~(1<<6);//rw=0;
P1OUT&=~(1<<5);//en=0;
delay(8);
P2OUT=dt;
delay(8);
P1OUT|=(1<<5);//en=1;
delay(8);
P1OUT&=~(1<<5);//en=0;
}

void initial_lcd(void)
{
delay(20);
write_com(0x38); // @@@数据总线为8位 显示2行 5*10点阵每位
delay(15);
write_com(0x0c); //@@@@@显示功能打开 无光标 光标闪烁
delay(15);
write_com(0x06); //@@@@写入数据后光标右移
delay(15);
write_com(0x01); //@@@@@清屏
}

void LCD_Disp(char x,char y,char *character)
{
char xtemp;
switch(x)
{
case 0:xtemp=0x80+y;break;
case 1:xtemp=0xc0+y;break;
default:break;
}
write_com(xtemp);
while(*character!=0)
{
write_data(*character);
character++;
}
}

void main(void)
{

char *pa;
pa=a;

WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P2SEL=0x00;//设置P2口为通用I/O口
//P1SEL=0xff;//0001 0000
P2DIR |= 0xff; // Set P1.0 to output direction
P1DIR |= 0x68;//0110 1000 p1.3 1.5 1.6 作为LCD使能复位控制输入 P1.4作为模拟基准电压输入
initial_lcd();//LCD初始化
ADC10CTL0 = SREF_0 + ADC10SHT_2 + ADC10ON + ADC10IE; //不知道SREF2默认的是不是0,不写表示VR_ =AVSS=0?
//使用外部电压源作为参考电压 P1.4作为外部基准电压输入 因为P1.4现在作为输出控制LCD1602 所以还需要修改
__enable_interrupt(); // Enable interrupts.
TACCR0 = 30; // Delay to allow Ref to settle
TACCTL0 |= CCIE; // Compare-mode interrupt.
TACTL = TASSEL_2 | MC_1; // TACLK = SMCLK, Up mode.
LPM0; // Wait for delay.
TACCTL0 &= ~CCIE; // Disable timer Interrupt
__disable_interrupt();

ADC10CTL1 = INCH_1; // input A1
ADC10AE0 |= 0x02; // PA.1 ADC option select

for (;;)
{
ADC10CTL0 |= ENC + ADC10SC;
// Sampling and conversion start采样和转换开始
__bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit
da = ADC10MEM;

data = ((double)da/1023)*4.0; //这里选择的外部参考电压是4.0V 如果改变需要修改到相应的值

c =data;
a[0]=((int)c%10+0x30);
a[1]=0x2e;
a[2]=((int)(c*10)%10+0x30);
a[3]=((int)(c*100)%10+0x30);
a[4]=((int)(c*1000)%10+0x30);
a[5]='\0';
for(j = 0;j <= 5000;j++) //同一个转换数据显示一段时间,达到稳定显示的作用
LCD_Disp( 0, 5 ,pa);
delay(5);
LCD_Disp( 0, 0,"Vol=");
LCD_Disp( 1, 0,"Fuck you!!!");
}
}
// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
__bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)
}

#prag
ma vector=TIMER0_A0_VECTOR
__interrupt void ta0_isr(void)
{
TACTL = 0;
LPM0_EXIT; // Exit LPM0 on return
}

…… 此处隐藏:661字,全部文档内容请下载后查看。喜欢就下载吧 ……
单片机430 AD转换.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1545694.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)