24小时热门版块排行榜    

查看: 1780  |  回复: 4
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

1993kimberly

新虫 (初入文坛)

[求助] 输入模拟0-5V,通过AD转换将数字信号给单片机,通过数码管显示出输入的模拟电压 已有2人参与

麻烦看一下程序哪里错了,感激不尽~~
感觉问题应该出在两个display上,重点看显示那里吧
#include <reg51.h>
#include <math.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int

uchar code light[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code table[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};        //带小数点数字编码
         
sbit OE=P2^7;
sbit EOC=P2^6;
sbit ST=P2^5;
sbit CLK=P2^4;
float v;
int x,y;

void delayms(uint xms)                                     //延迟函数
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}

void Timer0_INT() interrupt 1                          //T0定时器中断给ADC0808提供时钟信号
{
                CLK=!CLK;                                       //ADC0808时钟信号
}

void display1(uchar d)                         //显示函数 (0路  左)
{        v=5.00*d/256;
        x=floor(v);
        y=floor((v-x)*10);
        P2=0xfe;                                   //X1,1
        P0=table[x];
        delayms(1);
        P2=0xfd;                                                                    //Y1,2
        P0=light[y];
        delayms(1);
}
void display2(uchar d)                         //显示设定值        (1路   右)
{        v=5.00*d/256;
        x=floor(v);
        y= floor((v-x)*10);
        P2=0xfb;                                   //X2,3
        P0=table[x];
        delayms(1);
        P2=0xf7;                                   //Y2,4
        P0=light[y];
        delayms(1);
}

void main()                                  // 主程序
{
        TMOD=0x02;
        TH0=0x14;
        TL0=0x00;
        IE=0x82;
        TR0=1;
        while(1)
        {        P3=0x00;                                      //显示第0路
                ST=0;
                ST=1;
                ST=0;                                        //启动转换
                while(EOC==0);                              
                OE=1;                                        //允许输出
                display1(P1);                                //显示A/D转换结果
                OE=0;                                        //关闭输出

                P3=0x01;                                        //显示第1路
                ST=0;
                ST=1;
                ST=0;                                           //启动转换
                while(EOC==0);                                 
                OE=1;                                           //允许输出
                display2(P1);                                   //显示A/D转换结果
                OE=0;                                           //关闭输出
}
}
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

1993kimberly

新虫 (初入文坛)

2楼2014-06-26 20:45:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 1993kimberly 的主题更新
信息提示
请填处理意见