找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1298|回复: 0
打印 上一主题 下一主题
收起左侧

MSP430 ADC模数转换+LCD1602

[复制链接]
跳转到指定楼层
楼主
ID:582953 发表于 2020-8-22 20:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/************************
函数名称:adc12的应用
函数功能: 实现P6.0口的单通道单次转换,并利用lcd1602显示。
时间:2020.8.22
制作人:XXXX
***********************/
#include <msp430.h>
#include <lcd1602.h>
int main(void)
{
    int data,curvol;
    WDTCTL = WDTPW | WDTHOLD;   // stop watchdog timer
    write_command(0x01);//清零操作
    write_command(0x85);
    string("curvol:");//将从第1行第6列开始显示“curvol”
    while(1)
    {
        data=msp430adc12();
        curvol=data*0.61;//将转换数据转换成为电压值(计算方法:N*2.5*1000/2^12,相当于将原数据放大1000倍)
        write_command(0xC5);//将从第二行第三列开始显示
        write_data(curvol/1000+48);//显示数据的千位
        write_data(46);//显示小数点,因为前面数据扩大了1000倍,所以我们在这里将数据缩小1000倍
        write_data(curvol/100%10+48);//显示数据的百位
        write_data(curvol/10%10+48);//显示数据的十位
        write_data(curvol%10+48);//显示数据的个位
        delay(500);//延时500ms
    }
    return 0;
}
int msp430adc12(void)
{
    volatile unsigned int i;//定义i为挥发性变量,防止编译器清楚i的值
    unsigned int data_adc12;//定义data_adc12
    WDTCTL = WDTPW + WDTHOLD;   // stop watchdog timer
    P6SEL |= 0x01;//使能A0输入通道
    REFCTL0 &= ~REFMSTR;//复位REFMSTR控制位以控制ADC12参考电压控制寄存器
    ADC12CTL0 = ADC12ON+ADC12SHT02+ADC12REFON+ADC12REF2_5V;//打开ADC12,设置采样间隔为4个CLK,打开参考电压产生器,并设置参考电压为2.5V
    ADC12CTL1 = ADC12SHP;//采样保持触发信号选择采样定时器
    ADC12MCTL0 =ADC12SREF_1;//Vr+=Vref+,Vr-=AVss
    for(i=0;i<0x30;i++);//延时以使参考电压稳定
    ADC12CTL0 |= ADC12ENC;//使能转换
    while(1)
    {
        ADC12CTL0 |= ADC12SC;//开始转换
        while(!(ADC12IFG & BIT0));
        {
            __no_operation();//可在此处设置端点查看ADC12MEM0缓冲寄存器
            data_adc12=ADC12MEM0;//准备输出ADC12MEM0里面的值
            ADC12IFG=0;
            break;
        }
    }
    return data_adc12;//返回所测的值
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表