注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
wylloong的个人空间 https://home.eeworld.com.cn/space-uid-488614.html [收藏] [复制] [分享] [RSS]
日志

MSP430G2553 AD转换中1602输出温度

已有 1926 次阅读2013-7-14 11:05 |个人分类:msp430g2|

/*1602RSP2.0RWP2.1EP2.2

7~148个引脚接MSP430P1.0~P1.7,其余按照1602引脚要求连接即可。*/

#include<msp430g2553.h>

#define uchar unsigned char

#define uint unsigned int

#define P20 0

#define P21 1

#define P22 2

#define RS_CLR P2OUT &= ~(1 << P20)        //RS置低

#define RS_SET P2OUT |= (1 << P20)         //RS置高

#define RW_CLR P2OUT &= ~(1 << P21)        //RW置低

#define RW_SET P2OUT |= (1 << P21)         //RW置高

#define EN_CLR P2OUT &= ~(1 << P22)        //E置低

#define EN_SET P2OUT |= (1 << P22)         //E置高

uchar num;

int ADC_CHO;

int c;

int data;

unsigned  char x;

unsigned  char y;

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void write_com(uchar com)   //输入数据

{

RS_CLR;     //RS置低 输入指令

P1OUT=com;

delay(5);

EN_SET;   

delay(5);

EN_CLR;    //E置低  1->0 执行指令

}

void write_data(uchar data)  //输出数据

{

RS_SET;      //RS置高  RS=1输出数据

P1OUT=data;   

delay(5);

EN_SET;

delay(5);

EN_CLR;     //E置低  1->0 执行指令

}

void init()   //1602初始化,请参考1602的资料

{

EN_CLR;

write_com(0x38);     //设置16*2显示,5*7点阵,8位数据接口

write_com(0x0e);     //光标不显示

write_com(0x06);     //写入新数据后光标右移,显示频不移动

write_com(0x01);    //0000000001 清屏

write_com(0x80);    //修改指针的位置

}

void  display_xy(unsigned  char x,unsigned  char y)

    if(y==0x01)

{

     x = x + 0x40 + 0x80;      }

else

{

    x = x+0x80;   //数据指针设置 80H+地址码 (0-27H40H-67H

}

  write_com(x);

}

void Disp1Char(uchar x,uchar y,uchar data)

{

  display_xy(x,y);

  write_data(data);   ////输出数据

}

void Disp_float(float f_data)        

{           

            unsigned char lcd_table[3];

            int aa;

            aa=f_data;                   

            lcd_table[0]= aa/100;            

            lcd_table[1]= aa%100/10;

            lcd_table[2]=aa%10;

                 Disp1Char(5,0,(lcd_table[0]+0x30)); //显示整数部分的十位数  0x30的原因CGROMCGRAM与字符的对应关系

                 Disp1Char(6,0,(lcd_table[1]+0x30));//显示小数部分的个位

                 Disp1Char(7,0,(0x2e)); //显示小数点"."  小数点对应00101110

                 Disp1Char(8,0,(lcd_table[2]+0x30)); //显示小数部分的十分位     

                                    //加上0x30以便直接得到相应的ASCII码去显示

}

void main()

{       

        WDTCTL = WDTPW + WDTHOLD;

        P2DIR = 0XFF;  

P1DIR = 0XFF; //输出all

P1OUT = 0;     

RW_CLR;   //写数据指令

init();

        ADC10CTL1 |= CONSEQ_2;  //单通道多次转换模式

        ADC10CTL0 |= SREF_1+REFON;//REFON=1选择内部参考源1.5VR+=VREF+and VR-=VSS,打开基准源

        ADC10CTL0 |= ADC10SHT_3+MSC;//过采样率设置为64个采样周期,打开AD转换,MSC多次采样

        ADC10CTL1 |= ADC10SSEL_3+SHS_0;//ACLK2分频为采样时钟,用ADC10SC触发采集

        ADC10CTL1 |= INCH_10;//选择通道10

        ADC10CTL0 |= ADC10ON;//ADC10内核打开

        while(1)

        {

        delay(1000);                     

        ADC10CTL0 |= ENC + ADC10SC; // 开始转换 ENC为转换使能位,ADC10SC转换控制位          

        while((ADC10CTL0 & ADC10IFG)==0);//等待ADC10IFG标志位变高(转换完成)

        ADC_CHO= ADC10MEM;//读取采样结果

        data =(ADC_CHO-746)/(0.000335*678)+286;//计算温度值

c=data;

        if(c>150)

        {P2DIR |= BIT3;

        P2OUT=0x00;

        delay(2000); }

        Disp_float(c);  //显示结果    

         delay(2000);

        }

}

显示温度

全部作者的其他最新日志
发表评论 评论 (4 个评论)
回复 hanjiadashao 2013-7-15 21:40
大神,,能不能把连接示意图画出来,你的实物连接图我看不太清,求大神指教
回复 hanjiadashao 2013-7-15 21:44
邮箱898388573@qq.com,谢了。。
回复 zhaoying818 2013-7-16 16:43
求详细解释
回复 gcxzhz 2013-7-17 23:48
可以加一些如 temperature is XXX C(OR F )

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章