ADC0809转换错误

2019-07-16 16:01发布

本帖最后由 一个豆包 于 2016-7-22 16:29 编辑

用51单片机  想在AD0809转换后用LCD1602显示出来  AD输出接P3口 ST与ALE接p1.2 OE接p1.0 EOC接p1.1 CLK接p1.3  ADDA B C分别接1.4 1.5 1.6 用IN3口输入电压   LCD接P0口  还没有接电压显示屏上就一直跳数   这是什么原因 程序应该怎么改啊   LCD程序是对的  主函数里注释了AD()输出正常    大神们救我啊
#include<reg51.h>        
#include"lcd.h"
#include<math.h>
unsigned char table1[]=" The voltage is: ";
unsigned char getdata;
sbit OE  = P1^0;                                
sbit EOC = P1^1;                           
sbit ST  = P1^2;                                
sbit CLK = P1^3;

unsigned int temp;

void timeInit()
{
    TMOD = 0x02;
         TH0  =  216;
        TL0  =  216;
         IE   = 0x82;
         TR0  = 1;
         P1   = 0x3f;
}


void AD(void)
{
    ST = 0;
        ST = 1;
        ST = 0;
        OE = 0;
        Lcd1602_Delay1ms(1);
        while(EOC==0);
        OE = 1;
        getdata = P3;                                                
        OE = 0;
}

void main()
{        
        unsigned char k,bai,shi,ge;
        unsigned int i;
           LcdInit();
        TimeInit();
        while(1)
        {
           AD();
           LcdWriteCom(0x80);
           for(i=0;i<16;i++)
           {
               LcdWriteData(table1);
           }
           temp = getdata*1.0/255*500;
           bai=temp/100;
           shi=temp%100/10;
           ge=temp%10;
           LcdWriteCom(0x80+0x40+6);
           LcdWriteData(bai+0x30);
           LcdWriteData(0x2e);
           LcdWriteData(shi+0x30);
           LcdWriteData(ge+0x30);
           LcdWriteData('V');
           Lcd1602_Delay1ms(50);
        }
}

void Timer0_INT() interrupt 1
{
         CLK = !CLK;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。