历史上的今天
返回首页

历史上的今天

今天是:2025年02月06日(星期四)

正在发生

2020年02月06日 | 单片机+ADC0832差分与单通道程序和注解

2020-02-06 来源:51hei

ADC0832差分仿真原理图如下
 

单片机源程序如下(带详细的注释):

#include

#include

#include<1602.h>


#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

uchar code num[]={"0123456789*#"};

sbit ADC_DI=P1^2;                //通道端CH0,CH1

sbit ADC_DO=P1^2;                //数据端

sbit ADC_CLK=P1^1;                //时钟端

sbit ADC_CS=P1^0;                //片选端


sbit DS=P3^5;

sbit SH_CP=P3^6;

sbit ST_CP=P3^7;


void ADC_init()                   //ADC0832初始化

{

        ADC_CS=1;                   //片选端关闭,低电平有效

        ADC_CLK=1;                   //时钟端

        ADC_DI=1;                   //数据端

        _nop_();_nop_();

}

                                                 

void ADC_start()           //ADC0832启动

{

        ADC_CS=0;                        //打开片选

        _nop_();_nop_();

        ADC_CLK=0;                        //第一个时钟脉冲低电平

        _nop_();_nop_();

        ADC_DI=1;                        //打开通道设置

        _nop_();_nop_();

        ADC_CLK=1;                        //第一个时钟脉冲高电平完成第一个时钟脉冲

        _nop_();_nop_();                                

}


void ADC_select_channel()        //ADC0832通道选择:单通道使用CH0

{

        ADC_CLK=0;                                        //第二个时钟脉冲低电平

        _nop_();_nop_();

        ADC_DI=0;                                //DI为1是选用单端输入(单通道),DI为0是选用单道差分输入(双通道)

        _nop_();_nop_();

        ADC_CLK=1;                                        //第二个时钟脉冲高电平完成第二个时钟脉冲

        _nop_();_nop_();

        

        ADC_CLK=0;                                        //第三个时钟脉冲低电平

        _nop_();_nop_();

        ADC_DI=0;                                //第三个脉冲时DI为0选用CH0输入,DI为1是选用CH1输入

        _nop_();_nop_();

        ADC_CLK=1;                                        //第三个时钟脉冲高电平完成第三个时钟脉冲

        _nop_();_nop_();                

}


uchar ADC0832()

{

        uchar dat1,dat2,i;           //定义二个变量dat1存入前8位dat2存入后8位

        ADC_CLK=0;                                   //增加一个时钟脉冲低电平

        _nop_();_nop_();

        ADC_DI=0;                                   //通道端关闭

        _nop_();_nop_();

        ADC_DO=1;                                   //数据端打开

        _nop_();_nop_();

        ADC_CLK=1;                                   //增加一个时钟脉冲高电平(完成一个时钟脉冲)

        _nop_();_nop_();


        for(i=0;i<8;i++)           //循环8次时钟脉冲第四次到第十一次

        {

                ADC_CLK=0;                           //第四个时钟脉冲低电平

                _nop_();_nop_();

                dat1=dat1<<1;           //变量dat1每次循环左移一位,dat1从高位移到低位7位—0位

                if(ADC_DO==1)                   //判断数据端是否高电平

                {

                        dat1=dat1|0x01;   //如果数据端为高电平,变量dat1最低位变成1

                }

                ADC_CLK=1;                           //第四个时钟脉冲高电平完成第四个时钟脉冲

                _nop_();_nop_();

        }


        for(i=0;i<8;i++)                  //循环8次时钟脉冲第十一次到第十九次

        {

                dat2=dat2>>1;                  //变量dat2每次循环右移一位,因为dat2从低位到高位0位——7位,

                if(ADC_DO==1)                  //判断数据端是否高电平

                {

                        dat2=dat2|0x80;           //如果数据端为高电平,变量dat2最高位置1

                }

                ADC_CLK=0;                           //第十一个时钟脉冲低电平

                _nop_();_nop_();

                ADC_CLK=1;                           //第十一个时钟脉冲高电平完成第十一个时钟脉冲

                _nop_();_nop_();

        }


        ADC_CS=1;                                  //片选端关闭

        _nop_();_nop_();


        if(dat1==dat2)                          //判断二个数是否一样

        {

                return dat1;                   //如果一样就返回uchar ADC0832()=dat1

        }

        else

        {

                return 0;                          //如果不是那就返回0

        }

}


void main()

{

         uint tmp;

         ADC_init();

         lcd_init();

         while(1)

         {

         ADC_start();

         ADC_select_channel();

         tmp=ADC0832();

                wirte_lcd_cmd(0x80);

                wirte_lcd_date(num[tmp/1000]);

                wirte_lcd_date(num[tmp%1000/100]);

                wirte_lcd_date(num[tmp%1000%100/10]);

                wirte_lcd_date(num[tmp%10]);

         }

}


ADC0832单通道

#include

#include

#include<1602.h>


#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

uchar code num[]={"0123456789*#"};

sbit ADC_DI=P1^2;                //通道端CH0,CH1

sbit ADC_DO=P1^2;                //数据端

sbit ADC_CLK=P1^1;                //时钟端

sbit ADC_CS=P1^0;                //片选端


sbit DS=P3^5;

sbit SH_CP=P3^6;

sbit ST_CP=P3^7;


void ADC_init()                   //ADC0832初始化

{

        ADC_CS=1;                   //片选端关闭,低电平有效

        ADC_CLK=1;                   //时钟端

        ADC_DI=1;                   //数据端

        _nop_();_nop_();

}

                                                 

推荐阅读

史海拾趣

Concurrent Logic公司的发展小趣事

在取得初步成功后,Concurrent Logic开始扩展其产品线。他们不仅开发了多款针对不同应用场景的并行处理芯片,还进军了与并行计算紧密相关的其他硬件领域,如高性能的服务器和存储设备。这些新产品的研发和上市,进一步增强了公司在市场上的竞争力。

Electric Imp Inc.公司的发展小趣事

在电子行业的浪潮中,Electric Imp Inc.公司以其独特的物联网(IoT)解决方案崭露头角。公司创始人是一位资深的电子工程师,他敏锐地捕捉到了物联网市场的巨大潜力。在创业初期,公司面临资金短缺、技术瓶颈等挑战,但创始人带领团队夜以继日地研发,终于推出了第一款基于云计算的物联网设备管理平台。这款产品凭借其易用性、稳定性和可扩展性,迅速获得了市场的认可。

德国ACAM公司的发展小趣事

2023年,ACAM公司与上海科技大学智造系统工程中心(CASE)签署了增材制造联合研发、应用研究和教育培训协议。这次合作标志着ACAM公司在增材制造领域的布局进一步深化,双方将共同推动增材制造技术的创新和应用,为行业的发展贡献更多的力量。

这五个故事展示了德国ACAM公司在电子行业中的发展历程和取得的成就。从创立之初的技术突破,到被收购后的技术实力大增,再到超声波计量领域的革命性突破,以及与高校合作推动增材制造发展,ACAM公司始终保持着创新的精神和不断进取的态度,为电子行业的发展做出了重要贡献。

Cedrat Technologies公司的发展小趣事

在电子行业中,振动控制是一个至关重要的领域。Cedrat Technologies凭借其在压电技术领域的深厚积累,成功开发了一套主动振动控制系统。该系统通过精确监测机械结构或设备的振动情况,利用压电执行器产生相位相反的振动信号,有效抵消原始振动。这一技术的问世,不仅大幅提升了设备的稳定性和精度,也为机械结构的振动控制开辟了新的途径。Cedrat Technologies因此在电子行业中树立了新的技术标杆。

DURAKOOL公司的发展小趣事

在1935年,DURAKOOL公司在Durakool成立,由几位电子工程师和发明家共同创立。他们的初衷是为电气和电子市场提供高质量的组件和系统。起初,公司面临着资金短缺和市场竞争激烈的挑战,但他们凭借对技术的热情和不懈的努力,逐渐开发出了一系列具有竞争力的产品,如Durakool水银继电器和功率继电器,赢得了客户的认可。

Eurotechnique公司的发展小趣事

Eurotechnique公司成立于XXXX年,由几位具有远见卓识的电子工程师和企业家共同创立。他们看到了当时电子行业快速发展的趋势,尤其是数字电路和微控制器领域的巨大潜力。因此,公司决定专注于这两个领域的技术研发和产品生产。在创立初期,Eurotechnique通过不断的技术创新和产品优化,逐渐在市场上树立了良好的口碑。

问答坊 | AI 解惑

你正在使用什么单片机?

[ 本帖最后由 飞嵌电子 于 2010-7-8 15:48 编辑 ]…

查看全部问答>

驱动无法加载到Device.EXE

注册表已经写入成功了,但是dll文件没加入到device.EXE   这是 什么问题了?…

查看全部问答>

SD卡等存储设备突然掉电后不可用的原因求助

是BPB还是FAT或FDT的损坏? 除了硬件损坏,文件系统突然断电会有什么样的写入错误造成存贮设备不可用吗? 一般的文件系统如果是先写数据,再记录FAT和FDT会提高保护的可能性吗。…

查看全部问答>

Mathcad14,实用的数学和电路应用工具

在这里向EEWORLD的论坛好友们推荐一款软件,我曾经学习过一段时间,个人感觉不错。只是我尚未学到家,所以没能很好的运用到我的学习中来。希望感兴趣的和有需要的论坛好友们可以学习学习。下面我粘贴一些Mathcad的大致介绍。 Mathcad是一种工程计 ...…

查看全部问答>

急急急,SOS!!!!

急求在ccs环境下ucosii移植到5402的源代码(不用修改的)。。。。。。。…

查看全部问答>

求助一个quartus原理图的问题

本人想用quartusII9.0绘制原理图,可按步骤打开后就这样的老是提醒我要安装打印机。绘制不了原理图,求解决方法。我把它卸载了,在安装了,也破解了(用文本方式编辑就可以,不管是verilog还vhdl)。所以按道理是破解了的。可原理图绘制不了。。。 ...…

查看全部问答>

共模输入的好处

本帖最后由 paulhyde 于 2014-9-15 09:19 编辑 共模输入有什么好处呢? 我只知道差模输入的好处。但共模输入就不知道了,但不知道为什么运放的资料手册里会有:Common-mode input range等参数。这可以说明什么?谢谢  …

查看全部问答>

世界上最小的EDA工具

若贝2.0 是世界上最小的国产EDA仿真工具 (只有不到5M),拥有非常现代化的界面,非常简洁的操作模式和可视化与代码设计的融合。简化硬件设计是若贝的宗旨,这款软件可以让用户在15分钟内上手,无需培训。虽然若贝2.0非常的小,但是却拥有了大部分E ...…

查看全部问答>

电源管理中ECO是神马意思?

最近在看一份富士通半导体的产品选型文件中出现的名词ECO不解,在百度上找到的结果是:Engineering Change Order。还有的说是在与环保相关的概念和资料中,ECO 是ECOLOGICAL的缩写,用来表示生态环保的意思。小弟就是想知道ECO到底是个什么技术?还 ...…

查看全部问答>

AVR LED闪烁程序 为什么LED一直亮着 不会闪烁? 软件:ICCAVR Progisp

#include #include void delay(void) { unsigned char a,b; for(a=0;a…

查看全部问答>