程序如下:
#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 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
a=P1,直接是读取了P1的值,
那句其实是a*(5/255)*100,因为要放大100倍分离出百位十位个位,
可是电位器从0到50%,数码管显示正常,是0到2.5V,但是电位器50%到100%,
模拟电压是正常的2.5到5V,但是数码管却又是从0到2.5,奇怪。
一周热门 更多>