2926|0

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

有关ADC0832的问题 [复制链接]

这是我写的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[]={0XEC,0XD8,0XC4,0XB0,0X9C,0X92,0X90,0X8E,0X8C,0XFC,0XFA,0XF8,0XF6,0XEC,0XD8,
0XC4,0XB0,0X9C};//显示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);                       
}
此帖出自51单片机论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表