关于MSP430G2553led频测温度的问题

2019-03-24 09:42发布

关于引脚 我Vss和K接单片机上的GND,VDD和A接单片机的VCC,1602的RS接P2.0,RW接P2.1,E接P2.27~14的8个引脚接MSP430的P1.0~P1.7。但是V0不知道怎么接。我输了一下程序led没数据显示,求教,麻烦各位了。#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);    //修改指针的位置}/**************************************************** 函数名称: display_xy** 入口参数:x(unsigned  char型),y(unsigned  char型)** 出口参数:无** 功能描述: 设置光标位置, x是行号,y是列号****************************************************/void display_xy(unsigned char x,unsigned char y){        if(y==0x01)        {                x=x+0x40+x+0x80;        }        else        {                x=x+0x80;//数据指针设置80H+地址码        }        write_com(x);}/*********************************************************************** 函数名称: display_string** 入口参数:x(unsigned  char型),y(unsigned  char型),s(指针型)** 出口参数:无** 功能描述: 在具体位置显示字符串,以/0结束,x是列号,y是行号**********************************************************************/void  display_string(unsigned  char x,unsigned  char y,unsigned  char *s){  display_xy(x,y);  while(*s)  {   WriteDataLcd(*s);   s++;  }}/***************************************函数名称:Disp1Char功    能:在某个位置显示一个字符参    数:X-----位置的列坐标          Y-----位置的行坐标          data--显示的字符数据返回值  :无***************************************/void Disp1Char(uchar x,uchar y,uchar data){        display_xy(x,y);        write_data(data);//输出数据}/***********************************在1602LCD上显示****************                            ***********浮点数*********************/void Disp_float(float f_data){        unsigned char lcd_table[3];        int aa;        aa=f_data;        lcd_table[0]= aa/1000 ;        lcd_table[1]=aa%100/10;        lcd_table[2]=aa%10;        Disp1Char(5,0,(lcd_table[0]+0x30));//显示整数部分十位数        Disp1Char(6,0,(lcd_table[1]+0x30));//显示小数部分的个位        Disp1Char(7,0,(0x2e));//显示小数点        Disp1Char(8,0,(lcd_table[2]+0x30));//显示小数部分十分位        //加上0x30以便得到直接的ASCLL码显示}void main(){        WDTCTL = WDTPW | WDTHOLD;        P2DIR=0XFF;        P1DIR=0XFF;        P1OUT=0;        RW_CLR;//写数据指令        init();        ADC10CTL1|=CONSEQ_2;//单通道多次转换模式        ADC10CTL0 |= SREF_1+REFON;//选择内部参考源1.5V,打开基准源        ADC10CTL0 |= ADC10SHT_3+MSC; //过采样率设置为64个采样周期,打开AD转换        ADC10CTL1|= ADC10SSEL_3+SHS_0; //ACLK2分频为采样时钟,用ADC10SC触发采集        ADC10CTL1 |=INCH_1; //选择通道A1        ADC10CTL0 |= ADC10ON; //开启ADC10        while (1)        {                delay(1000);                ADC10CTL0 |=ENC+ADC10SC; //开始转换                while((ADC10CTL0 &ADC10IFG)==0); //等待ADC10IFG标志变高(转换完成)                ADC_CHO=ADC10MEM; //读取采样结果                data= (ADC_CHO-746)/(0.000355*678)+286;                c=data;                if(c>150)                {                        P2DIR|=BIT3;                        P2OUT=0X00;                        delay(2000);                }                Disp_float(c);//显示结果                delay(2000);        }}#pragma vector=ADC10_VECTOR__interrupt void ADC10_ISR (void){   __bic_SR_register_on_exit(CPUOFF);        // Clear CPUOFF bit from 0(SR)}#pragma vector=TIMER0_A0_VECTOR__interrupt void ta0_isr(void){   TACTL = 0;   LPM0_EXIT;                                // Exit LPM0 on return}
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
huaiqiao
2019-03-25 02:41
看了楼主的帖子,我觉得让人很费力。建议以后写帖子的时候说清楚,例如“关于引脚 我Vss和K接单片机上的GND”这样的话,是否该描述成“单片机Vss引脚 与 LCD 的K管脚相连”??这样岂不是更好?

关于您提到的V0的接法,这个V0您仔细看资料就知道,就是液晶显示器对比度调整端,接法如这个图这种接法,是通过可调电阻来调节对比度的。 1.png

另提醒一点:请勿重复发帖。

一周热门 更多>

相关问题

    相关文章