原创 ADC0832程序

2010-3-14 19:57 3810 2 3 分类: MCU/ 嵌入式

#include <reg51.H>
#include "intrins.h"



#define uint unsigned int
#define uchar unsigned char


//ADC0832的引脚
sbit ADCS =P1^0;  //ADC0832 chip seclect
sbit ADDI =P1^2;  //ADC0832 k in
sbit ADDO =P1^2;  //ADC0832 k out
sbit ADCLK =P1^1;  //ADC0832 clock signal


unsigned char dispbitcode[8]={0xf7,0xfb,0xfd,/*0xfe,0xef,0xdf,0xbf,0x7f*/};  //位扫描
unsigned char dispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};  //共阳数码管字段码
unsigned char dispbuf[3];
uint temp;
uchar getdata; //获取ADC转换回来的值



void delayms(void)  //12mhz delay 1.01ms
{
   unsigned char x,y;  
   x="10";
   while(x--)
  {
       y="4";
       while(y--);
    }
}
void display(void)  //数码管显示函数
{
  char k;
 for(k=0;k<3;k++)
  {


  P0 = dispbitcode[k];
  P2 = dispcode[dispbuf[k]];
   delayms();
  if(k==2)   //加上数码管的dp小数点
   P2&=0x7f;
  delayms();
    P0=0xff;
  }
}


/************
读ADC0832函数
************/


//采集并返回
unsigned int Adc0832(unsigned char channel)     //AD转换,返回结果
{
    uchar i="0";
    uchar j;
    uint dat="0";
    uchar ndat="0";


    if(channel==0)channel=2;
    if(channel==1)channel=3;
    ADDI="1";
    _nop_();
    _nop_();
    ADCS="0";//拉低CS端
    _nop_();
    _nop_();
    ADCLK="1";//拉高CLK端
    _nop_();
    _nop_();
    ADCLK="0";//拉低CLK端,形成下降沿1
    _nop_();
    _nop_();
    ADCLK="1";//拉高CLK端
    ADDI="channel"&0x1;
    _nop_();
    _nop_();
    ADCLK="0";//拉低CLK端,形成下降沿2
    _nop_();
    _nop_();
    ADCLK="1";//拉高CLK端
    ADDI=(channel>>1)&0x1;
    _nop_();
    _nop_();
    ADCLK="0";//拉低CLK端,形成下降沿3
    ADDI="1";//控制命令结束
    _nop_();
    _nop_();
    dat="0";
    for(i=0;i<8;i++)
    {
        dat|=ADDO;//收数据
        ADCLK="1";
        _nop_();
        _nop_();
        ADCLK="0";//形成一次时钟脉冲
        _nop_();
        _nop_();
        dat<<=1;
        if(i==7)dat|=ADDO;
    } 
    for(i=0;i<8;i++)
    {
        j="0";
        j="j|ADDO";//收数据
        ADCLK="1";
        _nop_();
        _nop_();
        ADCLK="0";//形成一次时钟脉冲
        _nop_();
        _nop_();
        j="j"<<7;
        ndat="ndat|j";
        if(i<7)ndat>>=1;
    }
    ADCS="1";//拉低CS端
    ADCLK="0";//拉低CLK端
    ADDO="1";//拉高数据端,回到初始状态
    dat<<=8;
    dat|=ndat;
    return(dat);            //return ad k
}



void main(void)

  while(1)
  {
  getdata="Adc0832"(0);
  temp="getdata"*1.0/255*500;  //电压值转换,5V做为参考电压,分成256份。
  dispbuf[0]=temp%10;  //个位
  dispbuf[2]=temp/10%10; //十位
  dispbuf[1]=temp/100; //百位
  display();
  }
}



 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1697152 2013-8-27 14:10

行不行啊!
相关推荐阅读
用户254708 2011-03-27 12:45
招聘兼职打字员
网~络~兼~职~打~字    职 位 要 求:    1.准确率达到98%    2.自 己有上 网条件,打 字速度要快,工 资可日结.    3.主 要 工 作内 容为录 入手 搞小 说(原 创 版...
用户254708 2011-03-27 12:44
招聘兼职打字员
网~络~兼~职~打~字    职 位 要 求:    1.准确率达到98%    2.自 己有上 网条件,打 字速度要快,工 资可日结.    3.主 要 工 作内 容为录 入手 搞小 说(原 创 版...
用户254708 2010-05-20 19:54
KEIL入门全集4
https://static.assets-stash.eet-china.com/album/old-resources/2008/10/30/78171be9-d6de-41e5-85ec-e9f...
用户254708 2010-05-20 17:09
VC基于MSCOMM控件串口通讯
 在mfc中进行串口通讯最简单的方法莫过于在对话框中使用MSCOMM控件了,MSComm通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备(如Modem).还可以发送命...
用户254708 2010-05-20 17:09
电子工程师的程序人生历程
这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量。最近看到很多学生朋友和我当年一样没有方向 ,所以把我的经历写出来与大家共勉,希望能...
用户254708 2010-05-20 13:45
关于嵌入式系统--献给热爱此道的初学者们
p>再来一篇,还是不很清楚,看来得找电感厂家问问,不知道鸟不鸟我啊。。。。路过的大侠还望出手帮忙啊TDK品牌电感: 1、SLF系列等功率电感,绕线贴片型产品;型号如:SLF7032T-220MR...
EE直播间
更多
我要评论
1
2
关闭 站长推荐上一条 /3 下一条