打印

求助C51里如何实现P1口输入?置1了还没行哦。

[复制链接]
1877|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lsfxyz|  楼主 | 2012-2-1 20:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
C51, AI, LED, AD, ge
我在做AD实验时,用C语言的程序里,把P1置1了,发现还是不能当做输入,具体该怎么做呢?下面是我写的程序:
硬件:AD输出接到P1,同时也接到8个LED。led可以显示不同的灯亮。我想把这些值从P1输入,然后从P0输出,从P0口输出后面的也解决了。只是P1=1后,还是没有 能 把AD的值从P1输入(这就是问题)。请问程序里有什么问题?
该怎么修改?不胜感激!
   
#include<reg52.h>
sbit wr=P3^6;
sbit rd=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
#define uchar unsigned char
#define uint unsigned int
uchar disnum,count,bai,shi,ge;
uint m,n;
display(uchar,uchar,uchar);
delay(uchar);
uchar code tabledu[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void init();
void start();
void main()
{
P1=0xFF; //P1 gao?
delay(500);
while(1)
  {
   init();
   start();
   delay(2);
   rd=0;
   delay(2);
   rd=1;  
      delay(2);
//P0=P1;
  disnum=P1;//?????P1??
   bai=disnum/100;
   shi=disnum%100/10;
   ge=disnum%100%10;
   display(bai,shi,ge);
  }
}
void init()//
{
P0=0x7f;
dula=0;//
wela=0;
}
void start()
{
wr=1;
wr=0;
wr=1;
}
delay(uchar x)
{
for(m=10;m>0;m--)
  for(n=x;n>0;n--);
}
display(uchar bai,uchar shi,uchar ge)
{
  P0=0x7f;//0111 1111,make ADC's CS low.
  wela=1;
  wela=0;
P0=tabledu[bai];
dula=1;
dula=0;
P0=0x7e;//0111 1111,make ADC's CS low.
wela=1;
wela=0;
delay(1);
  P0=0x7f;
  wela=1;
  wela=0;//
P0=tabledu[shi];//
dula=1;
dula=0;
P0=0x7d;
wela=1;
wela=0;
delay(1);//lesson4_5

  P0=0x7f;
  wela=1;
  wela=0;//
P0=tabledu[ge];//
dula=1;
dula=0;
P0=0x7b;
wela=1;
wela=0;
//delay(1);
}

相关帖子

沙发
中国机器| | 2012-2-1 22:22 | 只看该作者
高手们一定怕怕,呵呵。
楼主的程序应该与硬件电路相对应,才有用。
楼主的程序貌似复制粘贴的结果。
下一层高手请发言,呵呵

使用特权

评论回复
板凳
lsfxyz|  楼主 | 2012-2-4 13:37 | 只看该作者
谢谢这位朋友的提醒,我知道有硬件和软件,才能一起搞清楚问题。发图片可能比较麻烦,很大一张图,但是我说主要的硬件是:

AD的输出是接到P1,同时也接到8个LED。AD的输出可以正常驱动那8个LED了,就是没有输入进去P1。
请问怎么实现P1输入?我把P1=1了还不行哦。

使用特权

评论回复
地板
forgot| | 2012-2-4 14:41 | 只看该作者


先给你个AD硬件图,你对比下看看,还要看下AD芯片手册

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

2

帖子

0

粉丝