求程序,或者帮我看看下面程序哪里出错了,各种求啊大神们快显灵吧
#include<reg52.h>
#include<intrins.h>
#define Num 4
sbit SDA=P2^0;
sbit SCL=P2^1;
sbit dula=P2^6;
sbit wela=P2^7;
sbit EN=P3^4;
sbit RS=P3^5;
sbit RW=P3^6;
sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚
uchar data Buffer[Num];
uchar LCD_LINE[]={" . v"} ;
uchar data Tempdata[3]={0x00,0x00,0x00};
bit ADflag;
bit bdata I2C_Error;
/*-------------------------
延时程序
-------------------------*/
void delay(uint z)
{
uint x,y;
for(x = z;x>0;x--)
for(y = 110;y>0;y--);
}
void delay4us()
{
_nop_();
_nop_();
_nop_();
_nop_();
}
/*-------------------------
I2C程序
---------------------------
启动子程序
-------------------------*/
void I2C_Start()
{
SDA=1;
SCL=1;
delay4us();
SDA=0;
delay4us();
SCL=0;
}
/*-----------------------
停止子程序
-----------------------*/
void I2C_Stop()
{
SDA=0;
SCL=1;
delay4us();
SDA=1;
delay4us();
SCL=0;
}
/*-----------------------
应答子程序
------------------------*/
void Slave_Ack()
{
SDA=0;
SCL=1;
delay4us();
SCL=0;
}
/*---------------------
非应答子函数
----------------------*/
void Slave_NOAck()
{
SDA=1;
SCL=1;
delay4us();
SCL=0;
}
/*---------------------
I2C发送一个字节
---------------------*/
void Send(uchar dat)
{
uchar idata i=8;
while(i--)
{
SDA=(bit)(dat&0x80);
SCL=1;
delay4us();
SCL=0;
dat<<=1;
}
delay4us();
SDA=1;
SCL=1;
delay4us();
if(SDA==1)
I2C_Error=1;
else
{
I2C_Error=0;
SCL=0;
}
}
/*--------------------
I2C接收一个字节
--------------------*/
uchar Recelive()
{
uchar i=8,dat;
while(i--)
{
SDA=1;
SCL=1;
dat<<=1;
dat|=SDA;
delay4us();
SCL=0;
}
return dat;
delay4us();
}
/*-------------------
PGF8591进行AD转换
-------------------*/
void ADC_Read(uchar chl)
{
uchar i,temp;
I2C_Start();
Send(0x90);
if(I2C_Error==1)
return;
Send(0x40|chl);
if(I2C_Error==1)
return;
I2C_Start();
Send(0x91);
if(I2C_Error==1)
return;
Recelive();
Slave_Ack();
{
temp=Recelive();
Buffer[i++]=temp;
Slave_Ack();
}
Slave_NOAck();
I2C_Stop();
}
//-----转码-------------
void ADC_Convert(uchar buffer)
{
uchar Tmp;
Tempdata[2]=buffer/51+'0';
Tmp=buffer%51*10;
Tempdata[1]=Tmp/51+'0';
Tmp=Tmp%51*10;
Tempdata[0]=Tmp/51+'0';
LCD_LINE[0]=Tempdata[2];
LCD_LINE[2]=Tempdata[1];
LCD_LINE[3]=Tempdata[0];
}
//-------LCD-------------
//-------busy------------
bit LCD_Busy()
{
bit Result;
RS=0;
RW=1;
EN=1;
delay4us();
Result=BF;
EN=0;
return Result;
}
//------写指令-----------
void Write_Com(uchar dat)
{
while(LCD_Busy());
RS=0;
_nop_();
RW=0;
_nop_();
EN=0;
_nop_();
P0=dat;
delay4us();
EN=1;
delay4us();
EN=0;
}
//------写数据-----------
void Write_Data(uchar dat)
{
while(LCD_Busy());
RS=1;
_nop_();
RW=0;
_nop_();
EN=0;
_nop_();
P0=dat;
delay4us();
EN=1;
delay4us();
EN=0;
}
//------光标指示地址-------
void LCD_pos(uchar dat)
{
Write_Com(0x80|dat);
}
//------整行显示----------
void Display(uchar pos,uchar s[])
{
uchar i;
LCD_pos(pos);
for(i=0;i<16;i++)
Write_Data(s);
}
//------LCD初始化---------
void LCD_Init()
{
dula=1;
P0=0XFF;
dula=0;
wela=1;
P0=0XFF;
wela=0;
Write_Com(0x38);
delay(5);
Write_Com(0x38);
delay(5);
Write_Com(0x0c);
delay(5);
Write_Com(0x06);
delay(5);
Write_Com(0x01);
delay(5);
}
//------主程序----------
void main()
{
LCD_Init();
delay(5);
while(1);
{
ADC_Read(0);
ADC_Convert(Buffer[0]);
Display(0x00,LCD_LINE);
// DAC_PGF8591(0X40,Buffer[0]);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>