最近在做一个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!小弟刚从学校出来,很多东西都搞不定!谢谢!
|