为何只显示2.55V的电压??以上的电压就会从0开始

2019-07-15 17:55发布

程序如下:


#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code D[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code W[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar temp[8];
uchar a,i;
sbit d=P2^6;
sbit w=P2^7;
sbit rd=P2^4;
sbit wr=P2^3;
sbit cs=P2^5;
sbit inte=P2^2;
void display(uchar fb,uchar num);
void init();
void ADinit();
void ADstart();
void delay(uint z);
void main (void)
{
        init();        
        cs=0;
        while(1)
        {
                ADinit();
                ADstart();
               
                temp[0]=D[a*500/255/100];
                temp[1]=D[(a*500/255%100)/10];
                temp[2]=D[a*500/255%10];               
        }
}
void ADinit()
{
        wr=1;
        wr=0;
        _nop_();
        wr=1;
        while(inte);        
}
void ADstart()
{
        P1=0xff;
        rd=1;
        rd=0;
        delay(1);
        a=P1;
        rd=1;        
}
void display(uchar fb,uchar num)
{
        static uchar i;
        P0=0;
        d=1;
        d=0;


        P0=W[i+fb];
        w=1;
        w=0;


        P0=temp;
        d=1;
        d=0;


        i++;
        if(i==num)
                i=0;
}
void init()
{
        TMOD|=0x01;
        TH0=(65536-2000)/256;
        TL0=(65536-2000)%256;
        EA=1;
        ET0=1;
        TR0=1;
}
void time0() interrupt 1
{
        TH0=(65536-2000)/256;
        TL0=(65536-2000)%256;
        
        display(0,3);        
}
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=123;y>0;y--);
}



附件是硬件图。


不明白为什么
电位器从0到50%,数码管显示正常,是0到2.5V,但是电位器50%到100%,
模拟电压是正常的2.5到5V,但是数码管却又是从0到2.5,奇怪。
testmulti.pdf 下载积分: 积分 -1 分
926.42 KB, 下载次数: 12, 下载积分: 积分 -1 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
yygy3748
1楼-- · 2019-07-15 23:48
a到底是一个采样值还是一个电压值,没有看出来啊,不知程序中为什么要进行 a*500 的运算?能否解答一下?就这里看得不太懂
蛋疼的小天
2楼-- · 2019-07-16 04:36
yygy3748 发表于 2015-1-5 21:50
a到底是一个采样值还是一个电压值,没有看出来啊,不知程序中为什么要进行 a*500 的运算?能否解答一下?就 ...

a=P1,直接是读取了P1的值,
那句其实是a*(5/255)*100,因为要放大100倍分离出百位十位个位,

可是电位器从0到50%,数码管显示正常,是0到2.5V,但是电位器50%到100%,
模拟电压是正常的2.5到5V,但是数码管却又是从0到2.5,奇怪。
yygy3748
3楼-- · 2019-07-16 07:43
将a定义为 unsigned int 类型看一下
yygy3748
4楼-- · 2019-07-16 08:56
或者把 temp[0]=D[a*500/255/100];
yygy3748
5楼-- · 2019-07-16 10:13
 精彩回答 2  元偷偷看……

一周热门 更多>