打印

用LCD1602来显示AD转换的值

[复制链接]
2268|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
woaiguye|  楼主 | 2007-11-29 11:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在做一个AD转换和显示,AD转换能采集到数据,液晶显示也能显示出来,现在的问题是液晶显示无法显示出AD的值.具体程序如下:
#include   <reg51.h>  
#include   <intrins.h>   
sbit rs=P1^4; //指令和数据寄存器//
sbit rw=P1^5; //读写控制//
sbit e=P1^6; //片选//        
sbit SCLK = P1^0;                    // 输入输出时钟I/O CLK
sbit SDOUT = P1^1;                    // 数据输出DATA OUT
sbit CS = P1^2;                        // 片选信号
sbit flag=P0^7;
unsigned char str[]="the AD result is:";
//...........液晶现实开始..........
void wait(unsigned int w)

int time;
for (time=0;time <w;time++);
return;
}

void busy()
{   
   while(1)
   {
     P0=0xff;
     rs=0;
     rw=1;
     e=1;
     if(!flag) break;
   }
}

void w_dat(unsigned char dat) //写数据//
{
busy(  );
rs=1;
rw=0;
e=1;
P0=dat;
e=0;
return;
}

void w_com(unsigned char com) //写指令//
{
busy( );

rs=0;
rw=0;
e=1;
P0=com;
e=0;
}

void LCD_set_xy(unsigned char x,unsigned char y)
{
    unsigned char address;
    if(x == 1)
        address =0X80 + y;
    else             
        address = 0XC0 + y;
    w_com(address);     
}

void LCD_write_string(unsigned char x,unsigned char y,unsigned char *s)
{
    LCD_set_xy(x,y); 
    while(*s)  
    {
        P0 = *s;
        w_dat(*s);   
        s++;
    }
}

void init(void) 
{
unsigned char i;
for (i=0;i<2;i++) 
{
  w_com(0x38);
  wait(10);
}
w_com(0x38);
w_com(0x0f);
w_com(0x18);
w_com(0x06);
w_com(0x01);
w_com(0x80);
}
//..........液晶现实模块结束........

//.........AD转换模块开始.........
unsigned int Conversion(void)// AD转换程序,返回AD值
{
  char i,n;
  unsigned int Bit16_data;
  CS=0;                          //低电平有效,开始转换
for(i=0;i<6;i++)               //延时

   _nop_();
   SCLK=0;
   _nop_();
   SCLK=1;
}

if(SDOUT==0)
{    
n=17;
while(n--)
    {  
       _nop_();
       SCLK = 1;                
      { Bit16_data = Bit16_data<<1;         // 左移一位,或_crol_(temp,1)
        if(SDOUT == 1)
        Bit16_data = Bit16_data|0x0001;       // 若接收到的位为1,则数据的最后一位置1
       else 
        Bit16_data = Bit16_data&0xFFFE;       // 否则数据的最后一位置0
      }
      SCLK=0; 
    }
CS=1;
return(Bit16_data);
}
}
//.........AD转换模块结束..........
//........主函数开始...........
void main(void)
{
   unsigned ADresult;
init(); 
LCD_write_string(1,0,str);
ADresult=Conversion();
wait(5);    
while(1)    
    {
    
    //LCD_write_string(2,0, ADresult);
    }
}
在编译的时候最后一行出错,无法编译,哪位高手帮忙解决一下?AD芯片用的是ADS8320,转换结束后数据放在变量ADresult中,液晶显示第一行能够显示,要求第二行显示ADresult!小弟刚从学校出来,很多东西都搞不定!谢谢!





相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

6

帖子

0

粉丝