prince2011 发表于 2011-9-26 21:21:08

51单片机驱动ADC0832及数码管显示

/*********************************包含头文件********************************/

#include <reg51.h>

/*********************************端口定义**********************************/

sbit CS= P3^4;
sbit Clk = P1^0;
sbit DIO = P1^1;

/*******************************定义全局变量********************************/

unsigned char adval;

/*******************************共阳LED段码表*******************************/

unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

/*******************************延时子函数*******************************/

void delay(void)

{
    int i;
    for(i=0;i<100;i++);
}

/*******************************ADC0832转换函数*******************************/

void adc0832()

{
        unsigned char i;

        adval=0;                                  

        CS = 0;                                           //使能adc0832

        DIO = 1;                                       
        Clk = 0;                                    //产生第一个上升沿,启动adc0832
        Clk = 1;
                                       
        DIO = 1;                               
    Clk = 0;                                        //产生第二个上升沿,用于选择单通道输入方式
    Clk = 1;


    DIO = 0;                                        //产生第三个上升沿,用于选择0通道输入
        Clk = 0;
    Clk = 1;


        Clk = 0;

    DIO = 1;                                        //作为输入,先置1

    for( i = 0;i < 8;i++ )
    {
               Clk = 1;
               Clk = 0;

              if (DIO)
                        adval=adval|(0x80>>i);
    }

        CS = 1;
}

/*******************************数码管显示函数*******************************/

void display(int k)

{
        P2=0x00;
       
    P0=tab;
    P2=0x08;   
        delay();
    P2=0x00;
   
    P0=tab;
    P2=0x04;       
        delay();
    P2=0x00;

    P0=tab;
        P2=0x02;       
        delay();
    P2=0x00;

    P0=tab;
        P2=0x01;       
        delay();
    P2=0x00;
}

/*******************************主函数函数*******************************/

void main(void)

{

        while(1)                     
        {
                adc0832();
                display(adval);
        }

}

prince2011 发表于 2011-9-26 21:22:52

点击此处下载 ourdev_679892O7BA6J.zip(文件大小:43K) (原文件名:ADC0832.zip)

prince2011 发表于 2011-9-26 21:36:51

自己写的程序,没有加延时。

请大家多多指教啊

prince2011 发表于 2011-9-27 07:27:34

http://cache.amobbs.com/bbs_upload782111/files_46/ourdev_679937JN9X75.gif
(原文件名:clip_image001.gif)

jamasliu 发表于 2013-5-6 21:01:52

一直没有人ding,其实我想知道为什么只会显示255,而且也没有小数点,如果我想测试大于5V的电压,应该怎么修改程序。{:handshake:}{:handshake:}{:handshake:}{:handshake:}{:handshake:}

小桀 发表于 2014-6-10 09:40:37

非常感谢,正需要{:handshake:}
页: [1]
查看完整版本: 51单片机驱动ADC0832及数码管显示