AD和LED 郭天祥板子遇到的问题
时间:10-02
整理:3721RD
点击:
这是原理图
由于AD的输出和LED都接的是P1口
所以在做AD实验时候LED不接锁存器的话会随机的亮
下面是AD的代码
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^1;
sbit dula=P2^6;
sbit wela=P2^7;
sbit adwr=P3^6;
sbit adrd=P3^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
void delay(uint x)
{
uint y,z;
for(y=x;y>0;y--)
for(z=110;z>0;z--);
}
void display(uchar bai,uchar shi,uchar ge)
{
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0x7e;
wela=0;
delay(5);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0x7d;
wela=0;
delay(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0x7b;
wela=0;
delay(5);
}
void main()
{
uchar a,a1,a2,a3,adval;
wela=1 ;
P0=0;
wela=0;
while(1)
{
adwr=1;
_nop_();
adwr=0 ; //启动AD转换
_nop_();
adwr=1;
P1=0xff;
adrd=1;
_nop_();
adrd=0; //AD读数据
_nop_();
adval=P1;
adrd=1;
led1=0;
a1=adval/100;
a2=adval%100/10;
a3=adval%10;
display(a1,a2,a3);
}
}
现在虽然知道LED处锁存器的作用
板子默认的是高电平
为什么我我改变阻值时候LED并没有亮?
虽然在主函数里面已经给P1=0xff;让等全灭
但是没有关闭LED锁存器啊
当下一步读取AD输出的时候 肯定会有0出现的啊
为什么灯不亮啊?
求解
由于AD的输出和LED都接的是P1口
所以在做AD实验时候LED不接锁存器的话会随机的亮
下面是AD的代码
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^1;
sbit dula=P2^6;
sbit wela=P2^7;
sbit adwr=P3^6;
sbit adrd=P3^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
void delay(uint x)
{
uint y,z;
for(y=x;y>0;y--)
for(z=110;z>0;z--);
}
void display(uchar bai,uchar shi,uchar ge)
{
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0x7e;
wela=0;
delay(5);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0x7d;
wela=0;
delay(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0x7b;
wela=0;
delay(5);
}
void main()
{
uchar a,a1,a2,a3,adval;
wela=1 ;
P0=0;
wela=0;
while(1)
{
adwr=1;
_nop_();
adwr=0 ; //启动AD转换
_nop_();
adwr=1;
P1=0xff;
adrd=1;
_nop_();
adrd=0; //AD读数据
_nop_();
adval=P1;
adrd=1;
led1=0;
a1=adval/100;
a2=adval%100/10;
a3=adval%10;
display(a1,a2,a3);
}
}
现在虽然知道LED处锁存器的作用
板子默认的是高电平
为什么我我改变阻值时候LED并没有亮?
虽然在主函数里面已经给P1=0xff;让等全灭
但是没有关闭LED锁存器啊
当下一步读取AD输出的时候 肯定会有0出现的啊
为什么灯不亮啊?
求解
最后我认为应该是板子的设计缺陷
LED的锁存器没起到作用
你得再看一下74HC573的真值 表。当E端为低电平时,L端由高电平变为低电平时锁存。你做AD时不操作锁存器,当然看不到LED闪烁了。
如果想看到LED闪,把74HC573换成74HC245就行了,闪的你心慌。呵呵.
郭天祥的板子上貌似有3块74HC573,连到P25上的那个应该是LED驱动。你这段程序从头到尾都没操作过P25啊。老大。
不是我没操作
这个程序是郭天祥的
他没有操作P25口
现在知道啦
路过 进来看看
有道理啊
!
A/D让我困惑......
学习.
哦哦哦