adc0804转换读取,P1接ADC0804,P0接一个7段数码管,我要读取一个0-5V的电压,为什么数码管不显示呢? 20
这是我的程序,没有报错,但是数码管不显示,求高手改下/*头文件*/#include<reg52.h>#include<stdio.h>#include<intrins.h...
这是我的程序,没有报错,但是数码管不显示,求高手改下
/*头文件*/
#include <reg52.h>
#include <stdio.h>
#include <intrins.h>
/*宏定义*/
#define uchar unsigned char
#define uint unsigned int
sbit duan=P2^3;//段选
sbit shidian=P2^0;
sbit fang=P2^2;
sbit xu=P2^1;
sbit cs=P3^2;
sbit rd=P3^7;
sbit wr=P3^6;
unsigned char j,k,adval,a;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管编码
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void Init(){
//初始化函数
TMOD=0x01;//工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//总中断开
ET0=1;//定时器中断
TR0=1;//定时器启动
duan=0;//段关闭
P2=0x00;
P1=0x00;
}
void delay(unsigned char i) //延时程序
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display(uchar c) //显示程序
{
duan=1;
P0=table[c];
duan=0;
delay(100);
}
void main()
{
Init();//初始化
while(1)
{
if(shidian==0)
{
xu=0;
fang=1;
cs=0; //选通AD转换器片选
wr=0; //AD写入(主要是为了启动AD转换)
delay(100);
wr=1;
delay(100);
P1=0xff; //读取P1口之前先给其写全1
rd=0;
delay(100); //AD读使能
adval=P1; //AD数据读取赋给P1口
rd=1;
cs=1;
for(a=40;a>0;a--) //需要注意的是ADC0804在写和读之间的时间间隔要足够长否则无法读出数据
{ //这里把显示部分放这里的原因也是为了增加写读之间的时间间隔
display(adval);
} //显示各位。
}
else
{
xu=1;
fang=0;
cs=0; //选通AD转换器片选
wr=0; //AD写入(主要是为了启动AD转换)
delay(100);
wr=1;
delay(100);
P1=0xff; //读取P1口之前先给其写全1
rd=0;
delay(100); //AD读使能
adval=P1; //AD数据读取赋给P1口
rd=1;
cs=1;
for(a=40;a>0;a--) //需要注意的是ADC0804在写和读之间的时间间隔要足够长否则无法读出数据
{ //这里把显示部分放这里的原因也是为了增加写读之间的时间间隔
display(adval);
} //显示各位。
}
};
} 展开
/*头文件*/
#include <reg52.h>
#include <stdio.h>
#include <intrins.h>
/*宏定义*/
#define uchar unsigned char
#define uint unsigned int
sbit duan=P2^3;//段选
sbit shidian=P2^0;
sbit fang=P2^2;
sbit xu=P2^1;
sbit cs=P3^2;
sbit rd=P3^7;
sbit wr=P3^6;
unsigned char j,k,adval,a;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管编码
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void Init(){
//初始化函数
TMOD=0x01;//工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//总中断开
ET0=1;//定时器中断
TR0=1;//定时器启动
duan=0;//段关闭
P2=0x00;
P1=0x00;
}
void delay(unsigned char i) //延时程序
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display(uchar c) //显示程序
{
duan=1;
P0=table[c];
duan=0;
delay(100);
}
void main()
{
Init();//初始化
while(1)
{
if(shidian==0)
{
xu=0;
fang=1;
cs=0; //选通AD转换器片选
wr=0; //AD写入(主要是为了启动AD转换)
delay(100);
wr=1;
delay(100);
P1=0xff; //读取P1口之前先给其写全1
rd=0;
delay(100); //AD读使能
adval=P1; //AD数据读取赋给P1口
rd=1;
cs=1;
for(a=40;a>0;a--) //需要注意的是ADC0804在写和读之间的时间间隔要足够长否则无法读出数据
{ //这里把显示部分放这里的原因也是为了增加写读之间的时间间隔
display(adval);
} //显示各位。
}
else
{
xu=1;
fang=0;
cs=0; //选通AD转换器片选
wr=0; //AD写入(主要是为了启动AD转换)
delay(100);
wr=1;
delay(100);
P1=0xff; //读取P1口之前先给其写全1
rd=0;
delay(100); //AD读使能
adval=P1; //AD数据读取赋给P1口
rd=1;
cs=1;
for(a=40;a>0;a--) //需要注意的是ADC0804在写和读之间的时间间隔要足够长否则无法读出数据
{ //这里把显示部分放这里的原因也是为了增加写读之间的时间间隔
display(adval);
} //显示各位。
}
};
} 展开
2个回答
展开全部
此处用四位共阴数码管
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit wr=P3^6;
sbit rd=P3^7;
sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
sbit led3=P2^3;
sbit led3v=P3^2;
sbit cs=P3^5;
unsigned int temp,temp1,qian,bai,shi,ge;
unsigned char ledmap[20]={
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0xbf,0x86,0xdb,0xcf,0xe6,
0xed,0xfd,0x87,0xff,0xef};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void start()
{
wr=1;
_nop_();
wr=0;
delay(1);
wr=1;
}
void Load()
{
rd=1;
_nop_();
rd=0;
_nop_();
delay(10);
temp1=P1;
rd=1;
}
void display()
{
led0=0;
qian=temp*100/51/100%10+10;
P0=ledmap[qian];
delay(5);
led0=1;
led1=0;
bai=temp*100/51/10%10;
P0=ledmap[bai];
delay(5);
led1=1;
led2=0;
shi=temp*100/51%10;
P0=ledmap[shi];
delay(5);
led2=1;
led3=0;
ge=temp*1000/51%10;
P0=ledmap[ge];
delay(5);
led3=1;
// delay(10);
}
void main()
{
int i=0;
uint y;
cs=0;
temp=0;
while(1)
{
start();
Load();
temp+=temp1;
i++;
if(i==2)
{
temp/=2;
for(y=50;y>0;y--)
display();
i=0;
temp=0;
}
}
}
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit wr=P3^6;
sbit rd=P3^7;
sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
sbit led3=P2^3;
sbit led3v=P3^2;
sbit cs=P3^5;
unsigned int temp,temp1,qian,bai,shi,ge;
unsigned char ledmap[20]={
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0xbf,0x86,0xdb,0xcf,0xe6,
0xed,0xfd,0x87,0xff,0xef};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void start()
{
wr=1;
_nop_();
wr=0;
delay(1);
wr=1;
}
void Load()
{
rd=1;
_nop_();
rd=0;
_nop_();
delay(10);
temp1=P1;
rd=1;
}
void display()
{
led0=0;
qian=temp*100/51/100%10+10;
P0=ledmap[qian];
delay(5);
led0=1;
led1=0;
bai=temp*100/51/10%10;
P0=ledmap[bai];
delay(5);
led1=1;
led2=0;
shi=temp*100/51%10;
P0=ledmap[shi];
delay(5);
led2=1;
led3=0;
ge=temp*1000/51%10;
P0=ledmap[ge];
delay(5);
led3=1;
// delay(10);
}
void main()
{
int i=0;
uint y;
cs=0;
temp=0;
while(1)
{
start();
Load();
temp+=temp1;
i++;
if(i==2)
{
temp/=2;
for(y=50;y>0;y--)
display();
i=0;
temp=0;
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询