打印

C51的关于ADC0832问题

[复制链接]
2099|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
窑吆2009|  楼主 | 2012-4-21 00:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是我写的ADC0832的采样和数码管显示程序  24M晶振 通过按键切换采样通道,调了很久都不行  真心求助高手
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit CS   = P1^3;
sbit Clk = P1^0;
sbit DATI = P1^1;
sbit DATO = P1^2;
sbit xsd=P0^7;
sbit s1=P2^2;
sbit we1=P2^7;
sbit we2=P2^6;
sbit we3=P2^5;
sbit we4=P2^4;
uchar tab[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};//显示0-9段码
uint i,ge,shi,bai,qian,getdata,number;
unsigned char dat;
void delayms(uint x);                //可控延时函数
void display0();
void AD();
void key();
void key()
{
        P2=0xff;
        if(s1==0)
                {
                        delayms(5);//延时判断5ms
                        if(s1==0)
                        {
                                number++;
                                if(number==3)
                                        number=0;
                                        while(!s1);// 松手检测
                        }
                }
}
main()
{
        number=0;        
        while(1)
        {
                AD();
                display0();
                key();
        }
                        
}

void delayms(uint x)
{
        uint i,j;
        for(i=x;i>0;i--)
                for(j=240;j>0;j--);
}
void AD()
{
        unsigned char i,test,adval;
        adval=0x00;
    test=0x00;
        Clk=0;       //初始化
    DATI=1;
        _nop_();
        _nop_();
    CS=0;
    _nop_();
        _nop_();
    Clk=1;
        _nop_();
        _nop_();
        if(number==1)//通道选择
        {
                Clk=0;
        DATI=1;//通道0的第一位
        _nop_();
                _nop_();        
                Clk=1;
                _nop_();
                _nop_();        
                Clk = 0;
        DATI = 0; //通道0的第二位
        _nop_();
                _nop_();        
        Clk = 1;
        _nop_();
               
     }
    else
    {
                Clk=0;
        DATI=1; //通道1的第一位
                _nop_();      
                _nop_();
        Clk=1;
                _nop_();
                _nop_();               
                Clk=0;
        DATI=1;  //通道1的第二位
                _nop_();      
                _nop_();
        Clk=1;
        _nop_();
               
    }
                Clk=0;
                DATI=1;
        for(i=0;i<8;i++ ) //从高位向低位读取8位AD值  
    {
        
                _nop_();
                adval<<=1;
        Clk=1;
                _nop_();      
                _nop_();
        Clk=0;
        if(DATO)
          adval|=0x01;
        else
          adval|=0x00;
    }
        for(i=0;i<8;i++) //从低位向高位读取8位AD值
                {
                        test>>=1;
            if(DATO)
                    test|=0x80;
            else
                test|=0x00;
                        _nop_();         
                        _nop_();
            Clk=1;
            _nop_();
                        _nop_();               
            Clk=0;
        }
                dat=test;
                _nop_();        
                _nop_();
        CS = 1;   //释放ADC0832
        DATO = 1;
        Clk = 1;
                getdata=dat;
}
void display0()
{
        
                qian=(getdata*49*5/25)/1000;//读得的数据乘以2再乘以98%,再乘以5倍的分压除以1000得千位
                bai=((getdata*49*5/25)%1000)/100;//数值对1000求余后的得剩下几位,对100整除后得百位
                shi=(((getdata*49*5/25)%1000)%100)/10;//分出十位
                ge=(((getdata*49*5/25)%1000)%100)%10;//分出个位
                P0=tab[qian];//送千位显示
            we1=0;//选择第一个数码管
                delayms(1);
                P0=tab[bai];//送百位显示
                xsd=0;
                we2=0;//选择第二个数码管
                delayms(1);
                P0=tab[shi];//送十位显示
                we3=0;//选择第三个数码管
                delayms(1);
                P0=tab[ge];//送各位显示
                we4=0;//选择第四个数码管
                delayms(1);                        
}

相关帖子

沙发
sedatefire| | 2012-6-27 14:15 | 只看该作者
帮顶吧,有空帮你看一下
调了很久不行,具体是哪里不行?

使用特权

评论回复
板凳
ccxlslr| | 2012-6-27 16:15 | 只看该作者
双是长程序-

使用特权

评论回复
地板
alwen| | 2012-10-11 09:19 | 只看该作者
是显示不行。还是不能读到数据

使用特权

评论回复
5
阿南| | 2012-10-11 09:22 | 只看该作者
对,还是要把如何不行给描述清楚,否则别人帮你吓着急。
先把思路理顺了,分步排查,分步交流解决。

使用特权

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

本版积分规则

0

主题

2

帖子

0

粉丝